summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--CODE-OF-CONDUCT111
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/admin.scm4
-rw-r--r--gnu/packages/algebra.scm5
-rw-r--r--gnu/packages/engineering.scm1
-rw-r--r--gnu/packages/file-systems.scm10
-rw-r--r--gnu/packages/freedesktop.scm4
-rw-r--r--gnu/packages/game-development.scm4
-rw-r--r--gnu/packages/golang.scm150
-rw-r--r--gnu/packages/machine-learning.scm123
-rw-r--r--gnu/packages/mail.scm4
-rw-r--r--gnu/packages/maths.scm4
-rw-r--r--gnu/packages/mpd.scm4
-rw-r--r--gnu/packages/networking.scm4
-rw-r--r--gnu/packages/patches/swig-octave-patches.patch1119
-rw-r--r--gnu/packages/swig.scm5
-rw-r--r--gnu/packages/version-control.scm6
-rw-r--r--gnu/system/vm.scm1
18 files changed, 1457 insertions, 103 deletions
diff --git a/CODE-OF-CONDUCT b/CODE-OF-CONDUCT
index 0458fd787c..ef90330cda 100644
--- a/CODE-OF-CONDUCT
+++ b/CODE-OF-CONDUCT
@@ -1,51 +1,78 @@
-Contributor Code of Conduct
+Contributor Covenant Code of Conduct
 
   Note: In the sequel, "project" refers to GNU Guix, and "project
   maintainer(s)" refers to maintainer(s) of GNU Guix.
 
-As contributors and maintainers of this project, and in the interest of
-fostering an open and welcoming community, we pledge to respect all
-people who contribute through reporting issues, posting feature
-requests, updating documentation, submitting pull requests or patches,
-and other activities.
+Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as
+contributors and maintainers pledge to making participation in our project and
+our community a harassment-free experience for everyone, regardless of age, body
+size, disability, ethnicity, gender identity and expression, level of experience,
+education, socio-economic status, nationality, personal appearance, race,
+religion, or sexual identity and orientation.
+
+Our Standards
+
+Examples of behavior that contributes to creating a positive environment
+include:
+
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
 
-We are committed to making participation in this project a
-harassment-free experience for everyone, regardless of level of
-experience, gender, gender identity and expression, sexual orientation,
-disability, personal appearance, body size, race, ethnicity, age,
-religion, or nationality.
 
 Examples of unacceptable behavior by participants include:
 
-* The use of sexualized language or imagery
-* Personal attacks
-* Trolling or insulting/derogatory comments
+
+* The use of sexualized language or imagery and unwelcome sexual attention or
+advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
 * Public or private harassment
-* Publishing other's private information, such as physical or electronic
-addresses, without explicit permission
-* Other unethical or unprofessional conduct
-
-Project maintainers have the right and responsibility to remove, edit,
-or reject comments, commits, code, wiki edits, issues, and other
-contributions that are not aligned to this Code of Conduct, or to ban
-temporarily or permanently any contributor for other behaviors that they
-deem inappropriate, threatening, offensive, or harmful.
-
-By adopting this Code of Conduct, project maintainers commit themselves
-to fairly and consistently applying these principles to every aspect of
-managing this project. Project maintainers who do not follow or enforce
-the Code of Conduct may be permanently removed from the project team.
-
-This Code of Conduct applies both within project spaces and in public
-spaces when an individual is representing the project or its community.
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may
-be reported by contacting a project maintainer at guix-maintainers@gnu.org.
-All complaints will be reviewed and investigated and will
-result in a response that is deemed necessary and appropriate to the
-circumstances. Maintainers are obligated to maintain confidentiality
-with regard to the reporter of an incident.
-
-This Code of Conduct is adapted from the Contributor Covenant
-(http://contributor-covenant.org), version 1.3.0, available at
-http://contributor-covenant.org/version/1/3/0/
+* Publishing others’ private information, such as a physical or electronic
+address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a
+professional setting
+
+
+Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable
+behavior and are expected to take appropriate and fair corrective action in
+response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or
+reject comments, commits, code, wiki edits, issues, and other contributions
+that are not aligned to this Code of Conduct, or to ban temporarily or
+permanently any contributor for other behaviors that they deem inappropriate,
+threatening, offensive, or harmful.
+
+Scope
+
+This Code of Conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community. Examples of
+representing a project or community include using an official project e-mail
+address, posting via an official social media account, or acting as an appointed
+representative at an online or offline event. Representation of a project may be
+further defined and clarified by project maintainers.
+
+Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by contacting the project team at guix-maintainers@gnu.org. All
+complaints will be reviewed and investigated and will result in a response that
+is deemed necessary and appropriate to the circumstances. The project team is
+obligated to maintain confidentiality with regard to the reporter of an incident.
+Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good
+faith may face temporary or permanent repercussions as determined by other
+members of the project’s leadership.
+
+Attribution
+
+This Code of Conduct is adapted from the Contributor Covenant, version 1.4,
+available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
diff --git a/gnu/local.mk b/gnu/local.mk
index 2e266af44d..1f7987b580 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1105,6 +1105,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/steghide-fixes.patch			\
   %D%/packages/patches/strace-kernel-4.16.patch			\
   %D%/packages/patches/superlu-dist-scotchmetis.patch		\
+  %D%/packages/patches/swig-octave-patches.patch		\
   %D%/packages/patches/swish-e-search.patch			\
   %D%/packages/patches/swish-e-format-security.patch		\
   %D%/packages/patches/synfigstudio-fix-ui-with-gtk3.patch 	\
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 437a183f7b..2583cc2018 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -1953,7 +1953,7 @@ throughput (in the same interval).")
 (define-public thefuck
   (package
     (name "thefuck")
-    (version "3.26")
+    (version "3.27")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/nvbn/thefuck/archive/"
@@ -1961,7 +1961,7 @@ throughput (in the same interval).")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0ddlf25ik97z34bcpc52xyfhlfm6a3hdi43l6cz4ggwcawdwvn1p"))
+                "0my32n2x8x0f0wr8ql7qgk9qhb6ibv5b1rqs5b2r4nadv0gpiv96"))
               (patches (search-patches "thefuck-test-environ.patch"))))
     (build-system python-build-system)
     (arguments
diff --git a/gnu/packages/algebra.scm b/gnu/packages/algebra.scm
index 806dc45a24..816f013655 100644
--- a/gnu/packages/algebra.scm
+++ b/gnu/packages/algebra.scm
@@ -714,9 +714,10 @@ Sine Transform} (DST) and @dfn{Discrete Hartley Transform} (DHT).")
                ;; but maintainers say it's a known issue and it's unsupported
                ;; anyway, so just skip them.
                '(begin
+                  (substitute* "unsupported/CMakeLists.txt"
+                    (("add_subdirectory\\(test.*")
+                     "# Do not build the tests for unsupported features.\n"))
 		  (substitute* "CMakeLists.txt"
-                    (("add_subdirectory\\(unsupported\\)")
-                     "# Do not build the tests for unsupported features.\n")
                     ;; Work around
                     ;; <http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1114>.
                     (("\"include/eigen3\"")
diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm
index 0f137dd035..a28a5db0eb 100644
--- a/gnu/packages/engineering.scm
+++ b/gnu/packages/engineering.scm
@@ -7,6 +7,7 @@
 ;;; Copyright © 2016, 2017 Theodoros Foradis <theodoros@foradis.org>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index 6522662c4e..4fd33ae901 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 Gábor Boskovits <boskovits@gmail.com>
 ;;; Copyright © 2017 Ricardo Wurmus <rekado@elephly.net>
 ;;;
@@ -107,17 +107,17 @@ single file can be mounted.")
 (define-public disorderfs
   (package
     (name "disorderfs")
-    (version "0.5.2")
+    (version "0.5.3")
     (source
      (origin
        (method git-fetch)
        (uri (git-reference
-             (url "https://github.com/ReproducibleBuilds/disorderfs.git")
-             (commit "0.5.2")))
+             (url "https://salsa.debian.org/reproducible-builds/disorderfs.git")
+             (commit version)))
        (file-name (git-file-name name version))
        (sha256
         (base32
-         "1j028dq3d4m64mn9xmfamcnnc7i2drmra4pdmxdmqdsi8p7yj4sv"))))
+         "1nmhfvxpvz3xsfxl9wqnh6r2l5m7hjq6n0vpblsl5xdcvwaqcf50"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)))
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 71b35894d9..a6b79f41b0 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -82,7 +82,7 @@
 (define-public xdg-utils
   (package
     (name "xdg-utils")
-    (version "1.1.2")
+    (version "1.1.3")
     (source
       (origin
         (method url-fetch)
@@ -91,7 +91,7 @@
                  version ".tar.gz"))
           (sha256
             (base32
-             "1k4b4m3aiyqn9k12a0ihcdahzlspl3zhskmm1d7228dvqvi546cm"))))
+             "1nai806smz3zcb2l5iny4x7li0fak0rzmjg6vlyhdqm8z25b166p"))))
     (build-system gnu-build-system)
     (native-inputs
      `(("docbook-xsl" ,docbook-xsl)
diff --git a/gnu/packages/game-development.scm b/gnu/packages/game-development.scm
index be7b758f91..3d6a038d9d 100644
--- a/gnu/packages/game-development.scm
+++ b/gnu/packages/game-development.scm
@@ -396,7 +396,7 @@ support.")
 (define-public tiled
   (package
     (name "tiled")
-    (version "1.1.4")
+    (version "1.1.5")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/bjorn/tiled/archive/v"
@@ -404,7 +404,7 @@ support.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "0xb3zwcdk7khdrza6spl02g5n2xbij6nbszv8vi27vagjnmz1wxh"))))
+                "1zrq1nhb50mwqzw3fln6vj49ljddil1v7yby3ahjbcm94s25ll1y"))))
     (build-system gnu-build-system)
     (inputs
      `(("qtbase" ,qtbase)
diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm
index 7b09f56853..d61747a09c 100644
--- a/gnu/packages/golang.scm
+++ b/gnu/packages/golang.scm
@@ -1471,3 +1471,153 @@ Features include:
       (description "This package is atomic boolean library for Go code,
 optimized for performance yet simple to use.")
       (license license:expat))))
