;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015 Ricardo Wurmus <rekado@elephly.net>
+;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
;;; Copyright © 2016 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2016 David Thompson <davet@gnu.org>
+;;; Copyright © 2016, 2017 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017 Theodoros Foradis <theodoros.for@openmailbox.org>
+;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
;;;
;;; This file is part of GNU Guix.
;;;
#:use-module (guix store)
#:use-module (guix utils)
#:use-module ((guix licenses) #:prefix license:)
+ #:use-module (guix build-system cmake)
#:use-module (guix build-system gnu)
+ #:use-module (guix build-system python)
#:use-module (gnu packages)
+ #:use-module (gnu packages algebra)
#:use-module (gnu packages autotools)
#:use-module (gnu packages base)
#:use-module (gnu packages bison)
#:use-module (gnu packages boost)
+ #:use-module (gnu packages check)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages curl)
#:use-module (gnu packages flex)
#:use-module (gnu packages fontutils)
+ #:use-module (gnu packages freedesktop)
+ #:use-module (gnu packages gcc)
#:use-module (gnu packages gd)
#:use-module (gnu packages gettext)
#:use-module (gnu packages ghostscript)
#:use-module (gnu packages gnome)
#:use-module (gnu packages gtk)
#:use-module (gnu packages guile)
+ #:use-module (gnu packages image)
+ #:use-module (gnu packages imagemagick)
#:use-module (gnu packages linux) ;FIXME: for pcb
#:use-module (gnu packages m4)
#:use-module (gnu packages maths)
+ #:use-module (gnu packages ncurses)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages python)
#:use-module (gnu packages qt)
+ #:use-module (gnu packages readline)
+ #:use-module (gnu packages swig)
#:use-module (gnu packages tcl)
+ #:use-module (gnu packages tls)
#:use-module (gnu packages tex)
+ #:use-module (gnu packages wxwidgets)
+ #:use-module (gnu packages xorg)
#:use-module (srfi srfi-1))
(define-public librecad
(package
(name "librecad")
- (version "2.1.1")
+ (version "2.1.3")
(source (origin
(method url-fetch)
(uri (string-append
(file-name (string-append name "-" version ".tar.gz"))
(sha256
(base32
- "132vv9pzbx64zmbnikyg06d4j47yzlmwi4mywxnd9gkaik4yd2kb"))))
+ "01nvc1g3si05r5np1pzn62ah9w84p8nxa32wqrjh6gdi17jfvi3l"))))
(build-system gnu-build-system)
(arguments
'(#:phases
(assoc-ref inputs "boost")))))
(replace 'install
(lambda* (#:key outputs #:allow-other-keys)
- (let ((out (assoc-ref outputs "out")))
- (mkdir-p (string-append out "/bin"))
- (mkdir-p (string-append out "/share/librecad"))
- (copy-file "unix/librecad"
- (string-append out "/bin/librecad"))
- (copy-recursively "unix/resources"
- (string-append out "/share/librecad"))))))))
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin"))
+ (share (string-append out "/share/librecad")))
+ (mkdir-p bin)
+ (install-file "unix/librecad" bin)
+ (mkdir-p share)
+ (copy-recursively "unix/resources" share)))))))
(inputs
`(("boost" ,boost)
("muparser" ,muparser)
("freetype" ,freetype)
- ("qt" ,qt)))
+ ("qtbase" ,qtbase)
+ ("qtsvg" ,qtsvg)))
(native-inputs
`(("pkg-config" ,pkg-config)
("which" ,which)))
(define-public pcb
(package
(name "pcb")
- (version "20140316")
+ (version "4.0.0")
(source (origin
(method url-fetch)
- (uri (string-append
- "http://ftp.geda-project.org/pcb/pcb-" version "/pcb-"
- version ".tar.gz"))
+ (uri (string-append "mirror://sourceforge/pcb/pcb/pcb-" version
+ "/pcb-" version ".tar.gz"))
(sha256
(base32
- "0l6944hq79qsyp60i5ai02xwyp8l47q7xdm3js0jfkpf72ag7i42"))))
+ "1i6sk8g8h9avms142wl07yv20m1cm4c3fq3v6hybrhdxs2n17plf"))))
(build-system gnu-build-system)
(arguments
`(#:phases
(path (string-append (assoc-ref inputs "udev") "/lib")))
(wrap-program (string-append out "/bin/pcb")
`("LD_LIBRARY_PATH" ":" prefix (,path)))))
- %standard-phases))))
+ (alist-cons-before
+ 'check 'pre-check
+ (lambda _
+ (system "Xvfb :1 &")
+ (setenv "DISPLAY" ":1")
+ #t)
+ %standard-phases)))))
(inputs
`(("dbus" ,dbus)
("mesa" ,mesa)
`(("pkg-config" ,pkg-config)
("intltool" ,intltool)
("bison" ,bison)
- ("flex" ,flex)))
+ ("flex" ,flex)
+ ;; For tests
+ ("imagemagick" ,imagemagick)
+ ("gerbv" ,gerbv)
+ ("ghostscript" ,ghostscript)
+ ("xvfb" ,xorg-server)))
(home-page "http://pcb.geda-project.org/")
(synopsis "Design printed circuit board layouts")
(description
optimizer; and it can produce photorealistic and design review images.")
(license license:gpl2+)))
+(define-public pcb-rnd
+ (package (inherit pcb)
+ (name "pcb-rnd")
+ (version "1.1.3")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "http://repo.hu/projects/pcb-rnd/releases/"
+ "pcb-rnd-" version ".tar.gz"))
+ (sha256
+ (base32
+ "0pycynla60b96jkb6fh6f4sx663pqbzjwnixhw5ym8sym2absm09"))))
+ (arguments
+ `(#:tests? #f ; no check target
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'cc-is-gcc
+ (lambda _ (setenv "CC" "gcc") #t))
+ (replace 'configure
+ ;; The configure script doesn't tolerate most of our configure flags.
+ (lambda* (#:key outputs #:allow-other-keys)
+ (zero? (system* "sh" "configure"
+ (string-append "--prefix="
+ (assoc-ref outputs "out")))))))))
+ (home-page "http://repo.hu/projects/pcb-rnd/")
+ (description "PCB RND is a fork of the GNU PCB circuit board editing tool
+featuring various improvements and bug fixes.")))
+
(define-public fastcap
(package
(name "fastcap")
(version "2.0-18Sep92")
(source (origin
(method url-fetch/tarbomb)
- (file-name (string-append name "-" version ".tar.gz"))
(uri (string-append "http://www.rle.mit.edu/cpg/codes/"
name "-" version ".tgz"))
(sha256
(build-system gnu-build-system)
(native-inputs
`(("texlive" ,texlive)
- ("ghostscript" ,ghostscript-gs)))
+ ("ghostscript" ,ghostscript)))
(arguments
`(#:make-flags '("CC=gcc" "RM=rm" "SHELL=sh" "all")
#:parallel-build? #f
(assoc-ref outputs "out"))
"phoenix.pro"))))))))
(inputs
- `(("qt" ,qt)
+ `(("qtbase" ,qtbase)
+ ("qtserialport" ,qtserialport)
+ ("qtsvg" ,qtsvg)
("boost" ,boost)
("zlib" ,zlib)
("fritzing-parts-db"
`(("autoconf" ,autoconf)
("automake" ,automake)
("libtool" ,libtool)
- ("gettext" ,gnu-gettext)
+ ("gettext" ,gettext-minimal)
("po4a" ,po4a)
("pkg-config" ,pkg-config)))
(inputs
image, etc. Besides viewing Gerbers, you may also view Excellon drill files
as well as pick-place files.")
(license license:gpl2+)))
+
+(define-public ao
+ (let ((commit "0bc2354b8dcd1a82a0fd6647706b126045e52734"))
+ (package
+ (name "ao-cad") ;XXX: really "ao", but it collides with libao
+ (version (string-append "0." (string-take commit 7)))
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/mkeeter/ao")
+ (commit commit)))
+ (sha256
+ (base32
+ "0lm7iljklafs8dhlvaab2yhwx4xymrdjrqk9c5xvn59hlvbgl1j5"))
+ (file-name (string-append name "-" version "-checkout"))
+ (modules '((guix build utils)))
+ (snippet
+ ;; Remove bundled libraries: Eigen, glm, and catch. TODO:
+ ;; Unbundle efsw <https://github.com/diegostamigni/efsw>.
+ '(begin
+ (delete-file-recursively "vendor")
+
+ ;; Use #include <catch.hpp>.
+ (substitute* (find-files "." "\\.[ch]pp$")
+ (("catch/catch\\.hpp")
+ "catch.hpp"))))))
+ (build-system cmake-build-system)
+ (arguments
+ `(;; Have the RUNPATH of libao.so point to $libdir, where libefsw.so
+ ;; lives.
+ #:configure-flags (list (string-append "-DCMAKE_SHARED_LINKER_FLAGS="
+ "-Wl,-rpath="
+ (assoc-ref %outputs "out")
+ "/lib"))
+
+ #:phases
+ (modify-phases %standard-phases
+ (add-before 'build 'add-eigen-to-search-path
+ (lambda* (#:key inputs #:allow-other-keys)
+ ;; Allow things to find our own Eigen and Catch.
+ (let ((eigen (assoc-ref inputs "eigen")))
+ (setenv "CPLUS_INCLUDE_PATH"
+ (string-append eigen "/include/eigen3:"
+ (getenv "CPLUS_INCLUDE_PATH")))
+ #t)))
+ (add-after 'install 'install-guile-bindings
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ ;; Install the Guile bindings (the build system only installs
+ ;; libao.so.)
+ (let* ((out (assoc-ref outputs "out"))
+ (moddir (string-append out "/share/guile/site/2.0")))
+ (install-file "bind/libao.so"
+ (string-append out "/lib"))
+
+ ;; Go to the source directory.
+ (with-directory-excursion ,(string-append "../"
+ name "-" version
+ "-checkout")
+ (substitute* "bind/guile/ao/bind.scm"
+ (("\\(define libao \\(dynamic-link .*$")
+ (string-append "(define libao (dynamic-link \""
+ out "/lib/libao\")) ;")))
+
+ (for-each (lambda (file)
+ (install-file file
+ (string-append moddir
+ "/ao")))
+ (find-files "bind/guile" "\\.scm$"))
+
+ (substitute* "bin/ao-guile"
+ (("\\(add-to-load-path .*")
+ (string-append "(add-to-load-path \"" moddir "\")")))
+
+ (install-file "bin/ao-guile"
+ (string-append out "/bin"))
+
+ ;; Allow Ao to dlopen the relevant GL libraries. Otherwise
+ ;; it fails with:
+ ;; Couldn't find current GLX or EGL context.
+ (let ((mesa (assoc-ref inputs "mesa")))
+ (wrap-program (string-append out "/bin/ao-guile")
+ `("LD_LIBRARY_PATH" ":" prefix
+ (,(string-append mesa "/lib")))))
+ #t)))))))
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
+ (inputs
+ `(("boost" ,boost)
+ ("catch" ,catch-framework)
+ ("libpng" ,libpng)
+ ("glfw" ,glfw)
+ ("libepoxy" ,libepoxy)
+ ("mesa" ,mesa)
+ ("eigen" ,eigen)
+ ("glm" ,glm)
+ ("guile" ,guile-2.0)))
+ (home-page "http://www.mattkeeter.com/projects/ao/")
+ (synopsis "Tool for programmatic computer-aided design")
+ (description
+ "Ao is a tool for programmatic computer-aided design (CAD). In Ao,
+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:gpl2+))))) ;Guile bindings
+
+;; We use kicad from a git commit, because support for boost 1.61.0 has been
+;; recently added.
+(define-public kicad
+ (let ((commit "4ee344e150bfaf3a6f3f7bf935fb96ae07c423fa")
+ (revision "1"))
+ (package
+ (name "kicad")
+ (version (string-append "4.0-" revision "."
+ (string-take commit 7)))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://git.launchpad.net/kicad")
+ (commit commit)))
+ (sha256
+ (base32 "0kf6r92nps0658i9n3p9vp5dzbssmc22lvjv5flyvnlf83l63s4n"))
+ (file-name (string-append name "-" version "-checkout"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:out-of-source? #t
+ #:tests? #f ; no tests
+ #:configure-flags
+ (list "-DKICAD_STABLE_VERSION=ON"
+ "-DKICAD_REPO_NAME=stable"
+ ,(string-append "-DKICAD_BUILD_VERSION=4.0-"
+ (string-take commit 7))
+ "-DCMAKE_BUILD_TYPE=Release"
+ "-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-3.0")
+ "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE"
+ ;; TODO: Enable this when CA certs are working with curl.
+ "-DBUILD_GITHUB_PLUGIN=OFF")
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'install 'wrap-program
+ ;; Ensure correct Python at runtime.
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (python (assoc-ref inputs "python"))
+ (file (string-append out "/bin/kicad"))
+ (path (string-append
+ out
+ "/lib/python2.7/site-packages:"
+ (getenv "PYTHONPATH"))))
+ (wrap-program file
+ `("PYTHONPATH" ":" prefix (,path))
+ `("PATH" ":" prefix
+ (,(string-append python "/bin:")))))
+ #t)))))
+ (native-inputs
+ `(("boost" ,boost)
+ ("gettext" ,gnu-gettext)
+ ("pkg-config" ,pkg-config)
+ ("swig" ,swig)
+ ("zlib" ,zlib)))
+ (inputs
+ `(("cairo" ,cairo)
+ ("curl" ,curl)
+ ("desktop-file-utils" ,desktop-file-utils)
+ ("glew" ,glew)
+ ("glm" ,glm)
+ ("hicolor-icon-theme" ,hicolor-icon-theme)
+ ("libsm" ,libsm)
+ ("mesa" ,mesa)
+ ("openssl" ,openssl)
+ ("python" ,python-2)
+ ("wxwidgets" ,wxwidgets-gtk2)
+ ("wxpython" ,python2-wxpython)))
+ (home-page "http://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
+perform specific functions, for example, pcbnew (Editing PCB), eeschema (editing
+electrical diagrams), gerbview (viewing Gerber files) and others.")
+ (license license:gpl3+))))
+
+(define-public kicad-library
+ (let ((version "4.0.4"))
+ (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
+ "1wyda58y39lhxml0xv1ngvddi0nqihx9bnlza46ajzms38ajvh12"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:out-of-source? #t
+ #:tests? #f ; no tests
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'install 'install-footprints ; from footprints tarball
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (zero? (system* "tar" "xvf"
+ (assoc-ref inputs "kicad-footprints")
+ "-C" (string-append (assoc-ref outputs "out")
+ "/share/kicad/modules")
+ "--strip-components=1"))))
+ ;; We change the default global footprint file, which is generated if
+ ;; it doesn't exist in user's home directory, from the one using the
+ ;; github plugin, to the one using the KISYSMOD environment path.
+ (add-after 'install-footprints 'use-pretty-footprint-table
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (template-dir (string-append out "/share/kicad/template"))
+ (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))
+ #t)))))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "KISYSMOD") ; footprint path
+ (files '("share/kicad/modules")))
+ (search-path-specification
+ (variable "KISYS3DMOD") ; 3D model path
+ (files '("share/kicad/modules/packages3d")))))
+ ;; Kicad distributes footprints in a separate tarball
+ (native-inputs
+ `(("kicad-footprints"
+ ,(origin
+ (method url-fetch)
+ (uri (string-append
+ "http://downloads.kicad-pcb.org/libraries/kicad-footprints-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "0ya4gg6clz3vp2wrb67xwg0bhwh5q8ag39jjmpcp4zjcqs1f48rb"))))))
+ (home-page "http://kicad-pcb.org/")
+ (synopsis "Libraries for kicad")
+ (description "This package provides Kicad component, footprint and 3D
+render model libraries.")
+ (license license:lgpl2.0+))))
+
+(define-public linsmith
+ (package
+ (name "linsmith")
+ (version "0.99.30")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://sourceforge/linsmith/linsmith/linsmith-"
+ version "/linsmith-" version ".tar.gz"))
+ (sha256
+ (base32
+ "18qslhr2r45rhpj4v6bjcqx189vs0bflvsj271wr7w8kvh69qwvn"))))
+ (build-system gnu-build-system)
+ (native-inputs
+ `(("pkg-config" ,pkg-config)
+ ("gtk" ,gtk+-2)
+ ("libgnome" ,libgnomeui)))
+ (home-page "http://jcoppens.com/soft/linsmith/index.en.php")
+ (synopsis "Smith Charting program")
+ (description "LinSmith is a Smith Charting program, mainly designed for
+educational use. As such, there is an emphasis on capabilities that improve
+the 'showing the effect of'-style of operation.")
+ (license license:gpl2+)))
+
+(define-public volk
+ (package
+ (name "volk")
+ (version "1.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "http://libvolk.org/releases/volk-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1bz3ywc6y5wmz3i8p4z2wbzhns8bc0ywdkl9qnxpcvfcscarbdlh"))))
+ (build-system cmake-build-system)
+ (inputs
+ `(("boost" ,boost)))
+ (native-inputs
+ `(("python-2", python-2)
+ ("python2-cheetah" ,python2-cheetah)))
+ (home-page "http://libvolk.org/")
+ (synopsis "Vector-Optimized Library of Kernels")
+ (description
+ "@code{volk} contains procedures with machine-specific optimizations
+for mathematical functions. It also provides an machine-independent
+interface to select the best such procedures to use on a given system.")
+ (license license:gpl3+)))
+
+(define-public minicom
+ (package
+ (name "minicom")
+ (version "2.7.1")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://alioth.debian.org/frs/download.php/"
+ "file/4215/" name "-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1wa1l36fa4npd21xa9nz60yrqwkk5cq713fa3p5v0zk7g9mq6bsk"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:configure-flags '("--enable-lock-dir=/var/lock")
+ #:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'patch-lock-check
+ (lambda _
+ (substitute* "configure"
+ (("test -d [$]UUCPLOCK") "true"))
+ #t)))))
+ (inputs
+ `(("ncurses" ,ncurses)))
+ (home-page "https://alioth.debian.org/projects/minicom/")
+ (synopsis "Serial terminal emulator")
+ (description "@code{minicom} is a serial terminal emulator.")
+ (license license:gpl2+)))
+
+(define-public harminv
+ (package
+ (name "harminv")
+ (version "1.4")
+ (source (origin
+ (method url-fetch)
+ (uri
+ (string-append
+ "http://ab-initio.mit.edu/harminv/harminv-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1pmm8d6fx9ahhnk7w12bfa6zx3afbkg4gkvlvgwhpjxbcrvrp3jk"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-before 'configure 'fix-tests
+ (lambda _
+ (substitute* "./sines-test.sh"
+ ; change test frequency range - default fails
+ (("0\\.15") "0.16"))
+ #t)))))
+ (native-inputs
+ `(("fortran" ,gfortran)))
+ (inputs
+ `(("lapack" ,lapack)))
+ (home-page "http://ab-initio.mit.edu/wiki/index.php/Harminv")
+ (synopsis "Harmonic inversion solver")
+ (description
+ "Harminv is a free program (and accompanying library) to solve the problem of
+harmonic inversion — given a discrete-time, finite-length signal that consists of a sum
+of finitely-many sinusoids (possibly exponentially decaying) in a given bandwidth, it
+determines the frequencies, decay constants, amplitudes, and phases of those sinusoids.")
+ (license license:gpl2+)))
+
+(define-public guile-libctl
+ (package
+ (name "guile-libctl")
+ (version "3.2.2")
+ (source (origin
+ (method url-fetch)
+ (uri
+ (string-append
+ "http://ab-initio.mit.edu/libctl/libctl-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1g7gqybq20jhdnw5vg18bgbj9jz0408gfmjvs8b4xs30pic8pgca"))))
+ (build-system gnu-build-system)
+ (native-inputs
+ `(("fortran" ,gfortran)))
+ (inputs
+ `(("guile" ,guile-2.2)))
+ (home-page "http://ab-initio.mit.edu/wiki/index.php/Libctl")
+ (synopsis "Flexible control files implementation for scientific simulations")
+ (description
+ "Libctl is a Guile-based library implementing flexible control files
+for scientific simulations.")
+ (license license:gpl2+)))
+
+(define-public mpb
+ (package
+ (name "mpb")
+ (version "1.5")
+ (source (origin
+ (method url-fetch)
+ (uri
+ (string-append
+ "http://ab-initio.mit.edu/mpb/mpb-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "1mqb2d8jq957nksayjygq58iy8i42vjryzg9iy5fpfay31wzxsix"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:configure-flags
+ (list (string-append "--with-libctl="
+ (assoc-ref %build-inputs "libctl")
+ "/share/libctl"))))
+ (native-inputs
+ `(("fortran" ,gfortran)
+ ("pkg-config" ,pkg-config)
+ ("swig" ,swig)))
+ (inputs
+ `(("fftw" ,fftw)
+ ("gsl" ,gsl)
+ ("guile" ,guile-2.2)
+ ("hdf5" ,hdf5)
+ ("lapack" ,lapack)
+ ("libctl" ,guile-libctl)
+ ("readline" ,readline)
+ ("zlib" ,zlib)))
+ (home-page "http://ab-initio.mit.edu/wiki/index.php/MIT_Photonic_Bands")
+ (synopsis "Computes band structures and electromagnetic modes of dielectric
+structures")
+ (description
+ "MIT Photonic-Bands (MPB) computes definite-frequency eigenstates (harmonic modes)
+of Maxwell's equations in periodic dielectric structures for arbitrary wavevectors, using
+fully-vectorial and three-dimensional methods.")
+ (license license:gpl2+)))
+
+(define-public meep
+ (package
+ (name "meep")
+ (version "1.3")
+ (source (origin
+ (method url-fetch)
+ (uri
+ (string-append
+ "http://ab-initio.mit.edu/meep/meep-"
+ version ".tar.gz"))
+ (sha256
+ (base32
+ "0f6lbw2hrksg7xscwdqs78jc9nmzx9fs8j0hz1y4i8qknkqiyk2n"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:configure-flags
+ (list (string-append "--with-libctl="
+ (assoc-ref %build-inputs "libctl")
+ "/share/libctl"))))
+ (native-inputs
+ `(("fortran" ,gfortran)
+ ("pkg-config" ,pkg-config)
+ ("swig" ,swig)))
+ (inputs
+ `(("fftw" ,fftw)
+ ("gsl" ,gsl)
+ ("guile" ,guile-2.0) ; doesn't build with guile-2.2
+ ("harminv" ,harminv)
+ ("hdf5" ,hdf5)
+ ("lapack" ,lapack)
+ ("libctl" ,guile-libctl)
+ ("mpb" ,mpb)
+ ("zlib" ,zlib)))
+ (home-page "http://ab-initio.mit.edu/wiki/index.php/Meep")
+ (synopsis "Finite-difference time-domain (FDTD) simulation software")
+ (description
+ "Meep is a finite-difference time-domain (FDTD) simulation software package
+developed at MIT to model electromagnetic systems.")
+ (license license:gpl2+)))
+
+(define-public adms
+ (package
+ (name "adms")
+ (version "2.3.6")
+ (source (origin
+ (method url-fetch)
+ (uri
+ (string-append
+ "mirror://sourceforge/mot-adms/adms-source/"
+ (version-major+minor version) "/adms-" version ".tar.gz"))
+ (sha256
+ (base32
+ "1rn98l6jxcjhi6ai5f7p588khra9z80m0m0lql4n4sb7773fh1vk"))))
+ (build-system gnu-build-system)
+ (native-inputs
+ `(("flex" ,flex)
+ ("bison" ,bison)))
+ (home-page "https://sourceforge.net/projects/mot-adms")
+ (synopsis "Automatic device model synthesizer")
+ (description
+ "ADMS is a code generator that converts electrical compact device models
+specified in high-level description language into ready-to-compile C code for
+the API of spice simulators. Based on transformations specified in XML
+language, ADMS transforms Verilog-AMS code into other target languages.")
+ (license license:gpl3)))
+
+(define-public capstone
+ (package
+ (name "capstone")
+ (version "3.0.5-rc2")
+ (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"))
+ (sha256
+ (base32
+ "1cqms9r2p43aiwp5spd84zaccp16ih03r7sjhrv16nddahj0jz2q"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:tests? #f
+ #:make-flags (list (string-append "PREFIX=" %output)
+ "CC=gcc")
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'configure)
+ ;; cstool's Makefile overrides LDFLAGS, so we cannot pass it as a make flag.
+ (add-before 'build 'fix-cstool-ldflags
+ (lambda* (#:key outputs #:allow-other-keys)
+ (substitute* "cstool/Makefile"
+ (("LDFLAGS =")
+ (string-append "LDFLAGS = -Wl,-rpath=" (assoc-ref outputs "out")
+ "/lib")))
+ #t)))))
+ (home-page "http://www.capstone-engine.org")
+ (synopsis "Lightweight multi-platform, multi-architecture disassembly framework")
+ (description
+ "Capstone is a lightweight multi-platform, multi-architecture disassembly
+framework. Capstone can disassemble machine code for many supported architectures
+such as x86, x86_64, arm, arm64, mips, ppc, sparc, sysz and xcore. It provides
+bindings for Python, Java, OCaml and more.")
+ (license license:bsd-3)))
+
+;; FIXME: This package has a timestamp embedded in
+;; lib/python3.5/site-packages/capstone/__pycache__/__iti__.cpython-35.pyc
+(define-public python-capstone
+ (package
+ (inherit capstone)
+ (name "python-capstone")
+ (propagated-inputs
+ `(("capstone" ,capstone)))
+ (build-system python-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'chdir-and-fix-setup-py
+ (lambda _
+ (chdir "bindings/python")
+ ;; Do not build the library again, because we already have it.
+ (substitute* "setup.py" ((".* build_libraries.*") ""))
+ ;; This substitution tells python-capstone where to find the
+ ;; library.
+ (substitute* "capstone/__init__.py"
+ (("pkg_resources.resource_filename.*")
+ (string-append "'" (assoc-ref %build-inputs "capstone") "/lib',\n")))
+ #t)))))))
+
+(define-public python2-capstone
+ (package-with-python2 python-capstone))