Merge branch 'staging' into core-updates
[jackhill/guix/guix.git] / gnu / packages / engineering.scm
index ad7ae18..9dc8b7e 100644 (file)
@@ -1,16 +1,19 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
 ;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
-;;; Copyright © 2016, 2018 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2016, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2016 David Thompson <davet@gnu.org>
-;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016, 2017, 2018 Theodoros Foradis <theodoros@foradis.org>
 ;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
-;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2018 Jonathan Brielmaier <jonathan.brielmaier@web.de>
-;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2018, 2019 Jonathan Brielmaier <jonathan.brielmaier@web.de>
+;;; Copyright © 2018, 2019 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2019 Tim Stahel <swedneck@swedneck.xyz>
+;;; Copyright © 2019 Jovany Leandro G.C <bit4bit@riseup.net>
+;;; Copyright © 2019 Steve Sprang <scs@stevesprang.com>
+;;; Copyright © 2019 John Soo <jsoo1@asu.edu>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -37,6 +40,7 @@
   #:use-module (guix utils)
   #:use-module ((srfi srfi-1) #:hide (zip))
   #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix build-system ant)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
   #:use-module (gnu packages check)
+  #:use-module (gnu packages cmake)
   #:use-module (gnu packages commencement)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages curl)
+  #:use-module (gnu packages documentation)
   #:use-module (gnu packages flex)
   #:use-module (gnu packages fontutils)
   #:use-module (gnu packages fpga)
   #:use-module (gnu packages glib)
   #:use-module (gnu packages gnome)
   #:use-module (gnu packages gperf)
+  #:use-module (gnu packages graphics)
+  #:use-module (gnu packages graphviz)
   #:use-module (gnu packages groff)
   #:use-module (gnu packages gtk)
   #:use-module (gnu packages guile)
   #:use-module (gnu packages image)
+  #:use-module (gnu packages image-processing)
   #:use-module (gnu packages imagemagick)
   #:use-module (gnu packages linux)               ;FIXME: for pcb
   #:use-module (gnu packages m4)
   #:use-module (gnu packages qt)
   #:use-module (gnu packages readline)
   #:use-module (gnu packages swig)
+  #:use-module (gnu packages tbb)
   #:use-module (gnu packages tcl)
   #:use-module (gnu packages texinfo)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages tex)
+  #:use-module (gnu packages version-control)
   #:use-module (gnu packages wxwidgets)
+  #:use-module (gnu packages xml)
   #:use-module (gnu packages xorg))
 
 (define-public librecad
@@ -174,16 +186,16 @@ plans and designs.")
 (define-public geda-gaf
   (package
     (name "geda-gaf")
-    (version "1.9.2")
+    (version "1.10.0")
     (source (origin
               (method url-fetch)
               (uri (string-append
-                    "http://ftp.geda-project.org/geda-gaf/unstable/v"
+                    "http://ftp.geda-project.org/geda-gaf/stable/v"
                     (version-major+minor version) "/"
                     version "/geda-gaf-" version ".tar.gz"))
               (sha256
                (base32
-                "14mk45pfz11v54q66gafw2l68n1p5ssvvjmdm8ffgc8x1w5ajfrz"))))
+                "06ivgarvwbzjz2wigxzzkm8iszldi2p6x3a6jnlczjyrz4csddsy"))))
     (build-system gnu-build-system)
     (arguments
      '(#:phases
@@ -193,12 +205,14 @@ plans and designs.")
            (lambda _
              (setenv "HOME" (getenv "TMPDIR"))
              #t))
-         ;; FIXME: These two tests fail for unknown reasons.  They return "2"
-         ;; when they should return "1".
          (add-after 'unpack 'disable-failing-tests
            (lambda _
-             (substitute* "utils/tests/gxyrs/tests.list"
-               (("^do_nothing.*") ""))
+             (substitute* "xorn/tests/Makefile.in"
+               (("-Werror") ""))
+             ;; This test returns its correct result in an unexpected order.
+             (substitute* "libgeda/scheme/unit-tests/t0402-config.scm"
+               (("\\(begin-config-test 'config-keys" m)
+                (string-append "#;" m)))
              #t)))
        #:configure-flags
        (let ((pcb (assoc-ref %build-inputs "pcb")))
@@ -207,13 +221,15 @@ plans and designs.")
                               pcb "/share/pcb/pcblib-newlib:"
                               pcb "/share/pcb/newlib")))))
     (inputs
-     `(("glib" ,glib)
+     `(("gamin" ,gamin)
+       ("glib" ,glib)
        ("gtk" ,gtk+-2)
        ("guile" ,guile-2.0)
        ("desktop-file-utils" ,desktop-file-utils)
        ("shared-mime-info" ,shared-mime-info)
        ("m4" ,m4)
-       ("pcb" ,pcb)))
+       ("pcb" ,pcb)
+       ("python" ,python-2))) ; for xorn
     (native-inputs
      `(("pkg-config" ,pkg-config)
        ("perl" ,perl))) ; for tests
@@ -236,14 +252,14 @@ utilities.")
   (package
     (inherit geda-gaf)
     (name "lepton-eda")
-    (version "1.9.5-20180820")
+    (version "1.9.9-20191003")
     (home-page "https://github.com/lepton-eda/lepton-eda")
     (source (origin
               (method git-fetch)
               (uri (git-reference (url home-page) (commit version)))
               (sha256
                (base32
-                "1ayaccvw18zh4g7a4x5jf6yxkphi5xafb0hpc732g59qkgwfcmlr"))
+                "08cc3zfk84qq9mrkc9pp4r9jlavvm01wwy0yd9frql68w2zw6mip"))
               (file-name (git-file-name name version))))
     (native-inputs
      `(("autoconf" ,autoconf)
@@ -254,7 +270,14 @@ utilities.")
        ("groff" ,groff)
        ("which" ,which)
        ,@(package-native-inputs geda-gaf)))