+
+(define-public go-github-com-urfave-cli
+  (let ((commit "cfb38830724cc34fedffe9a2a29fb54fa9169cd1")
+        (revision "0"))
+    (package
+      (name "go-github-com-urfave-cli")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/urfave/cli.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0y6f4sbzkiiwrxbl15biivj8c7qwxnvm3zl2dd3mw4wzg4x10ygj"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/urfave/cli"))
+      (home-page "https://github.com/urfave/cli")
+      (synopsis "Library for building command-line interfaces in Go")
+      (description "This package provides a library for building command-line
+interfaces in Go.")
+      (license license:expat))))
+
+(define-public go-github-com-blang-semver
+  (let ((commit "60ec3488bfea7cca02b021d106d9911120d25fe9")
+        (revision "0"))
+    (package
+      (name "go-github-com-blang-semver")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/blang/semver.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "19pli07y5592g4dyjyj0jq5rn548vc3fz0qg3624vm1j5828p1c2"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/blang/semver"))
+      (home-page "https://github.com/blang/semver")
+      (synopsis "Semantic versioning library written in Go")
+      (description "Semver is a library for Semantic versioning written in Go.")
+      (license license:expat))))
+
+(define-public go-github-com-emicklei-go-restful
+  (let ((commit "89ef8af493ab468a45a42bb0d89a06fccdd2fb22")
+        (revision "0"))
+    (package
+      (name "go-github-com-emicklei-go-restful")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/emicklei/go-restful.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "0rrlfcfq80fkxifpih6bq31vavb5mf4530xz51pp9pq1mn2fzjfh"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/emicklei/go-restful"))
+      (home-page "https://github.com/emicklei/go-restful")
+      (synopsis "Build REST-style web services using Go")
+      (description "This package provides @code{go-restful}, which helps
+developers to use @code{http} methods explicitly and in a way that's consistent
+with the HTTP protocol definition.")
+      (license license:expat))))
+
+(define-public go-github-com-google-cadvisor
+  (let ((commit "2ed7198f77395ee9a172878a0a7ab92ab59a2cfd")
+        (revision "0"))
+    (package
+      (name "go-github-com-google-cadvisor")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/google/cadvisor.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1w8p345z5j0gk3yiq5ah0znd5lfh348p2s624k5r10drz04p3f55"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/google/cadvisor"))
+      (home-page "https://github.com/google/cadvisor")
+      (synopsis "Analyze resource usage of running containers")
+      (description "The package provides @code{cadvisor}, which provides
+information about the resource usage and preformance characteristics of running
+containers.")
+      (license license:asl2.0))))
+
+(define-public go-github-com-google-gofuzz
+  (let ((commit "fd52762d25a41827db7ef64c43756fd4b9f7e382")
+        (revision "0"))
+    (package
+      (name "go-github-com-google-gofuzz")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/google/gofuzz.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "1yxmmr73h0lq7ryf3q9a7pcm2x5xrg4d5bxkq8n5pxwxwyq26kw8"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/google/gofuzz"))
+      (home-page "https://github.com/google/gofuzz")
+      (synopsis "Fuzz testing library for Go")
+      (description "Gofuzz is a library for populationg Go objects with random
+values for the purpose of fuzz testing.")
+      (license license:asl2.0))))
+
+(define-public go-github-com-gorilla-context
+  (let ((commit "08b5f424b9271eedf6f9f0ce86cb9396ed337a42")
+        (revision "0"))
+    (package
+      (name "go-github-com-gorilla-context")
+      (version (git-version "0.0.0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference
+               (url "https://github.com/gorilla/context.git")
+               (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32
+           "03p4hn87vcmfih0p9w663qbx9lpsf7i7j3lc7yl7n84la3yz63m4"))))
+      (build-system go-build-system)
+      (arguments
+       '(#:import-path "github.com/gorilla/context"))
+      (home-page "https://github.com/gorilla/context")
+      (synopsis "Go registry for request variables")
+      (description "This package provides @code{gorilla/context}, which is a general purpose registry for global request variables in the Go programming language.")
+      (license license:bsd-3))))
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index fb511b4949..e6f7a18346 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018 Kei Kebreau <kkebreau@posteo.net>
 ;;; Copyright © 2018 Mark Meyer <mark@ofosos.org>
 ;;; Copyright © 2018 Ben Woodcroft <donttrustben@gmail.com>
 ;;; Copyright © 2018 Fis Trivial <ybbs.daans@hotmail.com>
@@ -36,6 +37,7 @@
   #:use-module (guix build-system r)
   #:use-module (guix git-download)
   #:use-module (gnu packages)
+  #:use-module (gnu packages algebra)
   #:use-module (gnu packages autotools)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
@@ -366,7 +368,7 @@ sample proximities between pairs of cases.")
 (define-public shogun
   (package
     (name "shogun")
-    (version "4.0.0")
+    (version "6.1.3")
     (source
      (origin
        (method url-fetch)
@@ -376,7 +378,7 @@ sample proximities between pairs of cases.")
              "/sources/shogun-" version ".tar.bz2"))
        (sha256
         (base32
-         "159nlijnb7mnrv9za80wnm1shwvy45hgrqzn51hxy7gw4z6d6fdb"))
+         "1rn9skm3nw6hr7mr3lgp2gfqhi7ii0lyxck7qmqnf8avq349s5jp"))
        (modules '((guix build utils)
                   (ice-9 rdelim)))
        (snippet
@@ -408,8 +410,20 @@ sample proximities between pairs of cases.")
                                    (and skipping? (not skip-next?)))
                            (display line out))
                          (loop (read-line in 'concat) skip-next?)))))))
-           (for-each delete-ifdefs (find-files "src/shogun/kernel/"
-                                               "^Kernel\\.(cpp|h)"))
+           (for-each delete-ifdefs
+                     (append
+                      (find-files "src/shogun/classifier/mkl"
+                                  "^MKLClassification\\.cpp")
+                      (find-files "src/shogun/classifier/svm"
+                                  "^SVMLightOneClass\\.(cpp|h)")
+                      (find-files "src/shogun/multiclass"
+                                  "^ScatterSVM\\.(cpp|h)")
+                      (find-files "src/shogun/kernel/"
+                                  "^(Kernel|CombinedKernel|ProductKernel)\\.(cpp|h)")
+                      (find-files "src/shogun/regression/svr"
+                                  "^(MKLRegression|SVRLight)\\.(cpp|h)")
+                      (find-files "src/shogun/transfer/domain_adaptation"
+                                  "^DomainAdaptationSVM\\.(cpp|h)")))
            #t))))
     (build-system cmake-build-system)
     (arguments
@@ -423,62 +437,59 @@ sample proximities between pairs of cases.")
                                      "applications/easysvm/data"
                                      "applications/msplicer/data"
                                      "applications/ocr/data"
-                                     "examples/documented/data"
-                                     "examples/documented/matlab_static"
-                                     "examples/documented/octave_static"
-                                     "examples/undocumented/data"
-                                     "examples/undocumented/matlab_static"
-                                     "examples/undocumented/octave_static"
-                                     "tests/integration/data"
-                                     "tests/integration/matlab_static"
-                                     "tests/integration/octave_static"
-                                     "tests/integration/python_modular/tests"))
+                                     "examples/meta/data"
+                                     "examples/undocumented/data"))
              #t))
          (add-after 'unpack 'change-R-target-path
            (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* '("src/interfaces/r_modular/CMakeLists.txt"
-                            "src/interfaces/r_static/CMakeLists.txt"
-                            "examples/undocumented/r_modular/CMakeLists.txt")
+             (substitute* '("src/interfaces/r/CMakeLists.txt"
+                            "examples/meta/r/CMakeLists.txt")
                (("\\$\\{R_COMPONENT_LIB_PATH\\}")
                 (string-append (assoc-ref outputs "out")
                                "/lib/R/library/")))
              #t))
          (add-after 'unpack 'fix-octave-modules
            (lambda* (#:key outputs #:allow-other-keys)
-             (substitute* '("src/interfaces/octave_modular/CMakeLists.txt"
-                            "src/interfaces/octave_static/CMakeLists.txt")
+             (substitute* "src/interfaces/octave/CMakeLists.txt"
                (("^include_directories\\(\\$\\{OCTAVE_INCLUDE_DIRS\\}")
-                "include_directories(${OCTAVE_INCLUDE_DIRS} ${OCTAVE_INCLUDE_DIRS}/octave"))
-
-             ;; change target directory
-             (substitute* "src/interfaces/octave_modular/CMakeLists.txt"
+                "include_directories(${OCTAVE_INCLUDE_DIRS} ${OCTAVE_INCLUDE_DIRS}/octave")
+               ;; change target directory
                (("\\$\\{OCTAVE_OCT_LOCAL_API_FILE_DIR\\}")
                 (string-append (assoc-ref outputs "out")
                                "/share/octave/packages")))
+             (substitute* '("src/interfaces/octave/swig_typemaps.i"
+                            "src/interfaces/octave/sg_print_functions.cpp")
+               ;; "octave/config.h" and "octave/oct-obj.h" deprecated in Octave.
+               (("octave/config\\.h") "octave/octave-config.h")
+               (("octave/oct-obj.h") "octave/ovl.h"))
              #t))
+         (add-after 'unpack 'move-rxcpp
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((rxcpp-dir "shogun/third-party/rxcpp"))
+               (mkdir-p rxcpp-dir)
+               (install-file (assoc-ref inputs "rxcpp") rxcpp-dir)
+               #t)))
          (add-before 'build 'set-HOME
            ;; $HOME needs to be set at some point during the build phase
            (lambda _ (setenv "HOME" "/tmp") #t)))
        #:configure-flags
        (list "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE"
              "-DUSE_SVMLIGHT=OFF" ;disable proprietary SVMLIGHT
-             ;;"-DJavaModular=ON" ;requires unpackaged jblas
-             ;;"-DRubyModular=ON" ;requires unpackaged ruby-narray
-             ;;"-DPerlModular=ON" ;"FindPerlLibs" does not exist
-             ;;"-DLuaModular=ON"  ;fails because lua doesn't build pkgconfig file
-             "-DOctaveModular=ON"
-             "-DOctaveStatic=ON"
-             "-DPythonModular=ON"
-             "-DPythonStatic=ON"
-             "-DRModular=ON"
-             "-DRStatic=ON"
-             "-DCmdLineStatic=ON")))
+             "-DBUILD_META_EXAMPLES=OFF" ;requires unpackaged ctags
+             ;;"-DINTERFACE_JAVA=ON" ;requires unpackaged jblas
+             ;;"-DINTERFACE_RUBY=ON" ;requires unpackaged ruby-narray
+             ;;"-DINTERFACE_PERL=ON" ;"FindPerlLibs" does not exist
+             ;;"-DINTERFACE_LUA=ON"  ;fails because lua doesn't build pkgconfig file
+             "-DINTERFACE_OCTAVE=ON"
+             "-DINTERFACE_PYTHON=ON"
+             "-DINTERFACE_R=ON")))
     (inputs
      `(("python" ,python)
        ("numpy" ,python-numpy)
        ("r-minimal" ,r-minimal)
        ("octave" ,octave)
        ("swig" ,swig)
+       ("eigen" ,eigen)
        ("hdf5" ,hdf5)
        ("atlas" ,atlas)
        ("arpack" ,arpack-ng)
@@ -488,7 +499,8 @@ sample proximities between pairs of cases.")
        ("lzo" ,lzo)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(("pkg-config" ,pkg-config)
+       ("rxcpp" ,rxcpp)))
     ;; Non-portable SSE instructions are used so building fails on platforms
     ;; other than x86_64.
     (supported-systems '("x86_64-linux"))
@@ -502,6 +514,47 @@ tools.  This enables both rapid prototyping of data pipelines and extensibility
 in terms of new algorithms.")
     (license license:gpl3+)))
 
+(define-public rxcpp
+  (package
+    (name "rxcpp")
+    (version "4.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://github.com/ReactiveX/RxCpp/archive/v"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "0y2isr8dy2n1yjr9c5570kpc9lvdlch6jv0jvw000amwn5d3krsh"))
+       (file-name (string-append name "-" version ".tar.gz"))))
+    (build-system cmake-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'remove-werror
+           (lambda _
+             (substitute* (find-files ".")
+               (("-Werror") ""))
+             #t))
+         (replace 'check
+           (lambda _
+             (invoke "ctest"))))))
+    (native-inputs
+     `(("catch" ,catch-framework)))
+    (home-page "http://reactivex.io/")
+    (synopsis "Reactive Extensions for C++")
+    (description
+     "The Reactive Extensions for C++ (RxCpp) is a library of algorithms for
+values-distributed-in-time.  ReactiveX is a library for composing asynchronous
+and event-based programs by using observable sequences.
+
+It extends the observer pattern to support sequences of data and/or events and
+adds operators that allow you to compose sequences together declaratively while
+abstracting away concerns about things like low-level threading,
+synchronization, thread-safety, concurrent data structures, and non-blocking
+I/O.")
+    (license license:asl2.0)))
+
 (define-public r-adaptivesparsity
   (package
     (name "r-adaptivesparsity")
diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index b55d9eb3c5..49663fdf90 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -2497,7 +2497,7 @@ killed threads.")
 (define-public pan
   (package
     (name "pan")
-    (version "0.144")
+    (version "0.145")
     (source
      (origin
        (method url-fetch)
@@ -2505,7 +2505,7 @@ killed threads.")
                            version "/source/" name "-" version ".tar.bz2"))
        (sha256
         (base32
-         "0l07y75z8jxhbmfv28slw81gjncs7i89x7fq44zif7xhq5vy7yli"))))
+         "1b4wamv33hprghcjk903bpvnd233yxyrm18qnh13alc8h1553nk8"))))
     (arguments
      `(#:configure-flags '("--with-gtk3" "--with-gtkspell" "--with-gnutls"
                            "--enable-libnotify" "--enable-manual"
diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm
index 09d2780ced..fa36431e79 100644
--- a/gnu/packages/maths.scm
+++ b/gnu/packages/maths.scm
@@ -1337,7 +1337,7 @@ can solve two kinds of problems:
 (define-public octave
   (package
     (name "octave")
-    (version "4.2.2")
+    (version "4.4.0")
     (source
      (origin
       (method url-fetch)
@@ -1345,7 +1345,7 @@ can solve two kinds of problems:
                           version ".tar.lz"))
       (sha256
        (base32
-        "0pkkz1vazsh7ipffb09q0nc2jgx6q27pkkngygjij6jrpcly5zsp"))))
+        "0nm766737gbkq9wqry54a026k3dg7rb1065kngfpwgjz8b544xbp"))))
     (build-system gnu-build-system)
     (inputs
      `(("lapack" ,lapack)
diff --git a/gnu/packages/mpd.scm b/gnu/packages/mpd.scm
index 6f2ff5d784..3c06fb0e64 100644
--- a/gnu/packages/mpd.scm
+++ b/gnu/packages/mpd.scm
@@ -88,7 +88,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
 (define-public mpd
   (package
     (name "mpd")
-    (version "0.20.19")
+    (version "0.20.20")
     (source (origin
               (method url-fetch)
               (uri
@@ -97,7 +97,7 @@ interfacing MPD in the C, C++ & Objective C languages.")
                               "/mpd-" version ".tar.xz"))
               (sha256
                (base32
-                "1hsng4mnaz1jr2s3fy3q78vf2f6102lwphjdls7qln0pj8dyzk81"))))
+                "111m4z7zaz60xfxvz5xkxs1al4vzb8g2wwp7kmj65pvww335ir59"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
diff --git a/gnu/packages/networking.scm b/gnu/packages/networking.scm
index bddd4bc857..43aaf33dd0 100644
--- a/gnu/packages/networking.scm
+++ b/gnu/packages/networking.scm
@@ -546,7 +546,7 @@ of the same name.")
 (define-public wireshark
   (package
     (name "wireshark")
-    (version "2.6.0")
+    (version "2.6.1")
     (source
      (origin
        (method url-fetch)
@@ -554,7 +554,7 @@ of the same name.")
                            version ".tar.xz"))
        (sha256
         (base32
-         "0zqip4ai18iar7sgialc3jmpng1yxxy4i9bphbaig23ss80py73i"))))
+         "126dvd6myjbxjr69dy9vzzdda2lmjy1wwwc6gcs5djb46jy5nvmb"))))
     (build-system gnu-build-system)
     (inputs `(("c-ares" ,c-ares)
               ("glib" ,glib)
diff --git a/gnu/packages/patches/swig-octave-patches.patch b/gnu/packages/patches/swig-octave-patches.patch
new file mode 100644
index 0000000000..9fb64a7b1f
--- /dev/null
+++ b/gnu/packages/patches/swig-octave-patches.patch
@@ -0,0 +1,1119 @@
+This patch represents the recently added support for Octave version 4.4 found
+here:
+
+https://github.com/swig/swig/commit/12c66f9b7d884020e896ce92b9783bc3bac95d2d
+
+diff -urN swig-3.0.12.old/CHANGES.current swig-3.0.12.new/CHANGES.current
+--- swig-3.0.12.old/CHANGES.current	2017-01-27 18:52:02.000000000 -0500
++++ swig-3.0.12.new/CHANGES.current	2018-05-26 08:40:06.501850058 -0400
+@@ -4,6 +4,14 @@
+ Issue # numbers mentioned below can be found on Github. For more details, add
+ the issue number to the end of the URL: https://github.com/swig/swig/issues/
+ 
++Version 4.0.0 (in progress)
++===========================
++
++2018-05-12: kwwette
++            [Octave] add support for version 4.4
++            - Should not introduce any user-visible incompatibilities
++
++
+ Version 3.0.12 (27 Jan 2017)
+ ============================
+ 
+diff -urN swig-3.0.12.old/Examples/Makefile.in swig-3.0.12.new/Examples/Makefile.in
+--- swig-3.0.12.old/Examples/Makefile.in	2017-01-27 18:52:02.000000000 -0500
++++ swig-3.0.12.new/Examples/Makefile.in	2018-05-26 08:39:16.510124553 -0400
+@@ -463,7 +463,7 @@
+ # -----------------------------------------------------------------
+ 
+ octave_run:
+-	OCTAVE_HISTFILE=/dev/null $(RUNTOOL) $(OCTAVE) $(OCTAVE_SCRIPT) $(RUNPIPE)
++	env OCTAVE_PATH= OCTAVE_HISTFILE=/dev/null $(RUNTOOL) $(OCTAVE) $(OCTAVE_SCRIPT) $(RUNPIPE)
+ 
+ # -----------------------------------------------------------------
+ # Version display
+diff -urN swig-3.0.12.old/Examples/octave/module_load/runme.m swig-3.0.12.new/Examples/octave/module_load/runme.m
+--- swig-3.0.12.old/Examples/octave/module_load/runme.m	2017-01-27 18:52:02.000000000 -0500
++++ swig-3.0.12.new/Examples/octave/module_load/runme.m	2018-05-26 08:39:16.518124669 -0400
+@@ -5,63 +5,73 @@
+ 
+ # load module
+ clear all;
++assert(exist("swigexample") == 3);
+ swigexample;
++assert(isglobal("swigexample"));
+ assert(cvar.ivar == ifunc);
+-assert(exist("swigexample","var"));
+ clear all
++assert(exist("swigexample") == 3);
+ swigexample;
++assert(isglobal("swigexample"));
+ assert(cvar.ivar == ifunc);
+-assert(exist("swigexample","var"));
+ clear all
+ 
+ # load module in a function globally before base context
+ clear all;
+-function testme
++function testme_1
++  assert(exist("swigexample") == 3);
+   swigexample;
++  assert(isglobal("swigexample"));
+   assert(cvar.ivar == ifunc);
+-  assert(exist("swigexample","var"));
+ endfunction
+-testme
+-testme
++testme_1
++testme_1
++assert(exist("swigexample") == 3);
+ swigexample;
++assert(isglobal("swigexample"));
+ assert(cvar.ivar == ifunc);
+-assert(exist("swigexample","var"));
+ clear all
+-function testme
++function testme_2
++  assert(exist("swigexample") == 3);
+   swigexample;
++  assert(isglobal("swigexample"));
+   assert(cvar.ivar == ifunc);
+-  assert(exist("swigexample","var"));
+ endfunction
+-testme
+-testme
++testme_2
++testme_2
++assert(exist("swigexample") == 3);
+ swigexample;
++assert(isglobal("swigexample"));
+ assert(cvar.ivar == ifunc);
+-assert(exist("swigexample","var"));
+ clear all
+ 
+ # load module in a function globally after base context
+ clear all;
++assert(exist("swigexample") == 3);
+ swigexample;
++assert(isglobal("swigexample"));
+ assert(cvar.ivar == ifunc);
+-assert(exist("swigexample","var"));
+-function testme
++function testme_3
++  assert(exist("swigexample") == 3);
+   swigexample;
++  assert(isglobal("swigexample"));
+   assert(cvar.ivar == ifunc);
+-  assert(exist("swigexample","var"));
+ endfunction
+-testme
+-testme
++testme_3
++testme_3
+ clear all
++assert(exist("swigexample") == 3);
+ swigexample;
++assert(isglobal("swigexample"));
+ assert(cvar.ivar == ifunc);
+-assert(exist("swigexample","var"));
+-function testme
++function testme_4
++  assert(exist("swigexample") == 3);
+   swigexample;
++  assert(isglobal("swigexample"));
+   assert(cvar.ivar == ifunc);
+-  assert(exist("swigexample","var"));
+ endfunction
+-testme
+-testme
++testme_4
++testme_4
+ clear all
+ 
+ # octave 3.0.5 randomly crashes on the remaining tests
+@@ -71,13 +81,16 @@
+ 
+ # load module with no cvar
+ clear all;
++who;
++assert(exist("swigexample2") == 3);
+ swigexample2;
++assert(isglobal("swigexample2"));
+ assert(swigexample2.ivar == ifunc);
+-assert(exist("swigexample2","var"));
+-assert(!isglobal("cvar"))
++assert(!exist("cvar", "var"));
+ clear all
++assert(exist("swigexample2") == 3);
+ swigexample2;
++assert(isglobal("swigexample2"));
+ assert(swigexample2.ivar == ifunc);
+-assert(exist("swigexample2","var"));
+-assert(!isglobal("cvar"))
++assert(!exist("cvar", "var"));
+ clear all
+diff -urN swig-3.0.12.old/Examples/test-suite/octave/Makefile.in swig-3.0.12.new/Examples/test-suite/octave/Makefile.in
+--- swig-3.0.12.old/Examples/test-suite/octave/Makefile.in	2017-01-27 18:52:02.000000000 -0500
++++ swig-3.0.12.new/Examples/test-suite/octave/Makefile.in	2018-05-26 08:39:16.511124567 -0400
+@@ -59,7 +59,7 @@
+ # a file is found which has _runme.m appended after the testcase name.
+ run_testcase = \
+ 	if [ -f $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \
+-	  env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH OCTAVE_PATH=$(srcdir):$$OCTAVE_PATH $(RUNTOOL) $(OCTAVE) $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \
++	  env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH OCTAVE_PATH=$(srcdir) OCTAVE_HISTFILE=/dev/null $(RUNTOOL) $(OCTAVE) $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \
+ 	fi
+ 
+ # Clean: remove the generated .m file
+diff -urN swig-3.0.12.old/Examples/test-suite/octave/Makefile.in.orig swig-3.0.12.new/Examples/test-suite/octave/Makefile.in.orig
+--- swig-3.0.12.old/Examples/test-suite/octave/Makefile.in.orig	1969-12-31 19:00:00.000000000 -0500
++++ swig-3.0.12.new/Examples/test-suite/octave/Makefile.in.orig	2017-01-27 18:52:02.000000000 -0500
+@@ -0,0 +1,92 @@
++#######################################################################
++# Makefile for octave test-suite
++#######################################################################
++
++LANGUAGE     = octave
++OCTAVE       = @OCTAVE@
++SCRIPTSUFFIX = _runme.m
++
++srcdir       = @srcdir@
++top_srcdir   = @top_srcdir@
++top_builddir = @top_builddir@
++
++CPP_TEST_CASES += \
++	li_std_pair_extra \
++	li_std_string_extra \
++	octave_cell_deref\
++	octave_dim
++
++CPP_TEST_BROKEN += \
++	implicittest \
++	li_implicit \
++	li_std_set \
++	li_std_stream
++
++#C_TEST_CASES +=
++
++#
++# This test only works with modern C compilers
++#
++#C_TEST_CASES += \
++#	complextest
++
++include $(srcdir)/../common.mk
++
++# Overridden variables here
++LIBS       = -L.
++CSRCS      = octave_empty.c
++
++# Custom tests - tests with additional commandline options
++# none!
++
++# Rules for the different types of tests
++%.cpptest:
++	$(setup)
++	+$(swig_and_compile_cpp)
++	$(run_testcase)
++
++%.ctest:
++	$(setup)
++	+$(swig_and_compile_c)
++	$(run_testcase)
++
++%.multicpptest:
++	$(setup)
++	+$(swig_and_compile_multi_cpp)
++	$(run_testcase)
++
++# Runs the testcase. A testcase is only run if
++# a file is found which has _runme.m appended after the testcase name.
++run_testcase = \
++	if [ -f $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX) ]; then \
++	  env LD_LIBRARY_PATH=.:$$LD_LIBRARY_PATH OCTAVE_PATH=$(srcdir):$$OCTAVE_PATH $(RUNTOOL) $(OCTAVE) $(SCRIPTDIR)/$(SCRIPTPREFIX)$*$(SCRIPTSUFFIX); \
++	fi
++
++# Clean: remove the generated .m file
++%.clean:
++	@rm -f hugemod.h hugemod_a.i hugemod_b.i hugemod_a.m hugemod_b.m hugemod_runme.m
++	@rm -f $*.m;
++
++clean:
++	$(MAKE) -f $(top_builddir)/$(EXAMPLES)/Makefile SRCDIR='$(SRCDIR)' octave_clean
++
++cvsignore:
++	@echo '*wrap* *.mc *.so *.dll *.exp *.lib'
++	@echo Makefile
++	@for i in ${CPP_TEST_CASES} ${C_TEST_CASES}; do echo $$i.m; done
++	@for i in ${CPP_TEST_CASES} ${C_TEST_CASES}; do if grep -q $${i}_runme.m CVS/Entries ; then echo $${i}_runme.m; fi; done
++	@echo clientdata_prop_a.m
++	@echo clientdata_prop_b.m
++	@echo imports_a.m
++	@echo imports_b.m
++	@echo mod_a.m mod_b.m
++	@echo hugemod.h hugemod_a.i hugemod_b.i hugemod_a.m hugemod_b.m hugemod_runme.m
++	@echo template_typedef_import.m
++
++
++hugemod:
++	perl hugemod.pl
++	$(MAKE) hugemod_a.cpptest
++	$(MAKE) hugemod_b.cpptest
++	time $(OCTAVE) hugemod_runme.m
++	time $(OCTAVE) hugemod_runme.m
+diff -urN swig-3.0.12.old/Examples/test-suite/register_par.i swig-3.0.12.new/Examples/test-suite/register_par.i
+--- swig-3.0.12.old/Examples/test-suite/register_par.i	2017-01-27 18:52:02.000000000 -0500
++++ swig-3.0.12.new/Examples/test-suite/register_par.i	2018-05-26 08:40:28.146164544 -0400
+@@ -2,5 +2,5 @@
+ 
+ // bug # 924413
+ %inline {
+-  void clear_tree_flags(register struct tree *tp, register int i) {}
++  void clear_tree_flags(register struct swig_tree *tp, register int i) {}
+ }
+diff -urN swig-3.0.12.old/Examples/test-suite/register_par.i.orig swig-3.0.12.new/Examples/test-suite/register_par.i.orig
+--- swig-3.0.12.old/Examples/test-suite/register_par.i.orig	1969-12-31 19:00:00.000000000 -0500
++++ swig-3.0.12.new/Examples/test-suite/register_par.i.orig	2018-05-26 08:39:16.518124669 -0400
+@@ -0,0 +1,6 @@
++%module register_par
++
++// bug # 924413
++%inline {
++  void clear_tree_flags(register struct tree *tp, register int i) {}
++}
+diff -urN swig-3.0.12.old/Examples/test-suite/register_par.i.rej swig-3.0.12.new/Examples/test-suite/register_par.i.rej
+--- swig-3.0.12.old/Examples/test-suite/register_par.i.rej	1969-12-31 19:00:00.000000000 -0500
++++ swig-3.0.12.new/Examples/test-suite/register_par.i.rej	2018-05-26 08:39:16.518124669 -0400
+@@ -0,0 +1,15 @@
++--- Examples/test-suite/register_par.i
+++++ Examples/test-suite/register_par.i
++@@ -1,10 +1,10 @@
++ %module register_par
++ 
++ %{
++-struct tree;
+++struct swig_tree;
++ %}
++ 
++ // bug # 924413
++ %inline {
++-  void clear_tree_flags(register struct tree *tp, register int i) {}
+++  void clear_tree_flags(register struct swig_tree *tp, register int i) {}
++ }
+diff -urN swig-3.0.12.old/Lib/octave/octcontainer.swg swig-3.0.12.new/Lib/octave/octcontainer.swg
+--- swig-3.0.12.old/Lib/octave/octcontainer.swg	2017-01-27 18:52:02.000000000 -0500
++++ swig-3.0.12.new/Lib/octave/octcontainer.swg	2018-05-26 08:39:16.488124234 -0400
+@@ -567,7 +567,11 @@
+ 	  if (seq) *seq = p;
+ 	  return SWIG_OLDOBJ;
+ 	}
++%#if SWIG_OCTAVE_PREREQ(4,4,0)
++      } else if (obj.iscell()) {
++%#else
+       } else if (obj.is_cell()) {
++%#endif
+ 	try {
+ 	  OctSequence_Cont<value_type> octseq(obj);
+ 	  if (seq) {
+diff -urN swig-3.0.12.old/Lib/octave/octprimtypes.swg swig-3.0.12.new/Lib/octave/octprimtypes.swg
+--- swig-3.0.12.old/Lib/octave/octprimtypes.swg	2017-01-27 18:52:02.000000000 -0500
++++ swig-3.0.12.new/Lib/octave/octprimtypes.swg	2018-05-26 08:39:16.492124292 -0400
+@@ -18,7 +18,11 @@
+ SWIGINTERN int
+ SWIG_AsVal_dec(bool)(const octave_value& ov, bool *val)
+ {
++%#if SWIG_OCTAVE_PREREQ(4,4,0)
++  if (!ov.islogical())
++%#else
+   if (!ov.is_bool_type())
++%#endif
+     return SWIG_ERROR;
+   if (val)
+     *val = ov.bool_value();
+@@ -214,7 +218,13 @@
+ SWIGINTERN int
+ SWIG_AsCharPtrAndSize(octave_value ov, char** cptr, size_t* psize, int *alloc)
+ {
+-  if (ov.is_cell() && ov.rows() == 1 && ov.columns() == 1)
++  if (
++%#if SWIG_OCTAVE_PREREQ(4,4,0)
++    ov.iscell()
++%#else
++    ov.is_cell()
++%#endif
++    && ov.rows() == 1 && ov.columns() == 1)
+     ov = ov.cell_value()(0);
+   if (!ov.is_string())
+     return SWIG_TypeError;
+diff -urN swig-3.0.12.old/Lib/octave/octrun.swg swig-3.0.12.new/Lib/octave/octrun.swg
+--- swig-3.0.12.old/Lib/octave/octrun.swg	2017-01-27 18:52:02.000000000 -0500
++++ swig-3.0.12.new/Lib/octave/octrun.swg	2018-05-26 08:39:16.509124538 -0400
+@@ -151,6 +151,67 @@
+     const swig_type_info **base;
+   };
+ 
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++  // in Octave 4.4 behaviour of octave_builtin() appears to have changed and 'self' argument is no longer passed
++  // to function (maybe because this is now a 'method'??) so need to create our own octave_function subclass
++#define SWIG_OCTAVE_BOUND_FUNC(func, args) octave_value(new octave_swig_bound_func(func, args))
++  class octave_swig_bound_func : public octave_function {
++  public:
++
++    octave_swig_bound_func(void) : octave_function(), method(0), first_args()
++      { }
++
++    octave_swig_bound_func(octave_function* _method, octave_value_list _first_args)
++      : octave_function("", ""), method(_method), first_args(_first_args)
++      { }
++
++    octave_swig_bound_func(const octave_swig_bound_func& f) = delete;
++
++    octave_swig_bound_func& operator= (const octave_swig_bound_func& f) = delete;
++
++    ~octave_swig_bound_func(void) = default;
++
++    bool is_function(void) const { return true; }
++
++    octave_function* function_value(bool = false) { return this; }
++
++    octave_value_list call(octave::tree_evaluator& tw, int nargout = 0, const octave_value_list& args = octave_value_list()) {
++      octave_value_list all_args;
++      all_args.append(first_args);
++      all_args.append(args);
++      return method->call(tw, nargout, all_args);
++    }
++
++    octave_value subsref(const std::string &ops, const std::list < octave_value_list > &idx) {
++      octave_value_list ovl = subsref(ops, idx, 1);
++      return ovl.length() ? ovl(0) : octave_value();
++    }
++
++    octave_value_list subsref(const std::string &ops, const std::list < octave_value_list > &idx, int nargout) {
++      assert(ops.size() > 0);
++      assert(ops.size() == idx.size());
++      if (ops != "(")
++        error("invalid function call");
++      octave::tree_evaluator& tw = octave::interpreter::the_interpreter()->get_evaluator();
++      return call(tw, nargout, *idx.begin());
++    }
++
++  protected:
++
++    octave_function* method;
++    octave_value_list first_args;
++
++    std::set<std::string> dispatch_classes;
++
++  private:
++
++    DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA
++  };
++  DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA(octave_swig_bound_func, "octave_swig_bound_func", "octave_swig_bound_func");
++#else
++#define SWIG_OCTAVE_BOUND_FUNC(func, args) octave_value(func)
++#endif
++
+   // octave_swig_type plays the role of both the shadow class and the class 
+   // representation within Octave, since there is no support for classes.
+   //
+@@ -323,13 +384,17 @@
+     }
+ 
+     octave_value_list member_deref(member_value_pair *m, const octave_value_list &args) {
+-      if (m->second.is_defined())
+-	return m->second;
+-      else if (m->first) {
++      if (m->second.is_defined()) {
++        if (m->second.is_function() || m->second.is_function_handle()) {
++          return SWIG_OCTAVE_BOUND_FUNC(m->second.function_value(), args);
++        } else {
++          return m->second;
++        }
++      } else if (m->first) {
+ 	if (m->first->get_method)
+ 	  return m->first->get_method(args, 1);
+ 	else if (m->first->method)
+-	  return octave_value(new octave_builtin(m->first->method));
++          return SWIG_OCTAVE_BOUND_FUNC(new octave_builtin(m->first->method), args);
+       }
+       error("undefined member");
+       return octave_value_list();
+@@ -383,7 +448,11 @@
+         return dim_vector(1,1);
+ 
+       // Return value should be cell or matrix of integers
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++      if (out.iscell()) {
++#else
+       if (out.is_cell()) {
++#endif
+         const Cell & c=out.cell_value();
+         int ndim = c.rows();
+         if (ndim==1 && c.columns()!=1) ndim = c.columns();
+@@ -401,7 +470,11 @@
+           if (error_state) return dim_vector(1,1);
+         }
+         return d;
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++      } else if (out.is_matrix_type() || out.isnumeric() ) {
++#else
+       } else if (out.is_matrix_type() || out.is_numeric_type() ) {
++#endif
+         if (out.rows()==1 || out.columns()==1) {
+            Array<int> a = out.int_vector_value();
+            if (error_state) return dim_vector(1,1);
+@@ -476,8 +549,12 @@
+       }
+       types.insert(types.end(), rhs.types.begin(), rhs.types.end());
+       members.insert(rhs.members.begin(), rhs.members.end());
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++      assign(rhs.swig_type_name(), rhs.as_value());
++#else
+       rhs.types.clear();
+       rhs.members.clear();
++#endif
+     }
+ 
+     typedef member_map::const_iterator swig_member_const_iterator;
+@@ -848,7 +925,14 @@
+       octave_function *fcn = is_valid_function(symbol, std::string(), false);
+       if (!fcn)
+ 	return false;
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++      octave::tree_evaluator& tw = octave::interpreter::the_interpreter()->get_evaluator();
++      octave_value_list retval = fcn->call(tw, 1, args);
++      if (retval.length() == 1)
++        ret = retval(0);
++#else
+       ret = fcn->do_multi_index_op(1, args)(0);
++#endif
+       return true;
+     }
+ 
+@@ -1238,7 +1322,13 @@
+   }
+ 
+   SWIGRUNTIME octave_swig_type *swig_value_deref(octave_value ov) {
+-    if (ov.is_cell() && ov.rows() == 1 && ov.columns() == 1)
++    if (
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++      ov.iscell()
++#else
++      ov.is_cell()
++#endif
++      && ov.rows() == 1 && ov.columns() == 1)
+       ov = ov.cell_value()(0);
+     return swig_value_deref(*ov.internal_rep());
+   }
+@@ -1261,12 +1351,24 @@
+ SWIGRUNTIME octave_value swig_binary_op_##name(const octave_base_value&lhs,const octave_base_value &rhs) { \
+   return octave_swig_type::dispatch_binary_op(lhs,rhs,#name); \
+ }
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++#define swigreg_unary_op(name) \
++if (!octave_value_typeinfo::lookup_unary_op(octave_value::op_##name,tid)) \
++typeinfo.register_unary_op(octave_value::op_##name,tid,swig_unary_op_##name);
++#else
+ #define swigreg_unary_op(name) \
+ if (!octave_value_typeinfo::lookup_unary_op(octave_value::op_##name,tid)) \
+ octave_value_typeinfo::register_unary_op(octave_value::op_##name,tid,swig_unary_op_##name);
++#endif
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++#define swigreg_binary_op(name) \
++if (!octave_value_typeinfo::lookup_binary_op(octave_value::op_##name,tid1,tid2)) \
++typeinfo.register_binary_op(octave_value::op_##name,tid1,tid2,swig_binary_op_##name);
++#else
+ #define swigreg_binary_op(name) \
+ if (!octave_value_typeinfo::lookup_binary_op(octave_value::op_##name,tid1,tid2)) \
+ octave_value_typeinfo::register_binary_op(octave_value::op_##name,tid1,tid2,swig_binary_op_##name);
++#endif
+ 
+   swig_unary_op(not);
+   swig_unary_op(uplus);
+@@ -1300,6 +1402,9 @@
+   swig_binary_op(el_or);
+ 
+   SWIGRUNTIME void SWIG_InstallUnaryOps(int tid) {
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++    octave::type_info& typeinfo = octave::interpreter::the_interpreter()->get_type_info();
++#endif
+     swigreg_unary_op(not);
+     swigreg_unary_op(uplus);
+     swigreg_unary_op(uminus);
+@@ -1309,6 +1414,9 @@
+     swigreg_unary_op(decr);
+   }
+   SWIGRUNTIME void SWIG_InstallBinaryOps(int tid1, int tid2) {
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++    octave::type_info& typeinfo = octave::interpreter::the_interpreter()->get_type_info();
++#endif
+     swigreg_binary_op(add);
+     swigreg_binary_op(sub);
+     swigreg_binary_op(mul);
+@@ -1357,7 +1465,13 @@
+ }
+ 
+ SWIGRUNTIME int SWIG_Octave_ConvertPtrAndOwn(octave_value ov, void **ptr, swig_type_info *type, int flags, int *own) {
+-  if (ov.is_cell() && ov.rows() == 1 && ov.columns() == 1)
++    if (
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++      ov.iscell()
++#else
++      ov.is_cell()
++#endif
++      && ov.rows() == 1 && ov.columns() == 1)
+     ov = ov.cell_value()(0);
+   if (!ov.is_defined() ||
+       (ov.is_matrix_type() && ov.rows() == 0 && ov.columns() == 0) ) {
+@@ -1390,14 +1504,30 @@
+ }
+ 
+ SWIGRUNTIMEINLINE octave_value SWIG_Octave_GetGlobalValue(std::string name) {
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++  octave::symbol_table& symtab = octave::interpreter::the_interpreter()->get_symbol_table();
++  return symtab.global_varval(name);
++#else
+   return get_global_value(name, true);
++#endif
+ }
+ 
+ SWIGRUNTIME void SWIG_Octave_SetGlobalValue(std::string name, const octave_value& value) {
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++  octave::symbol_table& symtab = octave::interpreter::the_interpreter()->get_symbol_table();
++  symtab.global_assign(name, value);
++#else
+   set_global_value(name, value);
++#endif
+ }
+ 
+ SWIGRUNTIME void SWIG_Octave_LinkGlobalValue(std::string name) {
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++  octave::symbol_table& symtab = octave::interpreter::the_interpreter()->get_symbol_table();
++  octave::symbol_scope symscope = octave::interpreter::the_interpreter()->get_current_scope();
++  symscope.assign(name, symtab.global_varval(name));
++  symscope.mark_global(name);
++#else
+ #if !SWIG_OCTAVE_PREREQ(3,2,0)
+   link_to_global_variable(curr_sym_tab->lookup(name, true));
+ #else
+@@ -1406,6 +1536,7 @@
+ #endif
+   symbol_table::mark_global(name);
+ #endif
++#endif
+ }
+ 
+ SWIGRUNTIME swig_module_info *SWIG_Octave_GetModule(void *clientdata) {
+diff -urN swig-3.0.12.old/Lib/octave/octruntime.swg swig-3.0.12.new/Lib/octave/octruntime.swg
+--- swig-3.0.12.old/Lib/octave/octruntime.swg	2017-01-27 18:52:02.000000000 -0500
++++ swig-3.0.12.new/Lib/octave/octruntime.swg	2018-05-26 08:39:16.507124509 -0400
+@@ -139,7 +139,11 @@
+ #endif
+ #if SWIG_OCTAVE_PREREQ(4,2,0)
+     try {
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++      octave::feval(name, octave_value_list(), 0);
++#else
+       feval(name, octave_value_list(), 0);
++#endif
+       retn = true;
+     } catch (octave::execution_exception&) { }
+ #else
+@@ -170,7 +174,7 @@
+     frame.protect_var(discard_error_messages);          discard_error_messages = true;
+     frame.protect_var(discard_warning_messages);        discard_warning_messages = true;
+ #else
+-    unwind_protect::begin_frame("SWIG_Octave_LoadModule");
++    unwind_protect::begin_frame("SWIG_Octave_InstallFunction");
+     unwind_protect_int(error_state);                    error_state = 0;
+     unwind_protect_int(warning_state);                  warning_state = 0;
+     unwind_protect_bool(discard_error_messages);        discard_error_messages = true;
+@@ -181,7 +185,11 @@
+     args.append(octloadfcn->fcn_file_name());
+ #if SWIG_OCTAVE_PREREQ(4,2,0)
+     try {
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++      octave::feval("autoload", args, 0);
++#else
+       feval("autoload", args, 0);
++#endif
+       retn = true;
+     } catch (octave::execution_exception&) { }
+ #else
+@@ -312,6 +320,8 @@
+ Loads the SWIG-generated module `" SWIG_name_d "'.\n\
+ @end deftypefn";
+ 
++void __swig_atexit__(void) { ::_Exit(0); }
++
+ DEFUN_DLD( SWIG_name, args, nargout, SWIG_name_usage ) {
+ 
+   static octave_swig_type* module_ns = 0;
+@@ -322,7 +332,9 @@
+   // version 3.4.*, but reappeared in 4.2.*, so turn on for all versions after 3.2.*.
+   // can be turned off with macro definition.
+ #ifndef SWIG_OCTAVE_NO_SEGFAULT_HACK
+-#if SWIG_OCTAVE_PREREQ(3,2,0)
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++  atexit(__swig_atexit__);
++#elif SWIG_OCTAVE_PREREQ(3,2,0)
+   octave_exit = ::_Exit;
+ #endif
+ #endif
+@@ -351,15 +363,54 @@
+                      "__swig_atexit__; "
+                      "atexit(\"__swig_atexit__\", false); "
+                      "atexit(\"__swig_atexit__\")");
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++    octave::feval("evalin", eval_args, 0);
++#else
+     feval("evalin", eval_args, 0);
+ #endif
++#endif
+ 
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++    {
++      octave::type_info& typeinfo = octave::interpreter::the_interpreter()->get_type_info();
++      string_vector types = typeinfo.installed_type_names();
++      bool register_octave_swig_ref = true;
++      bool register_octave_swig_packed = true;
++      bool register_octave_swig_bound_func = true;
++      for (int i = 0; i < types.numel(); ++i) {
++        if (types(i) == octave_swig_ref::static_type_name()) {
++          register_octave_swig_ref = false;
++        }
++        if (types(i) == octave_swig_packed::static_type_name()) {
++          register_octave_swig_packed = false;
++        }
++        if (types(i) == octave_swig_bound_func::static_type_name()) {
++          register_octave_swig_bound_func = false;
++        }
++      }
++      if (register_octave_swig_ref) {
++        octave_swig_ref::register_type();
++      }
++      if (register_octave_swig_packed) {
++        octave_swig_packed::register_type();
++      }
++      if (register_octave_swig_bound_func) {
++        octave_swig_bound_func::register_type();
++      }
++    }
++#else
+     octave_swig_ref::register_type();
+     octave_swig_packed::register_type();
++#endif
+     SWIG_InitializeModule(0);
+     SWIG_PropagateClientData();
+ 
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++    octave::call_stack& stack = octave::interpreter::the_interpreter()->get_call_stack();
++    octave_function *me = stack.current();
++#else
+     octave_function *me = octave_call_stack::current();
++#endif
+ 
+     if (!SWIG_Octave_InstallFunction(me, "subclass")) {
+       return octave_value_list();
+@@ -426,10 +477,12 @@
+       }
+     }
+ 
+-#if !SWIG_OCTAVE_PREREQ(3,2,0)
+-    mlock(me->name());
+-#else
++#if SWIG_OCTAVE_PREREQ(4,4,0)
++    octave::interpreter::the_interpreter()->mlock();
++#elif SWIG_OCTAVE_PREREQ(3,2,0)
+     mlock();
++#else
++    mlock(me->name());
+ #endif
+ 
+   }
+diff -urN swig-3.0.12.old/Lib/octave/std_pair.i swig-3.0.12.new/Lib/octave/std_pair.i
+--- swig-3.0.12.old/Lib/octave/std_pair.i	2017-01-27 18:52:02.000000000 -0500
++++ swig-3.0.12.new/Lib/octave/std_pair.i	2018-05-26 08:39:16.489124248 -0400
+@@ -38,7 +38,13 @@
+       }
+ 
+       static int asval(const octave_value& obj, std::pair<T,U> *val) {
+-	if (obj.is_cell()) {
++	if (
++%#if SWIG_OCTAVE_PREREQ(4,4,0)
++          obj.iscell()
++%#else
++          obj.is_cell()
++%#endif
++        ) {
+ 	  Cell c=obj.cell_value();
+ 	  if (c.numel()<2) {
+ 	    error("pair from Cell array requires at least two elements");
+@@ -96,7 +102,13 @@
+       }
+ 
+       static int asptr(const octave_value& obj, std::pair<T,U> **val) {
+-	if (obj.is_cell()) {
++	if (
++%#if SWIG_OCTAVE_PREREQ(4,4,0)
++          obj.iscell()
++%#else
++          obj.is_cell()
++%#endif
++        ) {
+ 	  Cell c=obj.cell_value();
+ 	  if (c.numel()<2) {
+ 	    error("pair from Cell array requires at least two elements");
+diff -urN swig-3.0.12.old/.travis.yml swig-3.0.12.new/.travis.yml
+--- swig-3.0.12.old/.travis.yml	2017-01-27 18:52:02.000000000 -0500
++++ swig-3.0.12.new/.travis.yml	2018-05-26 08:39:16.520124698 -0400
+@@ -92,6 +92,11 @@
+       dist: trusty
+     - compiler: gcc
+       os: linux
++      env: SWIGLANG=octave SWIGJOBS=-j2 VER=4.4 CPP11=1
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
+       env: SWIGLANG=perl5
+       sudo: required
+       dist: trusty
+diff -urN swig-3.0.12.old/.travis.yml.orig swig-3.0.12.new/.travis.yml.orig
+--- swig-3.0.12.old/.travis.yml.orig	1969-12-31 19:00:00.000000000 -0500
++++ swig-3.0.12.new/.travis.yml.orig	2017-01-27 18:52:02.000000000 -0500
+@@ -0,0 +1,334 @@
++language: cpp
++matrix:
++  include:
++    - compiler: clang
++      os: linux
++      env: SWIGLANG=
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=
++      sudo: required
++      dist: trusty
++    - os: linux
++      env: SWIGLANG= SWIG_CC=gcc-5 SWIG_CXX=g++-5 CPP11=1
++      sudo: required
++      dist: trusty
++    - os: linux
++      env: SWIGLANG= SWIG_CC=gcc-6 SWIG_CXX=g++-6
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=csharp
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=d
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=go
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=go VER=1.5
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=guile
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=java
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=javascript ENGINE=node
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=javascript ENGINE=jsc
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=javascript ENGINE=v8
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=lua
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=lua VER=5.3
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=octave SWIGJOBS=-j2 # 3.8
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=octave SWIGJOBS=-j2 VER=4.0
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=octave SWIGJOBS=-j2 VER=4.2 CPP11=1
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=perl5
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=php5
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=php VER=7.0
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=php VER=7.1
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python VER=2.4
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python VER=2.5
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python VER=2.6
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python # 2.7
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python PY3=3 VER=3.2
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python PY3=3 VER=3.3
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python PY3=3 VER=3.4
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python PY3=3 VER=3.5
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python SWIG_FEATURES=-builtin VER=2.6
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python SWIG_FEATURES=-builtin
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python SWIG_FEATURES=-builtin PY3=3 VER=3.4
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python SWIG_FEATURES=-builtin PY3=3 VER=3.5
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python SWIG_FEATURES=-builtin PY3=3 VER=3.5 SWIGOPTPY3=
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python SWIG_FEATURES=-O
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python SWIG_FEATURES=-classic
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=r
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=ruby VER=1.9.3
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=ruby VER=2.0.0
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=ruby VER=2.3.0
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=scilab
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=tcl
++      sudo: required
++      dist: trusty
++    - os: linux
++      env: SWIGLANG=csharp SWIG_CC=gcc-5 SWIG_CXX=g++-5 CPP11=1
++      sudo: required
++      dist: trusty
++    - os: linux
++      env: SWIGLANG=java SWIG_CC=gcc-5 SWIG_CXX=g++-5 CPP11=1
++      sudo: required
++      dist: trusty
++    - os: linux
++      env: SWIGLANG=python SWIG_CC=gcc-5 SWIG_CXX=g++-5 CPP11=1
++      sudo: required
++      dist: trusty
++    - os: linux
++      env: SWIGLANG=csharp SWIG_CC=gcc-6 SWIG_CXX=g++-6 CPP14=1
++      sudo: required
++      dist: trusty
++    - os: linux
++      env: SWIGLANG=java SWIG_CC=gcc-6 SWIG_CXX=g++-6 CPP14=1
++      sudo: required
++      dist: trusty
++    - os: linux
++      env: SWIGLANG=python SWIG_CC=gcc-6 SWIG_CXX=g++-6 CPP14=1
++      sudo: required
++      dist: trusty
++    - compiler: gcc
++      os: osx
++      env: SWIGLANG=
++    - compiler: clang
++      os: osx
++      env: SWIGLANG=
++    - compiler: clang
++      os: osx
++      env: SWIGLANG=csharp
++    - compiler: clang
++      os: osx
++      env: SWIGLANG=go
++    - compiler: clang
++      os: osx
++      env: SWIGLANG=guile
++    - compiler: clang
++      os: osx
++      env: SWIGLANG=java
++    - compiler: clang
++      os: osx
++      env: SWIGLANG=lua
++    - compiler: clang
++      os: osx
++      env: SWIGLANG=perl5
++    - compiler: clang
++      os: osx
++      env: SWIGLANG=php5
++    - compiler: clang
++      os: osx
++      env: SWIGLANG=python
++    - compiler: clang
++      os: osx
++      env: SWIGLANG=python PY3=3
++    - compiler: clang
++      os: osx
++      env: SWIGLANG=ruby
++    - compiler: clang
++      os: osx
++      env: SWIGLANG=tcl
++
++  allow_failures:
++    # Lots of failing tests currently
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=ocaml
++      sudo: required
++      dist: trusty
++    # Not quite working yet
++    - compiler: gcc
++      os: linux
++      env: SWIGLANG=python SWIG_FEATURES=-O
++      sudo: required
++      dist: trusty
++before_install:
++  - date -u
++  - uname -a
++  - if test "$TRAVIS_OS_NAME" = "linux"; then lscpu && cat /proc/cpuinfo | grep "model name" && cat /proc/meminfo | grep MemTotal; fi
++  - if test "$TRAVIS_OS_NAME" = "osx"; then sysctl -a | grep brand_string; fi
++    # Travis overrides CC environment with compiler predefined values
++  - if test -n "$SWIG_CC"; then export CC="$SWIG_CC"; fi
++  - if test -n "$SWIG_CXX"; then export CXX="$SWIG_CXX"; fi
++install:
++  - if test "$TRAVIS_OS_NAME" = "linux"; then source Tools/travis-linux-install.sh; fi
++  - if test "$TRAVIS_OS_NAME" = "osx"; then source Tools/travis-osx-install.sh; fi
++  - if test -n "$CPP11"; then CONFIGOPTS+=(--enable-cpp11-testing --without-maximum-compile-warnings "CXXFLAGS=-std=c++11 -Wall -Wextra" "CFLAGS=-std=c11 -Wall -Wextra") && export CSTD=c11 && export CPPSTD=c++11; fi
++  - if test -n "$CPP14"; then CONFIGOPTS+=(--enable-cpp11-testing --without-maximum-compile-warnings "CXXFLAGS=-std=c++14 -Wall -Wextra" "CFLAGS=-std=c11 -Wall -Wextra") && export CSTD=c11 && export CPPSTD=c++14; fi
++  - ls -la $(which $CC)
++  - ls -la $(which $CXX)
++  - $CC --version
++  - $CXX --version
++script:
++  - echo 'Configuring...' && echo -en 'travis_fold:start:script.1\\r'
++  - if test -n "$SWIGLANG"; then CONFIGOPTS+=(--without-alllang --with-$WITHLANG); fi
++  - echo "${CONFIGOPTS[@]}"
++  - ./autogen.sh && mkdir -p build/build && cd build/build && ../../configure "${CONFIGOPTS[@]}"
++  - echo -en 'travis_fold:end:script.1\\r'
++  - make -s $SWIGJOBS
++  - ./swig -version && ./swig -pcreversion
++  - if test -z "$SWIGLANG"; then make -s $SWIGJOBS check-ccache; fi
++  - if test -z "$SWIGLANG"; then make -s $SWIGJOBS check-errors-test-suite; fi
++  - echo 'Installing...' && echo -en 'travis_fold:start:script.2\\r'
++  - if test -z "$SWIGLANG"; then sudo make -s install && swig -version && ccache-swig -V; fi
++  - echo -en 'travis_fold:end:script.2\\r'
++  # Stricter compile flags for examples. Various headers and SWIG generated code prevents full use of -pedantic.
++  - if test -n "$SWIGLANG"; then cflags=$($TRAVIS_BUILD_DIR/Tools/testflags.py --language $SWIGLANG --cflags --std=$CSTD --compiler=$CC) && echo $cflags; fi
++  - if test -n "$SWIGLANG"; then cxxflags=$($TRAVIS_BUILD_DIR/Tools/testflags.py --language $SWIGLANG --cxxflags --std=$CPPSTD --compiler=$CC) && echo $cxxflags; fi
++  - if test -n "$SWIGLANG"; then make -s check-$SWIGLANG-version; fi
++  - if test -n "$SWIGLANG"; then make check-$SWIGLANG-enabled; fi
++  - if test -n "$SWIGLANG"; then make $SWIGJOBS check-$SWIGLANG-examples CFLAGS="$cflags" CXXFLAGS="$cxxflags"; fi
++  - if test -n "$SWIGLANG"; then make $SWIGJOBS check-$SWIGLANG-test-suite CFLAGS="$cflags" CXXFLAGS="$cxxflags"; fi
++  - echo 'Cleaning...' && echo -en 'travis_fold:start:script.3\\r'
++  - make check-maintainer-clean && ../../configure $CONFIGOPTS
++  - echo -en 'travis_fold:end:script.3\\r'
diff --git a/gnu/packages/swig.scm b/gnu/packages/swig.scm
index b931db412b..34163aa9e5 100644
--- a/gnu/packages/swig.scm
+++ b/gnu/packages/swig.scm
@@ -22,6 +22,7 @@
   #:use-module (guix download)
   #:use-module (guix licenses)
   #:use-module (guix build-system gnu)
+  #:use-module (gnu packages)
   #:use-module (gnu packages pcre)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages boost)
@@ -39,7 +40,9 @@
                                  name "-" version ".tar.gz"))
              (sha256
               (base32
-               "0kf99ygrjs5616gsqhz1l7bib3a12izmxi7g48bwblbymr3z9ybw"))))
+               "0kf99ygrjs5616gsqhz1l7bib3a12izmxi7g48bwblbymr3z9ybw"))
+             (patches
+              (search-patches "swig-octave-patches.patch"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm
index 9ad4f3faca..3a2975ee75 100644
--- a/gnu/packages/version-control.scm
+++ b/gnu/packages/version-control.scm
@@ -142,14 +142,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.17.0")
+   (version "2.17.1")
    (source (origin
             (method url-fetch)
             (uri (string-append "mirror://kernel.org/software/scm/git/git-"
                                 version ".tar.xz"))
             (sha256
              (base32
-              "1ismz7nsz8dgjmk782xr9s0mr2qh06f72pdcgbxfmnw1bvlya5p9"))))
+              "0pm6bdnrrm165k3krnazxcxadifk2gqi30awlbcf9fism1x6w4vr"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("native-perl" ,perl)
@@ -162,7 +162,7 @@ as well as the classic centralized workflow.")
                 version ".tar.xz"))
           (sha256
            (base32
-            "09rpjj0m97h5lpzpwk47m6xsz9gb8wqf1s3dfqma3mwav2pb3njb"))))))
+            "0m7grrwsqaihdgcgaicxiy4rlqjpa75n5wl6hi2qhi33xa34gmc3"))))))
    (inputs
     `(("curl" ,curl)
       ("expat" ,expat)
diff --git a/gnu/system/vm.scm b/gnu/system/vm.scm
index 4cffc71d7f..cf730d1f08 100644
--- a/gnu/system/vm.scm
+++ b/gnu/system/vm.scm
@@ -23,7 +23,6 @@
 
 (define-module (gnu system vm)
   #:use-module (guix config)
-  #:use-module (guix docker)
   #:use-module (guix store)
   #:use-module (guix gexp)
   #:use-module (guix derivations)