-    ;; For now it's Guile 2.0, not 2.2.
+    (inputs
+     `(("glib" ,glib)
+       ("gtk" ,gtk+-2)
+       ("guile" ,guile-2.2)
+       ("desktop-file-utils" ,desktop-file-utils)
+       ("shared-mime-info" ,shared-mime-info)
+       ("m4" ,m4)
+       ("pcb" ,pcb)))
     (arguments
      (substitute-keyword-arguments (package-arguments geda-gaf)
        ((#:configure-flags flags ''())
@@ -266,7 +289,7 @@ utilities.")
         ;; never runs.  See <https://bugs.debian.org/792687>.
         `(cons "ac_cv_path_MSGMERGE=true" ,flags))
        ((#:phases phases '%standard-phases)
-        `(modify-phases ,phases
+        `(modify-phases %standard-phases
            (add-before 'bootstrap 'prepare
              (lambda _
                ;; Some of the scripts there are invoked by autogen.sh.
@@ -288,6 +311,17 @@ utilities.")
                            ,(string-take version
                                          (string-index version #\-)))
                    (format port "#define PACKAGE_GIT_COMMIT \"cabbag3\"~%")))
+               #t))
+           (add-after 'install 'compile-scheme-files
+             (lambda* (#:key outputs #:allow-other-keys)
+               (invoke "make" "precompile")
+               (for-each (lambda (program)
+                           (wrap-program program
+                             `("GUILE_LOAD_COMPILED_PATH" ":" prefix
+                               (,(string-append (assoc-ref outputs "out")
+                                                "/share/lepton-eda/ccache/")))))
+                         (find-files (string-append (assoc-ref outputs "out") "/bin")
+                                     ".*"))
                #t))))))
     (description
      "Lepton EDA ia an @dfn{electronic design automation} (EDA) tool set
@@ -361,7 +395,7 @@ features.")))
        ("imagemagick" ,imagemagick)
        ("gerbv" ,gerbv)
        ("ghostscript" ,ghostscript)
-       ("xvfb" ,xorg-server)))
+       ("xvfb" ,xorg-server-for-tests)))
     (home-page "http://pcb.geda-project.org/")
     (synopsis "Design printed circuit board layouts")
     (description
@@ -553,43 +587,65 @@ multipole-accelerated algorithm.")
 (define-public fritzing
   (package
     (name "fritzing")
-    (version "0.9.2b")
+    (version "0.9.3b")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/fritzing/"
-                                  "fritzing-app/archive/" version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/fritzing/fritzing-app.git")
+                    (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "15rwjp4xdj9w1z9f709rz9p0k2mi9k9idma9hvzkj5j8p04mg7yd"))))
+                "0hpyc550xfhr6gmnc85nq60w00rm0ljm0y744dp0z88ikl04f4s3"))))
     (build-system gnu-build-system)
     (arguments
      `(#:phases
        (modify-phases %standard-phases
          (replace 'configure
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (and (zero? (system* "tar"
-                                  "-xvf" (assoc-ref inputs "fritzing-parts-db")
-                                  "-C" "parts"))
-                  (zero? (system* "qmake"
-                                  (string-append "PREFIX="
-                                                 (assoc-ref outputs "out"))
-                                  "phoenix.pro"))))))))
+             (copy-recursively (assoc-ref inputs "fritzing-parts-db")
+                               "parts")
+             ;; Make compatible with libgit2 > 0.24
+             (substitute* "src/version/partschecker.cpp"
+               (("error = git_remote_connect\\(remote, GIT_DIRECTION_FETCH, &callbacks\\)")
+                "error = git_remote_connect(remote, GIT_DIRECTION_FETCH, &callbacks, NULL, NULL)"))
+
+             ;; Use system libgit2 and boost.
+             (substitute* "phoenix.pro"
+               (("^LIBGIT2INCLUDE =.*")
+                (string-append "LIBGIT2INCLUDE="
+                               (assoc-ref inputs "libgit2") "/include\n"))
+               (("^    LIBGIT2LIB =.*")
+                (string-append "    LIBGIT2LIB="
+                               (assoc-ref inputs "libgit2") "/lib\n")))
+             ;; This file checks for old versions of Boost, insisting on
+             ;; having us download the boost sources and placing them in the
+             ;; build directory.
+             (substitute* "pri/utils.pri"
+               (("error\\(") "message("))
+
+             (let ((out (assoc-ref outputs "out")))
+               (invoke "qmake"
+                       (string-append "QMAKE_LFLAGS_RPATH=-Wl,-rpath," out "/lib")
+                       (string-append "PREFIX=" out)
+                       "phoenix.pro")))))))
     (inputs
      `(("qtbase" ,qtbase)
        ("qtserialport" ,qtserialport)
        ("qtsvg" ,qtsvg)
+       ("libgit2" ,libgit2)
        ("boost" ,boost)
        ("zlib" ,zlib)
        ("fritzing-parts-db"
         ,(origin
-           (method url-fetch)
-           (uri (string-append "https://github.com/fritzing/"
-                               "fritzing-parts/archive/" version ".tar.gz"))
-           (file-name (string-append "fritzing-parts-" version ".tar.gz"))
+           (method git-fetch)
+           (uri (git-reference
+                 (url "https://github.com/fritzing/fritzing-parts.git")
+                 (commit version)))
+           (file-name (git-file-name "fritzing-parts" version))
            (sha256
             (base32
-             "0jqr8yjg7177f3pk1fcns584r0qavwpr280nggsi2ff3pwk5wpsz"))))))
+             "1d2v8k7p176j0lczx4vx9n9gbg3vw09n2c4b6w0wj5wqmifywhc1"))))))
     (home-page "http://fritzing.org")
     (synopsis "Electronic circuit design")
     (description
@@ -606,17 +662,18 @@ ready for production.")
 (define-public gerbv
   (package
     (name "gerbv")
-    (version "2.6.2")
+    (version "2.7.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://sourceforge/gerbv/gerbv/gerbv-"
                                   version "/gerbv-" version ".tar.gz"))
               (sha256
                (base32
-                "1cw8k6ni0q8kswad03kha86fk7n06vq8p0wzsfhcnalsdshrn17i"))))
+                "1d2k43k7i4yvbpi4sw1263a8d0q98z2n7aqhmpinpkih8a681vn5"))))
     (build-system gnu-build-system)
     (native-inputs
-     `(("pkg-config" ,pkg-config)))
+     `(("glib:bin" ,glib "bin")         ; for glib-compile-schemas, etc.
+       ("pkg-config" ,pkg-config)))
     (inputs
      `(("cairo" ,cairo)
        ("gtk" ,gtk+-2)
@@ -631,9 +688,55 @@ image, etc.  Besides viewing Gerbers, you may also view Excellon drill files
 as well as pick-place files.")
     (license license:gpl2+)))
 
+(define-public translate2geda
+  ;; There has been no formal release yet.
+  (let ((commit "4c19e7eefa338cea8f1ee999ea8b37f8d0698169")
+        (revision "1"))
+    (package
+      (name "translate2geda")
+      (version (git-version "0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/erichVK5/translate2geda.git")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1h062bbpw8nk0jamkya1k4lsgaia796jyviiz2gkdi6k1bxhwgpa"))))
+      (build-system ant-build-system)
+      (arguments
+       `(#:tests? #f ; there are no tests
+         #:jar-name "translate2geda.jar"
+         #:source-dir "."
+         #:main-class "translate2geda"
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'install 'install-bin
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (bin (string-append out "/bin"))
+                      (wrapper (string-append bin "/translate2geda")))
+                 (mkdir-p bin)
+                 (with-output-to-file wrapper
+                   (lambda _
+                     (format #t "#!/bin/sh~%exec ~a -jar ~a/share/java/translate2geda.jar"
+                             (which "java") out)))
+                 (chmod wrapper #o555))
+               #t)))))
+      (home-page "https://github.com/erichVK5/translate2geda")
+      (synopsis "Utility for converting symbol and footprint formats to gEDA")
+      (description
+       "This package provides a utility for converting Kicad (@file{.mod},
+@file{.lib}), Eagle (@file{.lbr}), gerber (@file{.gbr}, etc..),
+BXL (@file{.bxl}), IBIS (@file{.ibs}), symdef, LT-Spice (@file{.asc}),
+QUCS (@file{.sch}), and BSDL (@file{.bsd}) symbols and footprints and EggBot
+fonts to gEDA.")
+      (license license:gpl2+))))
+
 (define-public libfive
-  (let ((commit "9d857d1923abecb0e5935b9287d22661f6efaac5")
-        (revision "2"))
+  (let ((commit "6e39254e57c179459bb929df49ae96a6017a0ed6")
+        (revision "3"))
     (package
       (name "libfive")
       (version (git-version "0" revision commit))
@@ -644,7 +747,7 @@ as well as pick-place files.")
                       (commit commit)))
                 (sha256
                  (base32
-                  "1r40kyx30wz31cwwlfvfh7fgqkxq3n8dxhswpi9qpf4r5h3l8wsn"))
+                  "0ryv2hcbrwqc087w7rrs4a2irkcpmqync00g4dh8n7jn10w2jkim"))
                 (file-name (git-file-name name version))
                 (snippet
                  ;; Remove bundled catch since we provide our own.
@@ -659,12 +762,18 @@ as well as pick-place files.")
            (add-after 'unpack 'remove-native-compilation
              (lambda _
                (substitute* "CMakeLists.txt" (("-march=native") ""))
+               #t))
+           (add-after 'unpack 'find-catch
+             (lambda* (#:key inputs #:allow-other-keys)
+               (setenv "CPLUS_INCLUDE_PATH"
+                       (string-append (assoc-ref inputs "catch")
+                                      "/include/catch"))
                #t)))))
       (native-inputs
        `(("pkg-config" ,pkg-config)))
       (inputs
        `(("boost" ,boost)
-         ("catch" ,catch-framework)
+         ("catch" ,catch-framework2)
          ("libpng" ,libpng)
          ("qtbase" ,qtbase)
          ("eigen" ,eigen)
@@ -677,7 +786,7 @@ libfive, solid models are defined as Scheme scripts, and there are no opaque
 function calls into the geometry kernel: everything is visible to the user.
 Even fundamental, primitive shapes are represented as code in the user-level
 language.")
-      (license (list license:lgpl2.1+             ;library
+      (license (list license:mpl2.0               ;library
                      license:gpl2+)))))           ;Guile bindings and GUI
 
 (define-public ao
@@ -686,48 +795,27 @@ language.")
 (define-public kicad
     (package
       (name "kicad")
-      (version "5.0.0")
+      (version "5.1.5")
       (source
        (origin
          (method url-fetch)
          (file-name (string-append name "-" version ".tar.xz"))
          (uri (string-append
-                "https://launchpad.net/kicad/" (version-major+minor version)
-                "/" version "/+download/" name "-" version ".tar.xz"))
+                "https://launchpad.net/kicad/" (version-major version)
+                ".0/" version "/+download/kicad-" version ".tar.xz"))
          (sha256
-          (base32 "17nqjszyvd25wi6550j981whlnb1wxzmlanljdjihiki53j84x9p"))))
+          (base32 "0x3417f2pa7p65s9f7l49rqbnrzy8gz6i0n07mlbxqbnm0fmlql0"))))
       (build-system cmake-build-system)
       (arguments
        `(#:out-of-source? #t
          #:tests? #f ; no tests
          #:build-type "Release"
          #:configure-flags
-         (list "-DKICAD_STABLE_VERSION=ON"
-               "-DKICAD_REPO_NAME=stable"
-               "-DKICAD_SKIP_BOOST=ON"; Use our system's boost library.
-               "-DKICAD_SCRIPTING=ON"
-               "-DKICAD_SCRIPTING_MODULES=ON"
-               "-DKICAD_SCRIPTING_WXPYTHON=ON"
-               ;; Has to be set explicitely, as we don't have the wxPython
-               ;; headers in the wxwidgets store item, but in wxPython.
-               (string-append "-DCMAKE_CXX_FLAGS=-I"
-                              (assoc-ref %build-inputs "wxpython")
-                              "/include/wx-"
-                             ,(version-major+minor
-                                (package-version python2-wxpython)))
-               "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE"
-               "-DKICAD_SPICE=TRUE"
-               ;; TODO: Enable this when CA certs are working with curl.
-               "-DBUILD_GITHUB_PLUGIN=OFF")
+         (list "-DKICAD_SCRIPTING_PYTHON3=ON"
+               "-DKICAD_SCRIPTING_WXPYTHON_PHOENIX=ON"
+               "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE")
          #:phases
          (modify-phases %standard-phases
-           (add-after 'unpack 'adjust-boost-include
-             (lambda _
-               ;; The location of this header changed in Boost 1.66.
-               (substitute* "3d-viewer/3d_cache/3d_cache.cpp"
-                 (("boost/uuid/sha1\\.hpp")
-                  "boost/uuid/detail/sha1.hpp"))
-               #t))
            (add-after 'install 'wrap-program
              ;; Ensure correct Python at runtime.
              (lambda* (#:key inputs outputs #:allow-other-keys)
@@ -764,10 +852,10 @@ language.")
          ("mesa" ,mesa)
          ("opencascade-oce" ,opencascade-oce)
          ("openssl" ,openssl)
-         ("python" ,python-2)
-         ("wxwidgets" ,wxwidgets-gtk2)
-         ("wxpython" ,python2-wxpython)))
-      (home-page "http://kicad-pcb.org/")
+         ("python" ,python)
+         ("wxwidgets" ,wxwidgets)
+         ("wxpython" ,python-wxpython)))
+      (home-page "https://kicad-pcb.org/")
       (synopsis "Electronics Design Automation Suite")
       (description "Kicad is a program for the formation of printed circuit
 boards and electrical circuits.  The software has a number of programs that
@@ -780,18 +868,18 @@ electrical diagrams), gerbview (viewing Gerber files) and others.")
     (package
       (name "kicad-library")
       (version version)
-      (source (origin
-                (method url-fetch)
-                (uri (string-append
-                      "http://downloads.kicad-pcb.org/libraries/kicad-library-"
-                      version ".tar.gz"))
-                (sha256
-                 (base32
-                  "1azb7v1y3l6j329r9gg7f4zlg0wz8nh4s4i5i0l9s4yh9r6i9zmv"))))
+      (source
+       (origin
+         (method url-fetch)
+         (uri (string-append
+               "https://kicad-downloads.s3.cern.ch/libraries/kicad-library-"
+               version ".tar.gz"))
+         (sha256
+          (base32 "1azb7v1y3l6j329r9gg7f4zlg0wz8nh4s4i5i0l9s4yh9r6i9zmv"))))
       (build-system cmake-build-system)
       (arguments
        `(#:out-of-source? #t
-         #:tests? #f ; no tests
+         #:tests? #f                    ; no tests
          #:phases
          (modify-phases %standard-phases
            (add-after 'install 'install-footprints ; from footprints tarball
@@ -811,14 +899,14 @@ electrical diagrams), gerbview (viewing Gerber files) and others.")
                       (fp-lib-table (string-append template-dir "/fp-lib-table")))
                  (delete-file fp-lib-table)
                  (copy-file (string-append fp-lib-table ".for-pretty")
-                              fp-lib-table))
+                            fp-lib-table))
                #t)))))
       (native-search-paths
        (list (search-path-specification
-              (variable "KISYSMOD") ; footprint path
+              (variable "KISYSMOD")     ; footprint path
               (files '("share/kicad/modules")))
              (search-path-specification
-              (variable "KISYS3DMOD") ; 3D model path
+              (variable "KISYS3DMOD")   ; 3D model path
               (files '("share/kicad/modules/packages3d")))))
       ;; Kicad distributes footprints in a separate tarball.
       (native-inputs
@@ -831,7 +919,7 @@ electrical diagrams), gerbview (viewing Gerber files) and others.")
              (sha256
               (base32
                "08qrz5zzsb5127jlnv24j0sgiryd5nqwg3lfnwi8j9a25agqk13j"))))))
-      (home-page "http://kicad-pcb.org/")
+      (home-page "https://kicad-pcb.org/")
       (synopsis "Libraries for kicad")
       (description "This package provides Kicad component, footprint and 3D
 render model libraries.")
@@ -840,24 +928,28 @@ render model libraries.")
 (define-public kicad-symbols
   (package
     (name "kicad-symbols")
-    (version "5.0.1")
+    (version "5.1.5")
     (source (origin
               (method git-fetch)
               (uri (git-reference
                     (url "https://github.com/KiCad/kicad-symbols.git")
                     (commit version)))
-              (file-name (string-append "kicad-symbols-" version "-checkout"))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "18z5vpdq7hy2mpvm5vz1dz3ra3a5iybavvlzi8q2bmmdb6gsvf64"))))
+                "048b07ffsaav1ssrchw2p870lvb4rsyb5vnniy670k7q9p16qq6h"))))
     (build-system cmake-build-system)
     (arguments
-     `(#:tests? #f)) ; No tests exist
-    (home-page "http://kicad-pcb.org/")
+     `(#:tests? #f))                    ; no tests exist
+    (home-page "https://kicad-pcb.org/")
     (synopsis "Official KiCad schematic symbol libraries for KiCad 5")
     (description "This package contains the official KiCad schematic symbol
 libraries for KiCad 5.")
-    ;; TODO: Exception: "To the extent that the creation of electronic designs that use 'Licensed Material' can be considered to be 'Adapted Material', then the copyright holder waives article 3 of the license with respect to these designs and any generated files which use data provided as part of the 'Licensed Material'."
+    ;; TODO: Exception: "To the extent that the creation of electronic designs
+    ;; that use 'Licensed Material' can be considered to be 'Adapted Material',
+    ;; then the copyright holder waives article 3 of the license with respect to
+    ;; these designs and any generated files which use data provided as part of
+    ;; the 'Licensed Material'."
     ;; See <https://github.com/KiCad/kicad-symbols/blob/master/LICENSE.md>.
     (license license:cc-by-sa4.0)))
 
@@ -955,7 +1047,8 @@ interface to select the best such procedures to use on a given system.")
                 "0w1n4d249vlpda0hi6z1v13qp21vlbp3ykn0m8qg4rd5132j7fg1"))))
     (build-system gnu-build-system)
     (arguments
-     `(#:phases
+     `(#:configure-flags '("--enable-shared")
+       #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'fix-tests
            (lambda _
@@ -979,17 +1072,19 @@ determines the frequencies, decay constants, amplitudes, and phases of those sin
 (define-public guile-libctl
   (package
     (name "guile-libctl")
-    (version "3.2.2")
+    (version "4.2.0")
     (source (origin
               (method url-fetch)
               (uri
                (string-append
-                "http://ab-initio.mit.edu/libctl/libctl-"
-                version ".tar.gz"))
+                "https://github.com/NanoComp/libctl/releases/download/v"
+                version "/libctl-" version ".tar.gz"))
               (sha256
                (base32
-                "1g7gqybq20jhdnw5vg18bgbj9jz0408gfmjvs8b4xs30pic8pgca"))))
+                "0x8r56lpfq83kfbq28vr25icl19xpfd6fjrxzcpdmv30l9pash83"))))
     (build-system gnu-build-system)
+    (arguments
+      `(#:configure-flags '("--enable-shared")))
     (native-inputs
      `(("fortran" ,gfortran)))
     (inputs
@@ -1004,22 +1099,23 @@ for scientific simulations.")
 (define-public mpb
   (package
     (name "mpb")
-    (version "1.5")
+    (version "1.8.0")
     (source (origin
               (method url-fetch)
               (uri
                (string-append
-                "http://ab-initio.mit.edu/mpb/mpb-"
-                version ".tar.gz"))
+                "https://github.com/NanoComp/mpb/releases/download/v"
+                version "/mpb-" version ".tar.gz"))
               (sha256
                (base32
-                "1mqb2d8jq957nksayjygq58iy8i42vjryzg9iy5fpfay31wzxsix"))))
+                "1jgrb7dd6qs6j6y1gnxmdgrh79l2bvqa6nk60a4pw1annsks4brd"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
        (list (string-append "--with-libctl="
                             (assoc-ref %build-inputs "libctl")
-                            "/share/libctl"))))
+                            "/share/libctl")
+             "--enable-shared")))
     (native-inputs
      `(("fortran" ,gfortran)
        ("pkg-config" ,pkg-config)
@@ -1045,16 +1141,16 @@ fully-vectorial and three-dimensional methods.")
 (define-public meep
   (package
     (name "meep")
-    (version "1.3")
+    (version "1.8.0")
     (source (origin
               (method url-fetch)
               (uri
                (string-append
-                "http://ab-initio.mit.edu/meep/meep-"
-                version ".tar.gz"))
+                "https://github.com/NanoComp/meep/releases/download/v"
+                version "/meep-" version ".tar.gz"))
               (sha256
                (base32
-                "0f6lbw2hrksg7xscwdqs78jc9nmzx9fs8j0hz1y4i8qknkqiyk2n"))))
+                "14zyxmm3p80j5fz5b89sl7hgkgcisqjny5hjh4pi274ziqjqz8bm"))))
     (build-system gnu-build-system)
     (arguments
      `(#:configure-flags
@@ -1068,7 +1164,7 @@ fully-vectorial and three-dimensional methods.")
     (inputs
      `(("fftw" ,fftw)
        ("gsl" ,gsl)
-       ("guile" ,guile-2.0)             ; doesn't build with guile-2.2
+       ("guile" ,guile-2.2)
        ("harminv" ,harminv)
        ("hdf5" ,hdf5)
        ("lapack" ,lapack)
@@ -1113,13 +1209,14 @@ language, ADMS transforms Verilog-AMS code into other target languages.")
     (name "capstone")
     (version "3.0.5")
     (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/aquynh/capstone/archive/"
-                                  version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
+              (method git-fetch)
+              (uri (git-reference
+                     (url "https://github.com/aquynh/capstone")
+                     (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
-                "1wbd1g3r32ni6zd9vwrq3kn7fdp9y8qwn9zllrrbk8n5wyaxcgci"))))
+                "0dgf82kxj4rs45d6s8sr984c38sll1n5scpypjlyh21gh2yl4qfw"))))
     (build-system gnu-build-system)
     (arguments
      `(#:tests? #f
@@ -1173,17 +1270,17 @@ bindings for Python, Java, OCaml and more.")
 (define-public radare2
   (package
     (name "radare2")
-    (version "2.5.0")
+    (version "3.5.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append "http://radare.mikelloc.com/get/" version "/"
-                                  name "-" version ".tar.gz"))
+              (uri (string-append "https://radare.mikelloc.com/get/" version "/"
+                                  "radare2-" version ".tar.gz"))
               (sha256
                (base32
-                "17h4ba5qqahfi8mi4x2dcvq87cqpir5v2dlaqbvmay6vby4zh4v7"))
+                "174x5545fw2nyf000gd46hi7rx2bn3bw5bsnvizn9yi99pn7m4mw"))
               (modules '((guix build utils)))
               (snippet
-                '(begin
+               '(begin
                   (substitute* "libr/asm/p/Makefile"
                     (("LDFLAGS\\+=") "LDFLAGS+=-Wl,-rpath=$(LIBDIR) "))
                   (substitute* "libr/parse/p/Makefile"
@@ -1193,7 +1290,7 @@ bindings for Python, Java, OCaml and more.")
                   #t))))
     (build-system gnu-build-system)
     (arguments
-     '(#:tests? #f; tests require git and network access
+     '(#:tests? #f                      ; tests require git and network access
        #:phases
        (modify-phases %standard-phases
          (add-before 'configure 'mklibdir
@@ -1461,11 +1558,11 @@ unique design feature of Trilinos is its focus on packages.")
      `(#:tests? #f
        #:configure-flags
        (list
-        "CXXFLAGS=-O3 -std=c++11"
+        "CXXFLAGS=-O3"
         (string-append "ARCHDIR="
                        (assoc-ref %build-inputs "trilinos")))))
     (native-inputs
-     `(("bison" ,bison)
+     `(("bison" ,bison-3.0)                  ;'configure' fails with Bison 3.4
        ("flex" ,flex)
        ("fortran" ,gfortran)))
     (inputs
@@ -1501,7 +1598,7 @@ parallel computing platforms.  It also supports serial execution.")
     (arguments
      `(,@(substitute-keyword-arguments (package-arguments xyce-serial)
            ((#:configure-flags flags)
-            `(list "CXXFLAGS=-O3 -std=c++11"
+            `(list "CXXFLAGS=-O3"
                    "CXX=mpiCC"
                    "CC=mpicc"
                    "F77=mpif77"
@@ -1602,6 +1699,7 @@ parallel computing platforms.  It also supports serial execution.")
        ("libtool" ,libtool)))
     (native-inputs
      `(("pkg-config-native" ,pkg-config)
+       ("gcc" ,gcc-5)
        ("libtool-native" ,libtool)))
     (home-page "http://www.freehdl.seul.org/")
     (synopsis "VHDL simulator")
@@ -1707,7 +1805,7 @@ parallel computing platforms.  It also supports serial execution.")
          ("python" ,python-2) ; for tests
          ("matplotlib" ,python2-matplotlib) ; for tests
          ("numpy" ,python2-numpy) ; for tests
-         ("xorg-server" ,xorg-server))) ; for tests
+         ("xorg-server" ,xorg-server-for-tests))) ; for tests
       (inputs
        `(("adms" ,adms)
          ("asco" ,asco)
@@ -1731,7 +1829,7 @@ simulations are also supported.")
 (define-public qucs-s
   (package
     (name "qucs-s")
-    (version "0.0.20")
+    (version "0.0.21")
     (source (origin
               (method url-fetch)
               (uri (string-append "https://github.com/ra3xdh/qucs_s/archive/"
@@ -1739,7 +1837,7 @@ simulations are also supported.")
               (file-name (string-append name "-" version ".tar.gz"))
               (sha256
                (base32
-                "01dizf4rjciqc8x7bmv3kbhdlz90bm6n9m9fz7dbzqcwvszcs1hx"))))
+                "12m1jwhb9qwvb141qzyskbxnw3wn1x22d02z4b4862p7xvccl5h7"))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #f ; no tests
@@ -1864,21 +1962,20 @@ simulator backends @code{Qucsator}, @code{ngspice} and @code{Xyce}.")
 (define-public librepcb
   (package
     (name "librepcb")
-    (version "0.1.0")
+    (version "0.1.3")
     (source
      (origin
        (method url-fetch)
-       (uri (string-append "https://download.librepcb.org/releases/0.1.0/librepcb-"
-                           version "-source.zip"))
+       (uri (string-append "https://download.librepcb.org/releases/"
+                           version "/librepcb-" version "-source.zip"))
        (sha256
-        (base32
-         "0affvwwgs1j2wx6bb3zfa2jbfxpckklr8cka2nkswca0p82wd3dv"))))
+        (base32 "1ich849dsx2hmcwlwbry4mkg374n940l3hy6srh4qms2rm7vd7x0"))))
     (build-system gnu-build-system)
     (inputs
      `(("qtbase" ,qtbase)
        ("zlib" ,zlib)))
     (native-inputs
-     `(("qttools" ,qttools) ; for lrelease
+     `(("qttools" ,qttools)             ; for lrelease
        ("unzip" ,unzip)))
     (arguments
      `(#:phases
@@ -1922,6 +2019,7 @@ editors.")
               (uri (git-reference
                     (url "https://github.com/markwal/GPX.git")
                     (commit version)))
+              (file-name (git-file-name name version))
               (sha256
                (base32
                 "1yab269x8qyf7rd04vaxyqyjv4pzz9lp4sc4dwh927k23avr3rw5"))))
@@ -1933,3 +2031,416 @@ editors.")
 slicing software to x3g files for standalone 3D printing on common 3D
 printers.")
     (license license:gpl2+)))
+
+(define-public gnucap
+  (package
+    (name "gnucap")
+    (version "20171003")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://git.savannah.gnu.org/cgit/gnucap.git/snapshot/gnucap-"
+                           version ".tar.gz"))
+       (sha256
+        (base32
+         "16m09xa685qhj5fqq3bcgakrwnb74xhf5f7rpqkkf9fg8plzbb1g"))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("readline" ,readline)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               ;; Set correct rpath so that gnucap finds libgnucap.so.
+               (substitute* (list "apps/configure" "lib/configure"
+                                  "main/configure" "modelgen/configure")
+                 (("LDFLAGS =")
+                  (string-append "LDFLAGS = -Wl,-rpath=" out "/lib")))
+               ;; gnucap uses a hand-written configure script that expects the
+               ;; --prefix argument to be the first argument passed to it.
+               (invoke "./configure" (string-append "--prefix=" out)))))
+         (replace 'check
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (libpath "../lib/O:../apps/O"))
+               (with-directory-excursion "tests"
+                 ;; Make test return non-zero exit code when a test fails.
+                 (substitute* "test"
+                   (("/bin/sh") "/bin/sh -e")
+                   (("\\|\\| echo \"\\*\\*\\*\\* \\$ii fails \\*\\*\\*\\*\"") ""))
+                 ;; Fix expected plugin search path for test c_attach.1.gc
+                 (substitute* "==out/c_attach.1.gc.out"
+                   (("/usr/local/lib/gnucap")
+                    (string-append libpath ":" out "/lib/gnucap")))
+                 ;; Set library path so that gnucap can find libgnucap.so
+                 ;; while running the tests.
+                 (setenv "LD_LIBRARY_PATH" libpath)
+                 (invoke "./test" "../main/O/gnucap" "" "test-output" "==out"))))))))
+    (home-page "https://www.gnu.org/software/gnucap/")
+    (synopsis "Mixed analog and digital circuit simulator")
+    (description "GNUcap is a circuit analysis package.  It offers a general
+purpose circuit simulator and can perform DC and transient analyses, fourier
+analysis and AC analysis.  The engine is designed to do true mixed-mode
+simulation.")
+    (license license:gpl3+)))
+
+(define-public cutter
+  (package
+    (name "cutter")
+    (version "1.8.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/radareorg/cutter")
+             (commit (string-append "v" version))))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "03f3cdckh51anx9gd1b0ndb2fg7061hqngvygf32ky29mm2m2lyv"))))
+    (build-system gnu-build-system)
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (radare2 (assoc-ref inputs "radare2")))
+               ;; fix pkg-config detection ./src/lib_radare2.pri:PREFIX=/usr/lib
+               ;; override `qmake PREFIX=`
+               (substitute* "./src/lib_radare2.pri"
+                 (("PREFIX") "R2PREFIX")
+                 (("R2PREFIX=/usr") (string-append "R2PREFIX=" radare2)))
+               (invoke "qmake"
+                       (string-append "PREFIX=" out)
+                       "./src/Cutter.pro")))))))
+    (native-inputs
+     `(("pkg-config" ,pkg-config)))
+    (inputs
+     `(("qtbase" ,qtbase)
+       ("qtsvg" ,qtsvg)
+       ("openssl" ,openssl)
+       ("radare2" ,radare2)))
+    (home-page "https://github.com/radareorg/cutter")
+    (synopsis "GUI for radare2 reverse engineering framework")
+    (description "Cutter is a GUI for radare2 reverse engineering framework.
+Its goal is making an advanced andcustomizable reverse-engineering platform
+while keeping the user experience at mind.  Cutter is created by reverse
+engineers for reverse engineers.")
+    (license (list license:cc-by-sa3.0  ;the "Iconic" icon set
+                   license:gpl3+))))    ;everything else
+
+(define-public lib3mf
+  (package
+    (name "lib3mf")
+    (version "1.8.1")
+    (source
+     (origin
+      (method git-fetch)
+      (uri (git-reference (url "https://github.com/3MFConsortium/lib3mf.git")
+                          (commit (string-append "v" version))))
+      (file-name (git-file-name name version))
+      (sha256
+       (base32
+        "11wpk6n9ga2p57h1dcrp37w77mii0r7r6mlrgmykf7rvii1rzgqd"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("googletest-source" ,(package-source googletest))))
+    (inputs
+     `(("libuuid" ,util-linux "lib")))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'unpack-googletest
+           (lambda* (#:key inputs #:allow-other-keys)
+             (copy-recursively (assoc-ref inputs "googletest-source")
+                               "UnitTests/googletest")
+             #t)))))
+    (synopsis "Implementation of the 3D Manufacturing Format (3MF) file standard")
+    (description
+     "Lib3MF is a C++ implementation of the 3D Manufacturing Format (3MF) file
+standard.  It offers a way to integrate 3MF reading and writing capabilities, as
+well as conversion and validation tools for input and output data.  The
+specification can be downloaded at @url{http://3mf.io/specification/}.")
+    (home-page "https://3mf.io/")
+    (license license:bsd-2)))
+
+(define-public openscad
+  (package
+    (name "openscad")
+    (version "2019.05")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append "https://files.openscad.org/openscad-" version
+                           ".src.tar.gz"))
+       (sha256
+        (base32
+         "0nbgk5q5pgnw53la0kccdcpz2f4xf6d6076rkn0q08z57hkc85ha"))))
+    (build-system cmake-build-system)
+    (inputs
+     `(("boost" ,boost)
+       ("cgal" ,cgal)
+       ("double-conversion" ,double-conversion)
+       ("eigen" ,eigen)
+       ("fontconfig" ,fontconfig)
+       ("glew" ,glew)
+       ("gmp" ,gmp)
+       ("harfbuzz" ,harfbuzz)
+       ("lib3mf" ,lib3mf)
+       ("libxml2" ,libxml2)
+       ("libzip" ,libzip)
+       ("mpfr" ,mpfr)
+       ("opencsg" ,opencsg)
+       ("qscintilla" ,qscintilla)
+       ("qtbase" ,qtbase)
+       ("qtmultimedia" ,qtmultimedia)))
+    (native-inputs
+     `(("bison" ,bison)
+       ("flex" ,flex)
+       ("gettext" ,gettext-minimal)
+       ("pkg-config" ,pkg-config)
+       ("which" ,which)
+       ;; the following are only needed for tests
+       ("imagemagick" ,imagemagick)
+       ("ps" ,procps)
+       ("python" ,python)
+       ("xvfb" ,xorg-server-for-tests)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (invoke "qmake"
+                     (string-append "PREFIX=" (assoc-ref outputs "out")))
+             #t))
+         (replace 'check
+           (lambda _
+             (with-directory-excursion "tests"
+               (invoke "cmake" ".")
+               (invoke "make")
+               (invoke "ctest"))
+             ;; strip python test files since lib dir ends up in out/share
+             (for-each delete-file
+                       (find-files "libraries/MCAD" ".*\\.py"))
+             #t)))))
+    (synopsis "Script-based 3D modeling application")
+    (description
+     "OpenSCAD is a 3D Computer-aided Design (CAD) application.  Unlike an
+interactive modeler, OpenSCAD generates 3D models from a script, giving you
+full programmatic control over your models.")
+    (home-page "https://www.openscad.org/")
+    (license license:gpl2+)))
+
+(define-public freecad
+  (package
+    (name "freecad")
+    (version "0.18.4")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/FreeCAD/FreeCAD.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32
+         "170hk1kgrvsddrwykp24wyj0cha78zzmzbf50gn98x7ngqqs395s"))))
+    (build-system cmake-build-system)
+    (native-inputs
+     `(("doxygen" ,doxygen)
+       ("graphviz" ,graphviz)
+       ("qttools" ,qttools)
+       ("pkg-config" ,pkg-config)
+       ("swig" ,swig)))
+    (inputs
+     `(("boost" ,boost)
+       ("coin3D" ,coin3D)
+       ("eigen" ,eigen)
+       ("freetype" ,freetype)
+       ("glew" ,glew)
+       ("hdf5" ,hdf5-1.10)
+       ("libarea" ,libarea)
+       ("libmedfile" ,libmedfile)
+       ("libspnav" ,libspnav)
+       ("libxi" ,libxi)
+       ("libxmu" ,libxmu)
+       ("openmpi" ,openmpi)
+       ("opencascade-occt" ,opencascade-occt)
+       ("python-matplotlib" ,python-matplotlib)
+       ("python-pyside-2" ,python-pyside-2)
+       ("python-pyside-2-tools" ,python-pyside-2-tools)
+       ("python-shiboken-2" ,python-shiboken-2)
+       ("python-wrapper" ,python-wrapper)
+       ("qtbase" ,qtbase)
+       ("qtsvg" ,qtsvg)
+       ("qtx11extras" ,qtx11extras)
+       ("qtxmlpatterns" ,qtxmlpatterns)
+       ;; qtwebkit is optional. We remove it currently, because it takes
+       ;; much time to compile and substitutes are often unavailable
+       ;;("qtwebkit" ,qtwebkit)
+       ("tbb" ,tbb)
+       ("vtk" ,vtk)
+       ("xerces-c" ,xerces-c)
+       ("zlib" ,zlib)))
+    (arguments
+     `(#:tests? #f
+       #:configure-flags
+       (list
+        "-DBUILD_QT5=ON"
+        (string-append "-DCMAKE_INSTALL_LIBDIR="
+                       (assoc-ref %outputs "out") "/lib"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'restore-pythonpath
+           (lambda _
+             (substitute* "src/Main/MainGui.cpp"
+               (("_?putenv\\(\"PYTHONPATH=\"\\);") ""))
+             #t))
+         (add-after 'install 'wrap-pythonpath
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (wrap-program (string-append out "/bin/FreeCAD")
+                 (list "PYTHONPATH"
+                       'prefix (list (getenv "PYTHONPATH")))))
+             #t)))))
+    (home-page "https://www.freecadweb.org/")
+    (synopsis "Your Own 3D Parametric Modeler")
+    (description
+     "FreeCAD is a general purpose feature-based, parametric 3D modeler for
+CAD, MCAD, CAx, CAE and PLM, aimed directly at mechanical engineering and
+product design but also fits a wider range of uses in engineering, such as
+architecture or other engineering specialties.  It is 100% Open Source (LGPL2+
+license) and extremely modular, allowing for very advanced extension and
+customization.")
+    (license
+     (list
+      license:lgpl2.1+
+      license:lgpl2.0+
+      license:gpl3+
+      license:bsd-3))))
+
+(define-public libmedfile
+  (package
+    (name "libmedfile")
+    (version "4.0.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (string-append
+             "https://files.salome-platform.org/Salome/other/med-"
+             version ".tar.gz"))
+       (sha256
+        (base32
+         "017h9p0x533fm4gn6pwc8kmp72rvqmcn6vznx72nkkl2b05yjx54"))))
+    (build-system cmake-build-system)
+    (inputs `(("hdf5" ,hdf5-1.10)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'install 'remove-test-output
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (delete-file-recursively
+                (string-append out "/bin/testc"))
+               #t))))))
+    (home-page "https://www.salome-platform.org")
+    (synopsis "Library to read and write MED files")
+    (description
+     "The purpose of the MED module is to provide a standard for storing and
+recovering computer data associated to numerical meshes and fields, and to
+facilitate the exchange between codes and solvers.
+
+The persistent data storage is based upon HDF format (like CGNS, a standard
+developed by Boeing and NASA in the area of Computational Fluid Dynamic).
+
+MED also provides structures to hold data on meshes and fields.  These
+structures are exchanged between solvers, hide the communication level (CORBA
+or MPI), and offer persistence (read/write in .med files).
+
+The main benefit of a common exchange format is reduced complexity of code
+coupling.  It also allows sharing such high level functionalities as
+computation of nodal connectivity of sub-elements (faces and edges),
+arithmetic operations on fields, entity location functionalities, and
+interpolation toolkit.")
+    (license license:gpl3+)))
+
+(define-public libarea
+  (let ((revision "1")
+        (commit "8f8bac811c10f1f01fda0d742a18591f61dd76ee"))
+    (package
+      (name "libarea")
+      (version (git-version "0" revision commit))
+      (source
+       (origin
+         (method git-fetch)
+         (uri (git-reference (url "https://github.com/Heeks/libarea.git")
+                             (commit commit)))
+         (file-name (git-file-name name version))
+         (sha256
+          (base32 "0pvqz6cabxqdz5y26wnj6alkn8v5d7gkx0d3h8xmg4lvy9r3kh3g"))))
+      (build-system gnu-build-system)
+      (inputs `(("boost" ,boost)
+                ("python-wrapper" ,python-wrapper)))
+      (native-inputs
+       `(("cmake" ,cmake)))
+      (arguments
+       `(#:tests? #f
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'configure 'cmake-configure
+             (lambda* (#:key inputs outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out"))
+                     (cmake (assoc-ref inputs "cmake")))
+                 (mkdir-p "build")
+                 (invoke "cmake"
+                         (string-append "-DCMAKE_INSTALL_PREFIX=" out)))))
+           (delete 'configure))))
+      (home-page "https://github.com/Heeks/libarea")
+      (synopsis
+       "Library and python module for pocketing and profiling operations")
+      (description
+       "Area is a CAM-related software for pocketing operation.
+
+This project provides library and associated python-module to compute pocket
+operations.")
+      (license (list
+                license:bsd-3
+                license:gpl3+)))))
+
+(define-public libspnav
+  (package
+    (name "libspnav")
+    (version "0.2.3")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/FreeSpacenav/libspnav.git")
+                    (commit (string-append "libspnav-" version))))
+              (sha256
+               (base32
+                "098h1jhlj87axpza5zgy58prp0zn94wyrbch6x0s7q4mzh7dc8ba"))
+              (file-name (git-file-name name version))))
+    (build-system gnu-build-system)
+    (inputs
+     `(("libx11" ,libx11)))
+    (arguments `(#:tests? #f))
+    (home-page "http://spacenav.sourceforge.net/")
+    (synopsis
+     "Library for communicating with spacenavd or 3dxsrv")
+    (description
+     "The libspnav library is provided as a replacement of the magellan
+library.  It provides a cleaner, and more orthogonal interface.  libspnav
+supports both the original X11 protocol for communicating with the driver, and
+the new alternative non-X protocol.  Programs that choose to use the X11
+protocol, are automatically compatible with either the free spacenavd driver
+or the official 3dxserv, as if they were using the magellan SDK.
+
+Also, libspnav provides a magellan API wrapper on top of the new API.  So, any
+applications that were using the magellan library, can switch to libspnav
+without any changes.  And programmers that are familiar with the magellan API
+can continue using it with a free library without the restrictions of the
+official SDK.")
+    (license license:bsd-3)))