gnu: pipewalker: Update source URI.
[jackhill/guix/guix.git] / gnu / packages / engineering.scm
CommitLineData
ffb010b5 1;;; GNU Guix --- Functional package management for GNU
afb54fd1 2;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
93094501 3;;; Copyright © 2015 Federico Beffa <beffa@fbengineering.ch>
aa5fadaf 4;;; Copyright © 2016, 2018, 2020 Efraim Flashner <efraim@flashner.co.il>
0de98139 5;;; Copyright © 2016 David Thompson <davet@gnu.org>
8d564b8b 6;;; Copyright © 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
4f12a62d 7;;; Copyright © 2016, 2017, 2018 Theodoros Foradis <theodoros@foradis.org>
6febda94 8;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
7aed885e 9;;; Copyright © 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
7c1445f8 10;;; Copyright © 2018 Clément Lassieur <clement@lassieur.org>
1618c6fe 11;;; Copyright © 2018, 2019 Jonathan Brielmaier <jonathan.brielmaier@web.de>
356b32b9 12;;; Copyright © 2018, 2019 Arun Isaac <arunisaac@systemreboot.net>
6f8ade6e 13;;; Copyright © 2019 Tim Stahel <swedneck@swedneck.xyz>
5cded306 14;;; Copyright © 2019 Jovany Leandro G.C <bit4bit@riseup.net>
2c0040ae 15;;; Copyright © 2019 Steve Sprang <scs@stevesprang.com>
2895a87f 16;;; Copyright © 2019 John Soo <jsoo1@asu.edu>
259e65aa 17;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
0b43ecb0 18;;; Copyright © 2020 Vincent Legoll <vincent.legoll@gmail.com>
1a044e39 19;;; Copyright © 2020 Marius Bakke <mbakke@fastmail.com>
e3c3fb1d 20;;; Copyright © 2020 Ekaitz Zarraga <ekaitz@elenq.tech>
512d23c6 21;;; Copyright © 2020 B. Wilson <elaexuotee@wilsonb.com>
07d859cc 22;;; Copyright © 2020 Vinicius Monego <monego@posteo.net>
de4705d9 23;;; Copyright © 2020 Morgan Smith <Morgan.J.Smith@outlook.com>
ffb010b5
RW
24;;;
25;;; This file is part of GNU Guix.
26;;;
27;;; GNU Guix is free software; you can redistribute it and/or modify it
28;;; under the terms of the GNU General Public License as published by
29;;; the Free Software Foundation; either version 3 of the License, or (at
30;;; your option) any later version.
31;;;
32;;; GNU Guix is distributed in the hope that it will be useful, but
33;;; WITHOUT ANY WARRANTY; without even the implied warranty of
34;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
35;;; GNU General Public License for more details.
36;;;
37;;; You should have received a copy of the GNU General Public License
38;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
39
40fbd52a 40(define-module (gnu packages engineering)
ffb010b5
RW
41 #:use-module (guix packages)
42 #:use-module (guix download)
93094501 43 #:use-module (guix gexp)
ffb010b5 44 #:use-module (guix git-download)
e3c3fb1d 45 #:use-module (guix svn-download)
93094501
FB
46 #:use-module (guix monads)
47 #:use-module (guix store)
412726ee 48 #:use-module (guix utils)
91cabd3e 49 #:use-module ((srfi srfi-1) #:hide (zip))
ffb010b5 50 #:use-module ((guix licenses) #:prefix license:)
847768b9 51 #:use-module (guix build-system ant)
befc9ff6 52 #:use-module (guix build-system cmake)
ffb010b5 53 #:use-module (guix build-system gnu)
f70be011 54 #:use-module (guix build-system python)
25b99921 55 #:use-module (guix build-system qt)
ffb010b5 56 #:use-module (gnu packages)
4534d85e 57 #:use-module (gnu packages algebra)
95283f3f 58 #:use-module (gnu packages autotools)
5699a3cf 59 #:use-module (gnu packages base)
512d23c6 60 #:use-module (gnu packages bdw-gc)
20500662 61 #:use-module (gnu packages bison)
ffb010b5 62 #:use-module (gnu packages boost)
4534d85e 63 #:use-module (gnu packages check)
2003e837 64 #:use-module (gnu packages cmake)
d3f95898 65 #:use-module (gnu packages commencement)
93094501 66 #:use-module (gnu packages compression)
befc9ff6 67 #:use-module (gnu packages curl)
512d23c6 68 #:use-module (gnu packages dejagnu)
ecc8cd98 69 #:use-module (gnu packages digest)
4cd9de60 70 #:use-module (gnu packages documentation)
20500662 71 #:use-module (gnu packages flex)
ffb010b5 72 #:use-module (gnu packages fontutils)
c31b61ef 73 #:use-module (gnu packages fpga)
324b0040 74 #:use-module (gnu packages freedesktop)
1251c664 75 #:use-module (gnu packages gcc)
20500662 76 #:use-module (gnu packages gd)
95283f3f 77 #:use-module (gnu packages gettext)
93094501 78 #:use-module (gnu packages ghostscript)
20500662 79 #:use-module (gnu packages gl)
412726ee
RW
80 #:use-module (gnu packages glib)
81 #:use-module (gnu packages gnome)
c31b61ef 82 #:use-module (gnu packages gperf)
2316ce51 83 #:use-module (gnu packages graphics)
4cd9de60 84 #:use-module (gnu packages graphviz)
1ca54999 85 #:use-module (gnu packages groff)
412726ee
RW
86 #:use-module (gnu packages gtk)
87 #:use-module (gnu packages guile)
4534d85e 88 #:use-module (gnu packages image)
4cd9de60 89 #:use-module (gnu packages image-processing)
e981ca36 90 #:use-module (gnu packages imagemagick)
ecc8cd98 91 #:use-module (gnu packages libevent)
38cf2ba0 92 #:use-module (gnu packages linux) ;FIXME: for pcb
512d23c6 93 #:use-module (gnu packages lisp)
0de98139 94 #:use-module (gnu packages m4)
ffb010b5 95 #:use-module (gnu packages maths)
512d23c6 96 #:use-module (gnu packages man)
44669577 97 #:use-module (gnu packages multiprecision)
a6edcfaf 98 #:use-module (gnu packages mpi)
f37f949d 99 #:use-module (gnu packages ncurses)
07d859cc
VM
100 #:use-module (gnu packages parallel)
101 #:use-module (gnu packages pcre)
412726ee 102 #:use-module (gnu packages perl)
ffb010b5 103 #:use-module (gnu packages pkg-config)
befc9ff6 104 #:use-module (gnu packages python)
44d10b1f 105 #:use-module (gnu packages python-xyz)
ffb010b5 106 #:use-module (gnu packages qt)
5e872d4b 107 #:use-module (gnu packages readline)
befc9ff6 108 #:use-module (gnu packages swig)
4cd9de60 109 #:use-module (gnu packages tbb)
20500662 110 #:use-module (gnu packages tcl)
1ca54999 111 #:use-module (gnu packages texinfo)
befc9ff6 112 #:use-module (gnu packages tls)
8f9ac901 113 #:use-module (gnu packages tex)
7cdc7e57 114 #:use-module (gnu packages version-control)
512d23c6 115 #:use-module (gnu packages web)
befc9ff6 116 #:use-module (gnu packages wxwidgets)
2316ce51 117 #:use-module (gnu packages xml)
2c74e870 118 #:use-module (gnu packages openkinect)
44669577 119 #:use-module (gnu packages xorg))
ffb010b5
RW
120
121(define-public librecad
122 (package
123 (name "librecad")
6e9d5d5f 124 (version "2.1.3")
ffb010b5
RW
125 (source (origin
126 (method url-fetch)
127 (uri (string-append
128 "https://github.com/LibreCAD/LibreCAD/archive/"
129 version ".tar.gz"))
d8a4b932 130 (file-name (string-append name "-" version ".tar.gz"))
ffb010b5
RW
131 (sha256
132 (base32
6e9d5d5f 133 "01nvc1g3si05r5np1pzn62ah9w84p8nxa32wqrjh6gdi17jfvi3l"))))
ffb010b5
RW
134 (build-system gnu-build-system)
135 (arguments
136 '(#:phases
d694230a 137 (modify-phases %standard-phases
7e3aca2b
RW
138 ;; Without this patch boost complains that "make_array" is not a
139 ;; member of "boost::serialization".
140 (add-after 'unpack 'patch-boost-error
141 (lambda _
142 (substitute* "librecad/src/lib/math/lc_quadratic.h"
143 (("#include \"rs_vector.h\"" line)
144 (string-append line
145 "\n#include <boost/serialization/array_wrapper.hpp>")))
146 (substitute* "librecad/src/lib/math/rs_math.cpp"
147 (("#include <boost/numeric/ublas/matrix.hpp>" line)
148 (string-append "#include <boost/serialization/array_wrapper.hpp>\n"
149 line)))
150 #t))
6cedd611
CL
151 ;; Fix build against Qt 5.11.
152 (add-after 'unpack 'add-missing-headers
153 (lambda _
154 (substitute* "librecad/src/ui/generic/widgetcreator.cpp"
155 (("#include <QPushButton>") "#include <QPushButton>
156#include <QActionGroup>"))
157 #t))
7e3aca2b
RW
158 (add-after 'unpack 'patch-paths
159 (lambda* (#:key outputs #:allow-other-keys)
160 (let ((out (assoc-ref outputs "out")))
161 (substitute* "librecad/src/lib/engine/rs_system.cpp"
162 (("/usr/share") (string-append out "/share"))))))
163 (replace 'configure
164 (lambda* (#:key inputs #:allow-other-keys)
165 (system* "qmake" (string-append "BOOST_DIR="
166 (assoc-ref inputs "boost")))))
167 (replace 'install
168 (lambda* (#:key outputs #:allow-other-keys)
169 (let* ((out (assoc-ref outputs "out"))
170 (bin (string-append out "/bin"))
171 (share (string-append out "/share/librecad")))
172 (mkdir-p bin)
173 (install-file "unix/librecad" bin)
174 (mkdir-p share)
175 (copy-recursively "unix/resources" share))
9cc51d16
RW
176 #t))
177 ;; Ensure that icons are found at runtime
178 (add-after 'install 'wrap-executable
179 (lambda* (#:key inputs outputs #:allow-other-keys)
180 (let* ((out (assoc-ref outputs "out"))
181 (qt '("qtbase" "qtsvg")))
182 (wrap-program (string-append out "/bin/librecad")
183 `("QT_PLUGIN_PATH" ":" prefix
184 ,(map (lambda (label)
185 (string-append (assoc-ref inputs label)
186 "/lib/qt5/plugins/"))
187 qt)))
188 #t))))))
ffb010b5
RW
189 (inputs
190 `(("boost" ,boost)
191 ("muparser" ,muparser)
192 ("freetype" ,freetype)
9fdda0b2
RW
193 ("qtbase" ,qtbase)
194 ("qtsvg" ,qtsvg)))
ffb010b5
RW
195 (native-inputs
196 `(("pkg-config" ,pkg-config)
197 ("which" ,which)))
6a0d1bd3 198 (home-page "https://librecad.org/")
ffb010b5
RW
199 (synopsis "Computer-aided design (CAD) application")
200 (description
201 "LibreCAD is a 2D Computer-aided design (CAD) application for creating
202plans and designs.")
203 (license license:gpl2)))
412726ee
RW
204
205(define-public geda-gaf
206 (package
207 (name "geda-gaf")
1101c73c 208 (version "1.10.0")
412726ee
RW
209 (source (origin
210 (method url-fetch)
211 (uri (string-append
1101c73c 212 "http://ftp.geda-project.org/geda-gaf/stable/v"
412726ee
RW
213 (version-major+minor version) "/"
214 version "/geda-gaf-" version ".tar.gz"))
215 (sha256
216 (base32
1101c73c 217 "06ivgarvwbzjz2wigxzzkm8iszldi2p6x3a6jnlczjyrz4csddsy"))))
412726ee
RW
218 (build-system gnu-build-system)
219 (arguments
220 '(#:phases
2352c97d
RW
221 (modify-phases %standard-phases
222 ;; tests require a writable HOME
223 (add-before 'check 'set-home
224 (lambda _
225 (setenv "HOME" (getenv "TMPDIR"))
a01d926f 226 #t))
a01d926f
RW
227 (add-after 'unpack 'disable-failing-tests
228 (lambda _
1101c73c
RW
229 (substitute* "xorn/tests/Makefile.in"
230 (("-Werror") ""))
231 ;; This test returns its correct result in an unexpected order.
232 (substitute* "libgeda/scheme/unit-tests/t0402-config.scm"
233 (("\\(begin-config-test 'config-keys" m)
234 (string-append "#;" m)))
2352c97d 235 #t)))
0de98139
DT
236 #:configure-flags
237 (let ((pcb (assoc-ref %build-inputs "pcb")))
238 (list (string-append "--with-pcb-datadir=" pcb "/share")
239 (string-append "--with-pcb-lib-path="
240 pcb "/share/pcb/pcblib-newlib:"
241 pcb "/share/pcb/newlib")))))
412726ee 242 (inputs
1101c73c
RW
243 `(("gamin" ,gamin)
244 ("glib" ,glib)
412726ee
RW
245 ("gtk" ,gtk+-2)
246 ("guile" ,guile-2.0)
0de98139
DT
247 ("shared-mime-info" ,shared-mime-info)
248 ("m4" ,m4)
1101c73c
RW
249 ("pcb" ,pcb)
250 ("python" ,python-2))) ; for xorn
412726ee
RW
251 (native-inputs
252 `(("pkg-config" ,pkg-config)
0b43ecb0 253 ("desktop-file-utils" ,desktop-file-utils)
412726ee
RW
254 ("perl" ,perl))) ; for tests
255 (home-page "http://geda-project.org/")
256 (synopsis "Schematic capture, netlister, symbols, symbol checker, and utils")
257 (description
a124bbd2 258 "Gaf stands for “gschem and friends”. It is a subset of the entire tool
412726ee
RW
259suite grouped together under the gEDA name. gEDA/gaf is a collection of tools
260which currently includes: gschem, a schematic capture program; gnetlist, a
261netlist generation program; gsymcheck, a syntax checker for schematic symbols;
262gattrib, a spreadsheet programm that manipulates the properties of symbols of
263a schematic; libgeda, libraries for gschem gnetlist and gsymcheck; gsch2pcb, a
264tool to forward annotation from your schematic to layout using PCB; some minor
265utilities.")
266 (license license:gpl2+)))
267
1ca54999
LC
268(define-public lepton-eda
269 ;; This is a fork of gEDA/gaf started in late 2016. One of its goal is to
270 ;; keep and to extend Guile support.
271 (package
272 (inherit geda-gaf)
273 (name "lepton-eda")
28cbf3ef 274 (version "1.9.11-20200604")
1ca54999
LC
275 (home-page "https://github.com/lepton-eda/lepton-eda")
276 (source (origin
277 (method git-fetch)
278 (uri (git-reference (url home-page) (commit version)))
279 (sha256
280 (base32
28cbf3ef 281 "091y8h7wcr9smwhb1wf12sj27n5jrannbj3y6qq3q2gwiifiz8sd"))
1ca54999
LC
282 (file-name (git-file-name name version))))
283 (native-inputs
284 `(("autoconf" ,autoconf)
285 ("automake" ,automake)
91f92fc2 286 ("desktop-file-utils" ,desktop-file-utils)
1ca54999 287 ("libtool" ,libtool)
f2d97d57 288 ("gettext" ,gettext-minimal)
1ca54999
LC
289 ("texinfo" ,texinfo)
290 ("groff" ,groff)
291 ("which" ,which)
292 ,@(package-native-inputs geda-gaf)))
ef0ef831
RW
293 (inputs
294 `(("glib" ,glib)
295 ("gtk" ,gtk+-2)
296 ("guile" ,guile-2.2)
ef0ef831
RW
297 ("shared-mime-info" ,shared-mime-info)
298 ("m4" ,m4)
299 ("pcb" ,pcb)))
1ca54999
LC
300 (arguments
301 (substitute-keyword-arguments (package-arguments geda-gaf)
302 ((#:configure-flags flags ''())
303 ;; When running "make", the POT files are built with the build time as
304 ;; their "POT-Creation-Date". Later on, "make" notices that .pot
305 ;; files were updated and goes on to run "msgmerge"; as a result, the
306 ;; non-deterministic POT-Creation-Date finds its way into .po files,
307 ;; and then in .gmo files. To avoid that, simply make sure 'msgmerge'
308 ;; never runs. See <https://bugs.debian.org/792687>.
309 `(cons "ac_cv_path_MSGMERGE=true" ,flags))
310 ((#:phases phases '%standard-phases)
afb54fd1 311 `(modify-phases %standard-phases
1ca54999
LC
312 (add-before 'bootstrap 'prepare
313 (lambda _
314 ;; Some of the scripts there are invoked by autogen.sh.
315 (for-each patch-shebang (find-files "build-tools"))
316
317 ;; Make sure 'msgmerge' can modify the PO files.
318 (for-each (lambda (po)
319 (chmod po #o666))
320 (find-files "." "\\.po$"))
321
322 ;; This would normally be created by invoking 'git', but it
323 ;; doesn't work here.
324 (call-with-output-file "version.h"
325 (lambda (port)
326 (format port "#define PACKAGE_DATE_VERSION \"~a\"~%"
327 ,(string-drop version
328 (+ 1 (string-index version #\-))))
329 (format port "#define PACKAGE_DOTTED_VERSION \"~a\"~%"
330 ,(string-take version
331 (string-index version #\-)))
332 (format port "#define PACKAGE_GIT_COMMIT \"cabbag3\"~%")))
ef0ef831
RW
333 #t))
334 (add-after 'install 'compile-scheme-files
335 (lambda* (#:key outputs #:allow-other-keys)
336 (invoke "make" "precompile")
337 (for-each (lambda (program)
338 (wrap-program program
339 `("GUILE_LOAD_COMPILED_PATH" ":" prefix
340 (,(string-append (assoc-ref outputs "out")
341 "/share/lepton-eda/ccache/")))))
342 (find-files (string-append (assoc-ref outputs "out") "/bin")
343 ".*"))
1ca54999
LC
344 #t))))))
345 (description
346 "Lepton EDA ia an @dfn{electronic design automation} (EDA) tool set
347forked from gEDA/gaf in late 2016. EDA tools are used for electrical circuit
348design, schematic capture, simulation, prototyping, and production. Lepton
349EDA includes tools for schematic capture, attribute management, bill of
350materials (BOM) generation, netlisting into over 20 netlist formats, analog
351and digital simulation, and printed circuit board (PCB) layout, and many other
352features.")))
353
20500662
RW
354(define-public pcb
355 (package
356 (name "pcb")
88fb1562 357 (version "4.0.2")
20500662
RW
358 (source (origin
359 (method url-fetch)
e981ca36
RW
360 (uri (string-append "mirror://sourceforge/pcb/pcb/pcb-" version
361 "/pcb-" version ".tar.gz"))
20500662
RW
362 (sha256
363 (base32
88fb1562 364 "1a7rilp75faidny0r4fdwdxkflyrqp6svxv9lbg7h868293962iz"))))
20500662
RW
365 (build-system gnu-build-system)
366 (arguments
367 `(#:phases
dc1d3cde
KK
368 (modify-phases %standard-phases
369 (add-after 'unpack 'use-wish8.6
370 (lambda _
371 (substitute* "configure"
372 (("wish85") "wish8.6"))
373 #t))
88fb1562
RW
374 ;; It checks for "xhost", which we don't have. This shouldn't
375 ;; matter, because the test is supposed to be skipped, but it causes
376 ;; "run_tests.sh" (and thus the "check" phase) to fail.
377 (add-after 'unpack 'fix-check-for-display
378 (lambda _
379 (substitute* "tests/run_tests.sh"
380 (("have_display=no") "have_display=yes"))
381 #t))
dc1d3cde
KK
382 (add-after 'install 'wrap
383 (lambda* (#:key inputs outputs #:allow-other-keys)
384 ;; FIXME: Mesa tries to dlopen libudev.so.0 and fails. Pending a
385 ;; fix of the mesa package we wrap the pcb executable such that
386 ;; Mesa can find libudev.so.0 through LD_LIBRARY_PATH.
387 (let* ((out (assoc-ref outputs "out"))
388 (path (string-append (assoc-ref inputs "udev") "/lib")))
389 (wrap-program (string-append out "/bin/pcb")
390 `("LD_LIBRARY_PATH" ":" prefix (,path))))
391 #t))
392 (add-before 'check 'pre-check
393 (lambda _
394 (system "Xvfb :1 &")
395 (setenv "DISPLAY" ":1")
396 #t)))))
20500662
RW
397 (inputs
398 `(("dbus" ,dbus)
399 ("mesa" ,mesa)
400 ("udev" ,eudev) ;FIXME: required by mesa
401 ("glu" ,glu)
402 ("gd" ,gd)
403 ("gtk" ,gtk+-2)
404 ("gtkglext" ,gtkglext)
20500662
RW
405 ("shared-mime-info" ,shared-mime-info)
406 ("tk" ,tk)))
407 (native-inputs
408 `(("pkg-config" ,pkg-config)
409 ("intltool" ,intltool)
410 ("bison" ,bison)
465734ba 411 ("desktop-file-utils" ,desktop-file-utils)
e981ca36
RW
412 ("flex" ,flex)
413 ;; For tests
414 ("imagemagick" ,imagemagick)
415 ("gerbv" ,gerbv)
416 ("ghostscript" ,ghostscript)
ff337525 417 ("xvfb" ,xorg-server-for-tests)))
20500662
RW
418 (home-page "http://pcb.geda-project.org/")
419 (synopsis "Design printed circuit board layouts")
420 (description
421 "GNU PCB is an interactive tool for editing printed circuit board
422layouts. It features a rats-nest implementation, schematic/netlist import,
423and design rule checking. It also includes an autorouter and a trace
424optimizer; and it can produce photorealistic and design review images.")
425 (license license:gpl2+)))
93094501 426
49c2665f
RW
427(define-public pcb-rnd
428 (package (inherit pcb)
429 (name "pcb-rnd")
874d2bc9 430 (version "2.2.4")
49c2665f
RW
431 (source (origin
432 (method url-fetch)
433 (uri (string-append "http://repo.hu/projects/pcb-rnd/releases/"
434 "pcb-rnd-" version ".tar.gz"))
435 (sha256
436 (base32
874d2bc9 437 "06ylc2rd4yvzp3krk62q9dbi13h0yq1x257fbjkh10vfjn0ga5c2"))))
49c2665f 438 (arguments
874d2bc9 439 `(#:tests? #f ; no check target
49c2665f
RW
440 #:phases
441 (modify-phases %standard-phases
442 (add-after 'unpack 'cc-is-gcc
443 (lambda _ (setenv "CC" "gcc") #t))
444 (replace 'configure
445 ;; The configure script doesn't tolerate most of our configure flags.
446 (lambda* (#:key outputs #:allow-other-keys)
a8416e69
RW
447 (invoke "sh" "configure"
448 (string-append "--prefix="
449 (assoc-ref outputs "out"))))))))
49c2665f
RW
450 (home-page "http://repo.hu/projects/pcb-rnd/")
451 (description "PCB RND is a fork of the GNU PCB circuit board editing tool
452featuring various improvements and bug fixes.")))
453
93094501
FB
454(define-public fastcap
455 (package
456 (name "fastcap")
457 (version "2.0-18Sep92")
458 (source (origin
95001d4b 459 (method url-fetch/tarbomb)
93094501
FB
460 (uri (string-append "http://www.rle.mit.edu/cpg/codes/"
461 name "-" version ".tgz"))
462 (sha256
463 (base32
464 "0x37vfp6k0d2z3gnig0hbicvi0jp8v267xjnn3z8jdllpiaa6p3k"))
3dac53be
FB
465 (snippet
466 ;; Remove a non-free file.
6cbee49d
MW
467 '(begin
468 (delete-file "doc/psfig.sty")
469 #t))
fc1adab1
AK
470 (patches (search-patches "fastcap-mulSetup.patch"
471 "fastcap-mulGlobal.patch"))))
93094501
FB
472 (build-system gnu-build-system)
473 (native-inputs
697e341e
RW
474 ;; FIXME: with texlive-tiny citation references are rendered as question
475 ;; marks. During the build warnings like these are printed:
476 ;; LaTeX Warning: Citation `nabors91' on page 2 undefined on input line 3.
5a23696a 477 `(("texlive" ,(texlive-union (list texlive-fonts-amsfonts)))
fb0b9ff1 478 ("ghostscript" ,ghostscript)))
93094501
FB
479 (arguments
480 `(#:make-flags '("CC=gcc" "RM=rm" "SHELL=sh" "all")
481 #:parallel-build? #f
482 #:tests? #f ;; no tests-suite
483 #:modules ((srfi srfi-1)
484 ,@%gnu-build-system-modules)
485 #:phases
486 (modify-phases %standard-phases
487 (add-after 'build 'make-doc
697e341e 488 (lambda _
5a23696a 489 (invoke "make" "CC=gcc" "RM=rm" "SHELL=sh" "manual")))
93094501 490 (add-before 'make-doc 'fix-doc
697e341e
RW
491 (lambda _
492 (substitute* "doc/Makefile" (("/bin/rm") (which "rm")))
493 (substitute* (find-files "doc" "\\.tex")
494 (("\\\\special\\{psfile=([^,]*),.*scale=([#0-9.]*).*\\}"
495 all file scale)
496 (string-append "\\includegraphics[scale=" scale "]{"
497 file "}"))
498 (("\\\\psfig\\{figure=([^,]*),.*width=([#0-9.]*in).*\\}"
499 all file width)
500 (string-append "\\includegraphics[width=" width "]{"
501 file "}"))
502 (("\\\\psfig\\{figure=([^,]*),.*height=([#0-9.]*in).*\\}"
503 all file height)
504 (string-append "\\includegraphics[height=" height "]{"
505 file "}"))
506 (("\\\\psfig\\{figure=([^,]*)\\}" all file)
507 (string-append "\\includegraphics{" file "}")))
508 (substitute* '("doc/mtt.tex" "doc/tcad.tex" "doc/ug.tex")
509 (("^\\\\documentstyle\\[(.*)\\]\\{(.*)\\}"
510 all options class)
511 (string-append "\\documentclass[" options "]{"
512 class "}\n"
513 "\\usepackage{graphicx}\n"
514 "\\usepackage{robinspace}"))
515 (("\\\\setlength\\{\\\\footheight\\}\\{.*\\}" all)
516 (string-append "%" all))
517 (("\\\\setstretch\\{.*\\}" all)
518 (string-append "%" all)))
519 #t))
93094501
FB
520 (delete 'configure)
521 (add-before 'install 'clean-bin
697e341e
RW
522 (lambda _
523 (delete-file (string-append (getcwd) "/bin/README"))
524 #t))
93094501 525 (add-before 'install 'make-pdf
697e341e
RW
526 (lambda _
527 (setenv "HOME" "/tmp") ; FIXME: for texlive font cache
528 (with-directory-excursion "doc"
529 (and
5a23696a
RW
530 (for-each (lambda (file)
531 (invoke "dvips" file "-o"))
532 (find-files "." "\\.dvi"))
533 (for-each (lambda (file)
534 (invoke "ps2pdf" file))
535 '("mtt.ps" "ug.ps" "tcad.ps"))
536 (invoke "make" "clean")))))
93094501 537 (replace 'install
697e341e
RW
538 (lambda* (#:key outputs #:allow-other-keys)
539 (let* ((out (assoc-ref outputs "out"))
540 (data (string-append out "/share"))
541 (bin (string-append out "/bin"))
542 (doc (string-append data "/doc/" ,name "-" ,version))
543 (examples (string-append doc "/examples")))
544 (with-directory-excursion "bin"
545 (for-each (lambda (f)
546 (install-file f bin))
547 (find-files "." ".*")))
548 (copy-recursively "doc" doc)
549 (copy-recursively "examples" examples)
550 #t))))))
45a21ee4 551 (home-page "https://www.rle.mit.edu/cpg/research_codes.htm")
93094501
FB
552 (synopsis "Multipole-accelerated capacitance extraction program")
553 (description
554 "Fastcap is a capacitance extraction program based on a
555multipole-accelerated algorithm.")
556 (license (license:non-copyleft #f "See fastcap.c."))))
23bae7bb
FB
557
558(define-public fasthenry
559 (package
560 (name "fasthenry")
561 (version "3.0-12Nov96")
562 (source (origin
563 (method url-fetch)
564 (file-name (string-append name "-" version ".tar.gz"))
565 (uri (string-append
566 "http://www.rle.mit.edu/cpg/codes/" name
567 "-" version ".tar.z"))
568 (sha256
569 (base32 "1a06xyyd40zhknrkz17xppl2zd5ig4w9g1grc8qrs0zqqcl5hpzi"))
fc1adab1
AK
570 (patches (search-patches "fasthenry-spAllocate.patch"
571 "fasthenry-spBuild.patch"
572 "fasthenry-spUtils.patch"
573 "fasthenry-spSolve.patch"
574 "fasthenry-spFactor.patch"))))
23bae7bb
FB
575 (build-system gnu-build-system)
576 (arguments
577 `(#:make-flags '("CC=gcc" "RM=rm" "SHELL=sh" "all")
578 #:parallel-build? #f
579 #:tests? #f ;; no tests-suite
580 #:modules ((srfi srfi-1)
581 ,@%gnu-build-system-modules)
582 #:phases
583 (modify-phases %standard-phases
584 (delete 'configure)
585 (replace 'install
586 (lambda* (#:key outputs #:allow-other-keys)
587 (let* ((out (assoc-ref outputs "out"))
588 (data (string-append out "/share"))
589 (bin (string-append out "/bin"))
590 (doc (string-append data "/doc/" ,name "-" ,version))
591 (examples (string-append doc "/examples")))
592 (with-directory-excursion "bin"
96c46210
LC
593 (for-each (lambda (f)
594 (install-file f bin))
595 (find-files "." ".*")))
23bae7bb
FB
596 (copy-recursively "doc" doc)
597 (copy-recursively "examples" examples)
598 #t))))))
ebeaf280 599 (home-page "https://www.rle.mit.edu/cpg/research_codes.htm")
23bae7bb
FB
600 (synopsis "Multipole-accelerated inductance analysis program")
601 (description
602 "Fasthenry is an inductance extraction program based on a
603multipole-accelerated algorithm.")
604 (license (license:non-copyleft #f "See induct.c."))))
95283f3f 605
3d5fd240
RW
606(define-public fritzing
607 (package
608 (name "fritzing")
7cdc7e57 609 (version "0.9.3b")
3d5fd240 610 (source (origin
7cdc7e57
RW
611 (method git-fetch)
612 (uri (git-reference
b0e7b699 613 (url "https://github.com/fritzing/fritzing-app")
7cdc7e57
RW
614 (commit version)))
615 (file-name (git-file-name name version))
3d5fd240
RW
616 (sha256
617 (base32
7cdc7e57 618 "0hpyc550xfhr6gmnc85nq60w00rm0ljm0y744dp0z88ikl04f4s3"))))
3d5fd240
RW
619 (build-system gnu-build-system)
620 (arguments
621 `(#:phases
622 (modify-phases %standard-phases
623 (replace 'configure
624 (lambda* (#:key inputs outputs #:allow-other-keys)
7cdc7e57
RW
625 (copy-recursively (assoc-ref inputs "fritzing-parts-db")
626 "parts")
627 ;; Make compatible with libgit2 > 0.24
628 (substitute* "src/version/partschecker.cpp"
629 (("error = git_remote_connect\\(remote, GIT_DIRECTION_FETCH, &callbacks\\)")
630 "error = git_remote_connect(remote, GIT_DIRECTION_FETCH, &callbacks, NULL, NULL)"))
631
632 ;; Use system libgit2 and boost.
633 (substitute* "phoenix.pro"
634 (("^LIBGIT2INCLUDE =.*")
635 (string-append "LIBGIT2INCLUDE="
636 (assoc-ref inputs "libgit2") "/include\n"))
637 (("^ LIBGIT2LIB =.*")
638 (string-append " LIBGIT2LIB="
639 (assoc-ref inputs "libgit2") "/lib\n")))
640 ;; This file checks for old versions of Boost, insisting on
641 ;; having us download the boost sources and placing them in the
642 ;; build directory.
643 (substitute* "pri/utils.pri"
644 (("error\\(") "message("))
645
646 (let ((out (assoc-ref outputs "out")))
647 (invoke "qmake"
648 (string-append "QMAKE_LFLAGS_RPATH=-Wl,-rpath," out "/lib")
649 (string-append "PREFIX=" out)
650 "phoenix.pro")))))))
3d5fd240 651 (inputs
a2b99351
DC
652 `(("qtbase" ,qtbase)
653 ("qtserialport" ,qtserialport)
654 ("qtsvg" ,qtsvg)
7cdc7e57 655 ("libgit2" ,libgit2)
3d5fd240
RW
656 ("boost" ,boost)
657 ("zlib" ,zlib)
658 ("fritzing-parts-db"
659 ,(origin
7cdc7e57
RW
660 (method git-fetch)
661 (uri (git-reference
b0e7b699 662 (url "https://github.com/fritzing/fritzing-parts")
7cdc7e57
RW
663 (commit version)))
664 (file-name (git-file-name "fritzing-parts" version))
3d5fd240
RW
665 (sha256
666 (base32
7cdc7e57 667 "1d2v8k7p176j0lczx4vx9n9gbg3vw09n2c4b6w0wj5wqmifywhc1"))))))
cfff0b38 668 (home-page "https://fritzing.org")
3d5fd240
RW
669 (synopsis "Electronic circuit design")
670 (description
671 "The Fritzing application is @dfn{Electronic Design Automation} (EDA)
672software with a low entry barrier, suited for the needs of makers and
673hobbyists. It offers a unique real-life \"breadboard\" view, and a parts
674library with many commonly used high-level components. Fritzing makes it very
675easy to communicate about circuits, as well as to turn them into PCB layouts
676ready for production.")
677 ;; Documentation and parts are released under CC-BY-SA 3.0; source code is
678 ;; released under GPLv3+.
679 (license (list license:gpl3+ license:cc-by-sa3.0))))
680
95283f3f
RW
681(define-public gerbv
682 (package
683 (name "gerbv")
0b2db013 684 (version "2.7.0")
95283f3f
RW
685 (source (origin
686 (method url-fetch)
687 (uri (string-append "mirror://sourceforge/gerbv/gerbv/gerbv-"
688 version "/gerbv-" version ".tar.gz"))
689 (sha256
690 (base32
0b2db013 691 "1d2k43k7i4yvbpi4sw1263a8d0q98z2n7aqhmpinpkih8a681vn5"))))
95283f3f 692 (build-system gnu-build-system)
95283f3f 693 (native-inputs
0b2db013 694 `(("glib:bin" ,glib "bin") ; for glib-compile-schemas, etc.
9abc5863 695 ("desktop-file-utils" ,desktop-file-utils)
0b2db013 696 ("pkg-config" ,pkg-config)))
95283f3f
RW
697 (inputs
698 `(("cairo" ,cairo)
9abc5863 699 ("gtk" ,gtk+-2)))
95283f3f
RW
700 (home-page "http://gerbv.geda-project.org/")
701 (synopsis "Gerber file viewer")
702 (description
703 "Gerbv is a viewer for files in the Gerber format (RS-274X only), which
704is commonly used to represent printed circuit board (PCB) layouts. Gerbv lets
705you load several files on top of each other, do measurements on the displayed
706image, etc. Besides viewing Gerbers, you may also view Excellon drill files
707as well as pick-place files.")
708 (license license:gpl2+)))
4534d85e 709
847768b9
RW
710(define-public translate2geda
711 ;; There has been no formal release yet.
712 (let ((commit "4c19e7eefa338cea8f1ee999ea8b37f8d0698169")
713 (revision "1"))
714 (package
715 (name "translate2geda")
716 (version (git-version "0" revision commit))
717 (source (origin
718 (method git-fetch)
719 (uri (git-reference
b0e7b699 720 (url "https://github.com/erichVK5/translate2geda")
847768b9
RW
721 (commit commit)))
722 (file-name (git-file-name name version))
723 (sha256
724 (base32
725 "1h062bbpw8nk0jamkya1k4lsgaia796jyviiz2gkdi6k1bxhwgpa"))))
726 (build-system ant-build-system)
727 (arguments
728 `(#:tests? #f ; there are no tests
729 #:jar-name "translate2geda.jar"
730 #:source-dir "."
731 #:main-class "translate2geda"
732 #:phases
733 (modify-phases %standard-phases
734 (add-after 'install 'install-bin
735 (lambda* (#:key inputs outputs #:allow-other-keys)
736 (let* ((out (assoc-ref outputs "out"))
737 (bin (string-append out "/bin"))
738 (wrapper (string-append bin "/translate2geda")))
739 (mkdir-p bin)
740 (with-output-to-file wrapper
741 (lambda _
742 (format #t "#!/bin/sh~%exec ~a -jar ~a/share/java/translate2geda.jar"
743 (which "java") out)))
744 (chmod wrapper #o555))
745 #t)))))
746 (home-page "https://github.com/erichVK5/translate2geda")
747 (synopsis "Utility for converting symbol and footprint formats to gEDA")
748 (description
749 "This package provides a utility for converting Kicad (@file{.mod},
750@file{.lib}), Eagle (@file{.lbr}), gerber (@file{.gbr}, etc..),
751BXL (@file{.bxl}), IBIS (@file{.ibs}), symdef, LT-Spice (@file{.asc}),
752QUCS (@file{.sch}), and BSDL (@file{.bsd}) symbols and footprints and EggBot
753fonts to gEDA.")
754 (license license:gpl2+))))
755
28f4d56d 756(define-public libfive
6a0b9500
RW
757 (let ((commit "6e39254e57c179459bb929df49ae96a6017a0ed6")
758 (revision "3"))
4534d85e 759 (package
28f4d56d 760 (name "libfive")
007c75f5 761 (version (git-version "0" revision commit))
4534d85e
LC
762 (source (origin
763 (method git-fetch)
764 (uri (git-reference
28f4d56d 765 (url "https://github.com/libfive/libfive")
4534d85e
LC
766 (commit commit)))
767 (sha256
768 (base32
6a0b9500 769 "0ryv2hcbrwqc087w7rrs4a2irkcpmqync00g4dh8n7jn10w2jkim"))
d2ec1f8e 770 (file-name (git-file-name name version))))
4534d85e
LC
771 (build-system cmake-build-system)
772 (arguments
0818c01a 773 `(#:test-target "libfive-test"
4534d85e
LC
774 #:phases
775 (modify-phases %standard-phases
007c75f5
EB
776 (add-after 'unpack 'remove-native-compilation
777 (lambda _
778 (substitute* "CMakeLists.txt" (("-march=native") ""))
0818c01a 779 #t)))))
4534d85e
LC
780 (native-inputs
781 `(("pkg-config" ,pkg-config)))
782 (inputs
783 `(("boost" ,boost)
4534d85e 784 ("libpng" ,libpng)
28f4d56d 785 ("qtbase" ,qtbase)
4534d85e 786 ("eigen" ,eigen)
28f4d56d
RW
787 ("guile" ,guile-2.2)))
788 (home-page "https://libfive.com")
4534d85e
LC
789 (synopsis "Tool for programmatic computer-aided design")
790 (description
28f4d56d
RW
791 "Libfive is a tool for programmatic computer-aided design (CAD). In
792libfive, solid models are defined as Scheme scripts, and there are no opaque
793function calls into the geometry kernel: everything is visible to the user.
794Even fundamental, primitive shapes are represented as code in the user-level
4534d85e 795language.")
6a0b9500 796 (license (list license:mpl2.0 ;library
28f4d56d
RW
797 license:gpl2+))))) ;Guile bindings and GUI
798
ef897e9a
RW
799(define-public inspekt3d
800 (let ((commit "703f52ccbfedad2bf5240bf8183d1b573c9d54ef")
801 (revision "0"))
802 (package
803 (name "inspekt3d")
804 (version (git-version "0" revision commit))
805 (source (origin
806 (method git-fetch)
807 (uri (git-reference
808 (url "https://gitlab.com/kavalogic-inc/inspekt3d.git")
809 (commit commit)))
810 (file-name (git-file-name name version))
811 (sha256
812 (base32
813 "0lan6930g5a9z4ack9jj0zdd0mb2s6q2xzpiwcjdc3pvl9b1nbw4"))))
814 (build-system gnu-build-system)
815 (arguments
816 `(#:phases
817 (modify-phases %standard-phases
818 (add-after 'unpack 'patch-libfive-guile-location
819 (lambda* (#:key inputs #:allow-other-keys)
820 (substitute* "inspekt3d/library.scm"
821 (("\"libfive-guile")
822 (string-append "\""
823 (assoc-ref inputs "libfive")
824 "/lib/libfive-guile")))
825 #t)))))
826 (native-inputs
827 `(("autoconf" ,autoconf)
828 ("automake" ,automake)
829 ("pkg-config" ,pkg-config)))
830 (inputs
831 `(("mesa" ,mesa)
832 ("guile" ,guile-2.2)))
833 (propagated-inputs
834 `(("libfive" ,libfive)
835 ("guile-opengl" ,guile-opengl)))
836 (home-page "https://gitlab.com/kavalogic-inc/inspekt3d/")
837 (synopsis "Lightweight 3D viewer for Libfive written in Guile Scheme")
838 (description
839 "Inspekt3d is a lightweight 3D viewer for Libfive written in Guile Scheme.
840The viewer can be used interactively with a REPL (for example Geiser in
841Emacs).")
842 (license license:gpl3+))))
843
e7075353 844;; TODO Add doc https://gitlab.com/kicad/services/kicad-doc/-/tree/master
befc9ff6 845(define-public kicad
e7075353
BW
846 (package
847 (name "kicad")
0094c4fa 848 (version "5.1.6")
e7075353
BW
849 (source
850 (origin
0094c4fa
TGR
851 (method git-fetch)
852 (uri (git-reference
853 (url "https://gitlab.com/kicad/code/kicad.git")
854 (commit version)))
e7075353 855 (sha256
0094c4fa
TGR
856 (base32 "1pa3z0h0679jmgxlzc833h6q85b5paxdp69kf2h93vkaryj58622"))
857 (file-name (git-file-name name version))))
e7075353
BW
858 (build-system cmake-build-system)
859 (arguments
860 `(#:out-of-source? #t
861 #:tests? #f ; no tests
862 #:build-type "Release"
863 #:configure-flags
864 (list "-DKICAD_SCRIPTING_PYTHON3=ON"
865 "-DKICAD_SCRIPTING_WXPYTHON_PHOENIX=ON"
866 "-DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE")
867 #:phases
868 (modify-phases %standard-phases
869 (add-after 'install 'install-translations
870 (lambda* (#:key inputs outputs #:allow-other-keys)
cb014f64 871 (copy-recursively (assoc-ref inputs "kicad-i18n")
e7075353
BW
872 (assoc-ref outputs "out"))
873 #t))
874 (add-after 'install 'wrap-program
875 ;; Ensure correct Python at runtime.
876 (lambda* (#:key inputs outputs #:allow-other-keys)
877 (let* ((out (assoc-ref outputs "out"))
878 (python (assoc-ref inputs "python"))
879 (file (string-append out "/bin/kicad"))
880 (path (string-append
881 out
882 "/lib/python"
883 ,(version-major+minor
884 (package-version python))
885 "/site-packages:"
886 (getenv "PYTHONPATH"))))
887 (wrap-program file
888 `("PYTHONPATH" ":" prefix (,path))
889 `("PATH" ":" prefix
890 (,(string-append python "/bin:")))))
891 #t)))))
892 (native-search-paths
893 (list (search-path-specification
894 (variable "KICAD_TEMPLATE_DIR")
895 (files '("share/kicad/template")))
896 (search-path-specification
897 (variable "KICAD_SYMBOL_DIR") ; symbol path
898 (files '("share/kicad/library")))
899 (search-path-specification
900 (variable "KISYSMOD") ; footprint path
901 (files '("share/kicad/modules")))
902 (search-path-specification
903 (variable "KISYS3DMOD") ; 3D model path
904 (files '("share/kicad/modules/packages3d")))))
905 (native-inputs
906 `(("boost" ,boost)
907 ("desktop-file-utils" ,desktop-file-utils)
f2d97d57 908 ("gettext" ,gettext-minimal)
cb014f64 909 ("kicad-i18n" ,kicad-i18n)
e7075353
BW
910 ("pkg-config" ,pkg-config)
911 ("swig" ,swig)
912 ("zlib" ,zlib)))
913 (inputs
914 `(("cairo" ,cairo)
915 ("curl" ,curl)
916 ("glew" ,glew)
917 ("glm" ,glm)
918 ("hicolor-icon-theme" ,hicolor-icon-theme)
919 ("libngspice" ,libngspice)
920 ("libsm" ,libsm)
921 ("mesa" ,mesa)
922 ("opencascade-oce" ,opencascade-oce)
923 ("openssl" ,openssl)
924 ("python" ,python-wrapper)
925 ("wxwidgets" ,wxwidgets)
926 ("wxpython" ,python-wxpython)))
927 (home-page "https://kicad-pcb.org/")
928 (synopsis "Electronics Design Automation Suite")
929 (description "Kicad is a program for the formation of printed circuit
befc9ff6
TF
930boards and electrical circuits. The software has a number of programs that
931perform specific functions, for example, pcbnew (Editing PCB), eeschema (editing
932electrical diagrams), gerbview (viewing Gerber files) and others.")
e7075353 933 (license license:gpl3+)))
8f528bd4 934
cb014f64 935(define kicad-i18n
e7075353 936 (package
cb014f64 937 (name "kicad-i18n")
1c9403f6 938 (version (package-version kicad))
e7075353
BW
939 (source (origin
940 (method git-fetch)
941 (uri (git-reference
942 (url "https://gitlab.com/kicad/code/kicad-i18n.git")
943 (commit version)))
944 (file-name (git-file-name name version))
945 (sha256
946 (base32
02d1bc6b 947 "0qryi8xjm23ka363zfl7bbga0v5c31fr3d4nyxp3m168vkv9zhha"))))
e7075353
BW
948 (build-system cmake-build-system)
949 (arguments
950 `(#:phases
951 (modify-phases %standard-phases
952 (delete 'build)
953 (delete 'check))))
954 (native-inputs
f2d97d57 955 `(("gettext" ,gettext-minimal)))
1c9403f6 956 (home-page (package-home-page kicad))
e7075353
BW
957 (synopsis "KiCad GUI translations")
958 (description "This package contains the po files that are used for the GUI
959translations for KiCad.")
960 (license license:gpl3+)))
5f947808 961
cb014f64
TGR
962(define-public kicad-i18l
963 (deprecated-package "kicad-i18l" kicad-i18n))
964
47f9fb18
DM
965(define-public kicad-symbols
966 (package
967 (name "kicad-symbols")
1c9403f6 968 (version (package-version kicad))
47f9fb18
DM
969 (source (origin
970 (method git-fetch)
971 (uri (git-reference
b0e7b699 972 (url "https://github.com/KiCad/kicad-symbols")
47f9fb18 973 (commit version)))
a5544621 974 (file-name (git-file-name name version))
47f9fb18
DM
975 (sha256
976 (base32
3ef7c588 977 "12w3rdy085drlikkpb27n9ni7cyg9l0pqy7hnr86cxjcw3l5wcx6"))))
47f9fb18
DM
978 (build-system cmake-build-system)
979 (arguments
261e0356 980 `(#:tests? #f)) ; no tests exist
1c9403f6 981 (home-page (package-home-page kicad))
badc3c67 982 (synopsis "Official KiCad schematic symbol libraries")
47f9fb18 983 (description "This package contains the official KiCad schematic symbol
badc3c67 984libraries.")
261e0356
TGR
985 ;; TODO: Exception: "To the extent that the creation of electronic designs
986 ;; that use 'Licensed Material' can be considered to be 'Adapted Material',
987 ;; then the copyright holder waives article 3 of the license with respect to
988 ;; these designs and any generated files which use data provided as part of
989 ;; the 'Licensed Material'."
47f9fb18
DM
990 ;; See <https://github.com/KiCad/kicad-symbols/blob/master/LICENSE.md>.
991 (license license:cc-by-sa4.0)))
992
259e65aa
BW
993(define-public kicad-footprints
994 (package
995 (inherit kicad-symbols)
996 (name "kicad-footprints")
1c9403f6 997 (version (package-version kicad))
259e65aa
BW
998 (source (origin
999 (method git-fetch)
1000 (uri (git-reference
b0e7b699 1001 (url "https://github.com/KiCad/kicad-footprints")
259e65aa
BW
1002 (commit version)))
1003 (file-name (git-file-name name version))
1004 (sha256
1005 (base32
47711ec9 1006 "1kmf91a5mmvj9izrv40mkaw1w36yjgn8daczd9rq2wlmd0rdp1zx"))))
259e65aa
BW
1007 (synopsis "Official KiCad footprint libraries")
1008 (description "This package contains the official KiCad footprint libraries.")))
1009
c5951507
BW
1010(define-public kicad-packages3d
1011 (package
1012 (inherit kicad-symbols)
1013 (name "kicad-packages3d")
1c9403f6 1014 (version (package-version kicad))
c5951507
BW
1015 (source (origin
1016 (method git-fetch)
1017 (uri (git-reference
b0e7b699 1018 (url "https://github.com/KiCad/kicad-packages3d")
c5951507
BW
1019 (commit version)))
1020 (file-name (git-file-name name version))
1021 (sha256
1022 (base32
57b90a5d 1023 "0b9jglf77fy0n0r8xs4yqkv6zvipyfvp0z5dnqlzp32csy5aqpi1"))))
c5951507
BW
1024 (synopsis "Official KiCad 3D model libraries")
1025 (description "This package contains the official KiCad 3D model libraries.")))
1026
ca839f3c
BW
1027(define-public kicad-templates
1028 (package
1029 (inherit kicad-symbols)
1030 (name "kicad-templates")
1c9403f6 1031 (version (package-version kicad))
ca839f3c
BW
1032 (source (origin
1033 (method git-fetch)
1034 (uri (git-reference
b0e7b699 1035 (url "https://github.com/KiCad/kicad-templates")
ca839f3c
BW
1036 (commit version)))
1037 (file-name (git-file-name name version))
1038 (sha256
1039 (base32
fbfaafae 1040 "1hppcsrkn4dk6ggby6ckh0q65qxkywrbyxa4lwpaf7pxjyv498xg"))))
ca839f3c
BW
1041 (synopsis "Official KiCad project and worksheet templates")
1042 (description "This package contains the official KiCad project and
1043worksheet templates.")))
1044
5f947808
JD
1045(define-public linsmith
1046 (package
1047 (name "linsmith")
d193903e 1048 (version "0.99.31")
5f947808
JD
1049 (source (origin
1050 (method url-fetch)
1051 (uri (string-append
1052 "mirror://sourceforge/linsmith/linsmith/linsmith-"
1053 version "/linsmith-" version ".tar.gz"))
1054 (sha256
1055 (base32
d193903e 1056 "13qj7n9826qc9shkkgd1p6vcpj78v4h9d67wbg45prg7rbnzkzds"))))
5f947808
JD
1057 (build-system gnu-build-system)
1058 (native-inputs
1059 `(("pkg-config" ,pkg-config)
1060 ("gtk" ,gtk+-2)
1061 ("libgnome" ,libgnomeui)))
6e3d48c2 1062 (home-page "https://jcoppens.com/soft/linsmith/index.en.php")
5f947808
JD
1063 (synopsis "Smith Charting program")
1064 (description "LinSmith is a Smith Charting program, mainly designed for
1065educational use. As such, there is an emphasis on capabilities that improve
1066the 'showing the effect of'-style of operation.")
1067 (license license:gpl2+)))
2766f9e8
DM
1068
1069(define-public volk
1070 (package
1071 (name "volk")
6e1aa1c4 1072 (version "2.3.0")
2766f9e8
DM
1073 (source
1074 (origin
1075 (method url-fetch)
01a2911e 1076 (uri (string-append "https://www.libvolk.org/releases/volk-"
2766f9e8
DM
1077 version ".tar.gz"))
1078 (sha256
6e1aa1c4 1079 (base32 "1pjxz3piwy49njj5y2zk437prwkv9lfs5g48577jj3kcsg766vi3"))))
2766f9e8 1080 (build-system cmake-build-system)
01a2911e
EF
1081 (arguments
1082 `(#:phases
1083 (modify-phases %standard-phases
1084 (add-after 'install 'wrap-pythonpath
1085 (lambda* (#:key inputs outputs #:allow-other-keys)
1086 (let* ((out (assoc-ref outputs "out"))
1087 (python (assoc-ref inputs "python"))
1088 (file (string-append out "/bin/volk_modtool"))
1089 (path (string-append
1090 out
1091 "/lib/python"
1092 ,(version-major+minor
1093 (package-version python))
1094 "/site-packages:"
1095 (getenv "PYTHONPATH"))))
1096 (wrap-program file
1097 `("PYTHONPATH" ":" prefix (,path))
1098 `("PATH" ":" prefix
1099 (,(string-append python "/bin:")))))
1100 #t)))))
2766f9e8 1101 (inputs
a3370b30
TGR
1102 `(("boost" ,boost)
1103 ("python" ,python-wrapper)
01a2911e
EF
1104 ("python-mako" ,python-mako)))
1105 (home-page "https://www.libvolk.org/")
2766f9e8
DM
1106 (synopsis "Vector-Optimized Library of Kernels")
1107 (description
4df47410
TGR
1108 "@acronym{VOLK, Vector-Optimized Library of Kernels} contains procedures
1109with machine-specific optimizations for mathematical functions. It also
1110provides a machine-independent interface to select the best such procedures to
1111use on a given system.")
2766f9e8 1112 (license license:gpl3+)))
f37f949d 1113
07d859cc
VM
1114(define-public libredwg
1115 (package
1116 (name "libredwg")
1117 (version "0.11")
1118 (source
1119 (origin
1120 (method url-fetch)
1121 (uri (string-append "mirror://gnu/libredwg/libredwg-"
1122 version ".tar.xz"))
1123 (sha256
1124 (base32 "1vd7ii32k5447z7k4w9s005hv1ffpj6dyf1w40x6c53qksrblny2"))))
1125 (build-system gnu-build-system)
1126 (arguments
1127 `(#:configure-flags '("--disable-bindings")))
1128 (native-inputs
1129 `(("libxml2" ,libxml2)
1130 ("parallel" ,parallel)
1131 ("pkg-config" ,pkg-config)
1132 ("python" ,python)
1133 ("python-libxml2" ,python-libxml2)))
1134 (inputs
1135 `(("pcre2" ,pcre2)))
1136 (home-page "https://www.gnu.org/software/libredwg/")
1137 (synopsis "C library to handle DWG (CAD-related) files")
1138 (description
1139 "GNU LibreDWG is a C library to handle DWG files. It aims to be a free
1140replacement for the OpenDWG libraries.")
1141 (license license:gpl3+)))
1142
f37f949d
DM
1143(define-public minicom
1144 (package
1145 (name "minicom")
1146 (version "2.7.1")
1147 (source
1148 (origin
2f04eb48
TGR
1149 (method git-fetch)
1150 (uri (git-reference
1151 (url "https://salsa.debian.org/minicom-team/minicom.git")
1152 (commit (string-append "v" version))))
f37f949d 1153 (sha256
2f04eb48
TGR
1154 (base32 "0f36wv015zpz1x895qv0z6marlynzyh0d5mfkyd7lfyy2xd1i2w0"))
1155 (file-name (git-file-name name version))))
f37f949d
DM
1156 (build-system gnu-build-system)
1157 (arguments
1158 `(#:configure-flags '("--enable-lock-dir=/var/lock")
1159 #:phases
1160 (modify-phases %standard-phases
2f04eb48
TGR
1161 (replace 'bootstrap
1162 ;; autogen.sh needlessly hard-codes aclocal-1.14.
1163 (lambda _
1164 (invoke "autoreconf" "-vif")
1165 #t))
1166 (add-before 'configure 'patch-lock-check
f37f949d
DM
1167 (lambda _
1168 (substitute* "configure"
1169 (("test -d [$]UUCPLOCK") "true"))
1170 #t)))))
2f04eb48
TGR
1171 (native-inputs
1172 `(("autoconf" ,autoconf)
1173 ("automake" ,automake)
1174 ("gettext" ,gettext-minimal)
1175 ("pkg-config" ,pkg-config)))
f37f949d
DM
1176 (inputs
1177 `(("ncurses" ,ncurses)))
2f04eb48 1178 (home-page "https://salsa.debian.org/minicom-team/minicom")
f37f949d
DM
1179 (synopsis "Serial terminal emulator")
1180 (description "@code{minicom} is a serial terminal emulator.")
1181 (license license:gpl2+)))
1251c664
TF
1182
1183(define-public harminv
1184 (package
1185 (name "harminv")
b09c6b55 1186 (version "1.4.1")
1251c664
TF
1187 (source (origin
1188 (method url-fetch)
1189 (uri
b09c6b55
TGR
1190 (string-append "https://github.com/stevengj/harminv/"
1191 "releases/download/v" version "/"
1192 name "-" version ".tar.gz"))
1251c664
TF
1193 (sha256
1194 (base32
b09c6b55 1195 "0w1n4d249vlpda0hi6z1v13qp21vlbp3ykn0m8qg4rd5132j7fg1"))))
1251c664
TF
1196 (build-system gnu-build-system)
1197 (arguments
1618c6fe
JB
1198 `(#:configure-flags '("--enable-shared")
1199 #:phases
1251c664
TF
1200 (modify-phases %standard-phases
1201 (add-before 'configure 'fix-tests
1202 (lambda _
1203 (substitute* "./sines-test.sh"
1204 ; change test frequency range - default fails
1205 (("0\\.15") "0.16"))
1206 #t)))))
1207 (native-inputs
1208 `(("fortran" ,gfortran)))
1209 (inputs
1210 `(("lapack" ,lapack)))
b09c6b55 1211 (home-page "https://github.com/stevengj/harminv")
1251c664
TF
1212 (synopsis "Harmonic inversion solver")
1213 (description
1214 "Harminv is a free program (and accompanying library) to solve the problem of
1215harmonic inversion — given a discrete-time, finite-length signal that consists of a sum
1216of finitely-many sinusoids (possibly exponentially decaying) in a given bandwidth, it
1217determines the frequencies, decay constants, amplitudes, and phases of those sinusoids.")
1218 (license license:gpl2+)))
cbd9568f
TF
1219
1220(define-public guile-libctl
1221 (package
1222 (name "guile-libctl")
a7de5a50 1223 (version "4.2.0")
cbd9568f
TF
1224 (source (origin
1225 (method url-fetch)
1226 (uri
1227 (string-append
a7de5a50
JB
1228 "https://github.com/NanoComp/libctl/releases/download/v"
1229 version "/libctl-" version ".tar.gz"))
cbd9568f
TF
1230 (sha256
1231 (base32
a7de5a50 1232 "0x8r56lpfq83kfbq28vr25icl19xpfd6fjrxzcpdmv30l9pash83"))))
cbd9568f 1233 (build-system gnu-build-system)
a7de5a50
JB
1234 (arguments
1235 `(#:configure-flags '("--enable-shared")))
cbd9568f
TF
1236 (native-inputs
1237 `(("fortran" ,gfortran)))
1238 (inputs
1239 `(("guile" ,guile-2.2)))
1240 (home-page "http://ab-initio.mit.edu/wiki/index.php/Libctl")
1241 (synopsis "Flexible control files implementation for scientific simulations")
1242 (description
1243 "Libctl is a Guile-based library implementing flexible control files
1244for scientific simulations.")
1245 (license license:gpl2+)))
5e872d4b
TF
1246
1247(define-public mpb
1248 (package
1249 (name "mpb")
e719562d 1250 (version "1.8.0")
5e872d4b
TF
1251 (source (origin
1252 (method url-fetch)
1253 (uri
1254 (string-append
e719562d
JB
1255 "https://github.com/NanoComp/mpb/releases/download/v"
1256 version "/mpb-" version ".tar.gz"))
5e872d4b
TF
1257 (sha256
1258 (base32
e719562d 1259 "1jgrb7dd6qs6j6y1gnxmdgrh79l2bvqa6nk60a4pw1annsks4brd"))))
5e872d4b
TF
1260 (build-system gnu-build-system)
1261 (arguments
1262 `(#:configure-flags
1263 (list (string-append "--with-libctl="
1264 (assoc-ref %build-inputs "libctl")
e719562d
JB
1265 "/share/libctl")
1266 "--enable-shared")))
5e872d4b
TF
1267 (native-inputs
1268 `(("fortran" ,gfortran)
1269 ("pkg-config" ,pkg-config)
1270 ("swig" ,swig)))
1271 (inputs
1272 `(("fftw" ,fftw)
1273 ("gsl" ,gsl)
1274 ("guile" ,guile-2.2)
1275 ("hdf5" ,hdf5)
1276 ("lapack" ,lapack)
1277 ("libctl" ,guile-libctl)
1278 ("readline" ,readline)
1279 ("zlib" ,zlib)))
1280 (home-page "http://ab-initio.mit.edu/wiki/index.php/MIT_Photonic_Bands")
1281 (synopsis "Computes band structures and electromagnetic modes of dielectric
1282structures")
1283 (description
1284 "MIT Photonic-Bands (MPB) computes definite-frequency eigenstates (harmonic modes)
1285of Maxwell's equations in periodic dielectric structures for arbitrary wavevectors, using
1286fully-vectorial and three-dimensional methods.")
1287 (license license:gpl2+)))
28b08d2a
TF
1288
1289(define-public meep
1290 (package
1291 (name "meep")
138950a8 1292 (version "1.8.0")
28b08d2a
TF
1293 (source (origin
1294 (method url-fetch)
1295 (uri
1296 (string-append
138950a8
JB
1297 "https://github.com/NanoComp/meep/releases/download/v"
1298 version "/meep-" version ".tar.gz"))
28b08d2a
TF
1299 (sha256
1300 (base32
138950a8 1301 "14zyxmm3p80j5fz5b89sl7hgkgcisqjny5hjh4pi274ziqjqz8bm"))))
28b08d2a
TF
1302 (build-system gnu-build-system)
1303 (arguments
1304 `(#:configure-flags
1305 (list (string-append "--with-libctl="
1306 (assoc-ref %build-inputs "libctl")
1307 "/share/libctl"))))
1308 (native-inputs
1309 `(("fortran" ,gfortran)
1310 ("pkg-config" ,pkg-config)
1311 ("swig" ,swig)))
1312 (inputs
1313 `(("fftw" ,fftw)
1314 ("gsl" ,gsl)
138950a8 1315 ("guile" ,guile-2.2)
28b08d2a
TF
1316 ("harminv" ,harminv)
1317 ("hdf5" ,hdf5)
1318 ("lapack" ,lapack)
1319 ("libctl" ,guile-libctl)
1320 ("mpb" ,mpb)
1321 ("zlib" ,zlib)))
1322 (home-page "http://ab-initio.mit.edu/wiki/index.php/Meep")
1323 (synopsis "Finite-difference time-domain (FDTD) simulation software")
1324 (description
1325 "Meep is a finite-difference time-domain (FDTD) simulation software package
1326developed at MIT to model electromagnetic systems.")
1327 (license license:gpl2+)))
8bca358b
TF
1328
1329(define-public adms
1330 (package
1331 (name "adms")
de4705d9 1332 (version "2.3.7")
8bca358b 1333 (source (origin
de4705d9
MS
1334 (method git-fetch)
1335 (uri (git-reference
1336 (url "https://github.com/Qucs/ADMS")
1337 (commit (string-append "release-" version))))
1338 (file-name (git-file-name name version))
8bca358b
TF
1339 (sha256
1340 (base32
de4705d9 1341 "0i37c9k6q1iglmzp9736rrgsnx7sw8xn3djqbbjw29zsyl3pf62c"))))
8bca358b
TF
1342 (build-system gnu-build-system)
1343 (native-inputs
de4705d9
MS
1344 `(("autoconf" ,autoconf)
1345 ("automake" ,automake)
1346 ("bison" ,bison)
1347 ("flex" ,flex)
1348 ("libtool" ,libtool)
1349 ("perl" ,perl)
1350 ("perl-xml-libxml" ,perl-xml-libxml)))
1351 (home-page "https://github.com/Qucs/ADMS")
8bca358b
TF
1352 (synopsis "Automatic device model synthesizer")
1353 (description
1354 "ADMS is a code generator that converts electrical compact device models
1355specified in high-level description language into ready-to-compile C code for
1356the API of spice simulators. Based on transformations specified in XML
1357language, ADMS transforms Verilog-AMS code into other target languages.")
1358 (license license:gpl3)))
6febda94
JL
1359
1360(define-public capstone
1361 (package
1362 (name "capstone")
a7b14a1b 1363 (version "3.0.5")
6febda94 1364 (source (origin
aa5fadaf
EF
1365 (method git-fetch)
1366 (uri (git-reference
1367 (url "https://github.com/aquynh/capstone")
1368 (commit version)))
1369 (file-name (git-file-name name version))
6febda94
JL
1370 (sha256
1371 (base32
aa5fadaf 1372 "0dgf82kxj4rs45d6s8sr984c38sll1n5scpypjlyh21gh2yl4qfw"))))
6febda94
JL
1373 (build-system gnu-build-system)
1374 (arguments
1375 `(#:tests? #f
a7b14a1b 1376 #:make-flags (list (string-append "PREFIX=" (assoc-ref %outputs "out"))
6febda94
JL
1377 "CC=gcc")
1378 #:phases
1379 (modify-phases %standard-phases
a7b14a1b
TGR
1380 (delete 'configure) ; no configure script
1381 ;; cstool's Makefile ‘+=’s LDFLAGS, so we cannot pass it as a make flag.
6febda94
JL
1382 (add-before 'build 'fix-cstool-ldflags
1383 (lambda* (#:key outputs #:allow-other-keys)
a7b14a1b
TGR
1384 (setenv "LDFLAGS" (string-append "-Wl,-rpath="
1385 (assoc-ref outputs "out") "/lib"))
6febda94 1386 #t)))))
acf18cb1 1387 (home-page "https://www.capstone-engine.org")
6febda94
JL
1388 (synopsis "Lightweight multi-platform, multi-architecture disassembly framework")
1389 (description
1390 "Capstone is a lightweight multi-platform, multi-architecture disassembly
1391framework. Capstone can disassemble machine code for many supported architectures
1392such as x86, x86_64, arm, arm64, mips, ppc, sparc, sysz and xcore. It provides
1393bindings for Python, Java, OCaml and more.")
1394 (license license:bsd-3)))
f70be011
JL
1395
1396;; FIXME: This package has a timestamp embedded in
1397;; lib/python3.5/site-packages/capstone/__pycache__/__iti__.cpython-35.pyc
1398(define-public python-capstone
1399 (package
1400 (inherit capstone)
1401 (name "python-capstone")
1402 (propagated-inputs
1403 `(("capstone" ,capstone)))
1404 (build-system python-build-system)
1405 (arguments
1406 `(#:phases
1407 (modify-phases %standard-phases
1408 (add-after 'unpack 'chdir-and-fix-setup-py
1409 (lambda _
1410 (chdir "bindings/python")
1411 ;; Do not build the library again, because we already have it.
1412 (substitute* "setup.py" ((".* build_libraries.*") ""))
1413 ;; This substitution tells python-capstone where to find the
1414 ;; library.
1415 (substitute* "capstone/__init__.py"
1416 (("pkg_resources.resource_filename.*")
1417 (string-append "'" (assoc-ref %build-inputs "capstone") "/lib',\n")))
1418 #t)))))))
1419
1420(define-public python2-capstone
1421 (package-with-python2 python-capstone))
44669577
JL
1422
1423(define-public radare2
1424 (package
1425 (name "radare2")
d01269d2 1426 (version "4.4.0")
44669577 1427 (source (origin
fcc10cb2 1428 (method git-fetch)
1429 (uri (git-reference
1430 (url "https://github.com/radareorg/radare2")
1431 (commit version)))
44669577
JL
1432 (sha256
1433 (base32
d01269d2 1434 "0gwdnrnk7wdgkajp2qwg4fyplh7nsbmf01bzx07px6xmiscd9z2s"))
6454e5ac 1435 (file-name (git-file-name name version))))
44669577
JL
1436 (build-system gnu-build-system)
1437 (arguments
8dec0cdf 1438 '(#:tests? #f ; tests require git and network access
44669577
JL
1439 #:phases
1440 (modify-phases %standard-phases
1441 (add-before 'configure 'mklibdir
655a0c65
TGR
1442 (lambda* (#:key inputs outputs #:allow-other-keys)
1443 (mkdir-p (string-append (assoc-ref outputs "out") "/lib"))
44669577
JL
1444 #t)))
1445 #:configure-flags
ecc8cd98
TGR
1446 (list "--with-openssl"
1447 "--with-rpath"
1448 "--with-syscapstone"
1449 "--with-sysmagic"
1450 "--with-syszip"
1451 "--with-sysxxhash")
44669577
JL
1452 #:make-flags
1453 (list "CC=gcc")))
5507ff8e 1454 ;; TODO: Add gmp and libzip and make the build system actually find them.
44669577 1455 (inputs
5507ff8e 1456 `(("capstone" ,capstone)
ecc8cd98 1457 ("libuv" ,libuv)
5507ff8e
TGR
1458 ("openssl" ,openssl)
1459 ("zip" ,zip)))
44669577
JL
1460 (native-inputs
1461 `(("pkg-config" ,pkg-config)))
ecc8cd98
TGR
1462 (propagated-inputs
1463 ;; In the Libs: section of r_hash.pc.
1464 `(("xxhash" ,xxhash)))
44669577 1465 (home-page "https://radare.org/")
74281436 1466 (synopsis "Reverse engineering framework")
44669577 1467 (description
74281436
TGR
1468 "Radare2 is a complete framework for reverse-engineering, debugging, and
1469analyzing binaries. It is composed of a set of small utilities that can be
1470used together or independently from the command line.
1471
1472Radare2 is built around a scriptable disassembler and hexadecimal editor that
1473support a variety of executable formats for different processors and operating
1474systems, through multiple back ends for local and remote files and disk
1475images.
1476
1477It can also compare (@dfn{diff}) binaries with graphs and extract information
1478like relocation symbols. It is able to deal with malformed binaries, making
1479it suitable for security research and analysis.")
44669577 1480 (license license:lgpl3)))
a6edcfaf
TF
1481
1482(define-public asco
1483 (package
1484 (name "asco")
1485 (version "0.4.10")
1486 (source (origin
1487 (method url-fetch)
1488 (uri (string-append "mirror://sourceforge/asco/asco/" version "/ASCO-"
1489 version ".tar.gz"))
1490 (sha256
1491 (base32
1492 "119rbc2dc8xzwxvykgji0v0nrzvymjmlizr1bc2mihspj686kxsl"))))
1493 (build-system gnu-build-system)
1494 (arguments
1495 `(#:tests? #f ; no tests
1496 #:make-flags '("all" "asco-mpi")
1497 #:phases
1498 (modify-phases %standard-phases
1499 (delete 'configure)
1500 (add-before 'build 'fix-paths
1501 (lambda* (#:key inputs #:allow-other-keys)
1502 (let ((coreutils (assoc-ref inputs "coreutils-minimal")))
1503 (substitute* '("errfunc.c" "asco.c")
1504 (("cp ")
1505 (string-append coreutils "/bin/cp "))
1506 (("nice")
1507 (string-append coreutils "/bin/nice")))
1508 (substitute* "Makefile"
1509 (("<FULL_PATH_TO_MPICH>/bin/mpicc") (which "mpicc")))
1510 #t)))
1511 (replace 'install ; no install target
1512 (lambda* (#:key outputs #:allow-other-keys)
1513 (for-each (lambda (file)
1514 (install-file file (string-append
1515 (assoc-ref outputs "out")
1516 "/bin")))
1517 '("asco" "asco-mpi" "asco-test"
1518 "tools/alter/alter" "tools/log/log"))
1519 #t)))))
1520 (native-inputs
1521 `(("mpi" ,openmpi)))
1522 (inputs
1523 `(("coreutils-minimal" ,coreutils-minimal)))
1524 (home-page "http://asco.sourceforge.net/")
1525 (synopsis "SPICE circuit optimizer")
1526 (description
1527 "ASCO brings circuit optimization capabilities to existing SPICE simulators using a
1528high-performance parallel differential evolution (DE) optimization algorithm.")
1529 (license license:gpl2+)))
710cc1a4
TF
1530
1531(define-public libngspice
1532 ;; Note: The ngspice's build system does not allow us to build both the
1533 ;; library and the executables in one go. Thus, we have two packages.
1534 ;; See <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=27344#236>.
1535 (package
1536 (name "libngspice")
7a83eb37 1537 (version "28")
710cc1a4
TF
1538 (source (origin
1539 (method url-fetch)
1540 (uri (string-append "mirror://sourceforge/ngspice/ng-spice-rework/"
1541 version "/ngspice-" version ".tar.gz"))
1542 (sha256
1543 (base32
7a83eb37 1544 "0rnz2rdgyav16w7wfn3sfrk2lwvvgz1fh0l9107zkcldijklz04l"))
710cc1a4
TF
1545 (modules '((guix build utils)))
1546 ;; We remove the non-free cider and build without it.
1547 (snippet
1548 '(begin
1549 (delete-file-recursively "src/ciderlib")
1550 (delete-file "src/ciderinit")
1551 (substitute* "configure"
1552 (("src/ciderlib/Makefile") "")
1553 (("src/ciderlib/input/Makefile") "")
1554 (("src/ciderlib/support/Makefile") "")
1555 (("src/ciderlib/oned/Makefile") "")
6cbee49d
MW
1556 (("src/ciderlib/twod/Makefile") ""))
1557 #t))))
710cc1a4
TF
1558 (build-system gnu-build-system)
1559 (arguments
1560 `(;; No tests for libngspice exist.
1561 ;; The transient tests for ngspice fail.
1562 #:tests? #f
1563 #:phases
1564 (modify-phases %standard-phases
1565 (add-after 'unpack 'patch-timestamps
1566 (lambda _
1567 (substitute* "configure"
ec425ca3 1568 (("`date`") "Thu Jan 1 00:00:01 UTC 1970"))
710cc1a4
TF
1569 #t))
1570 (add-after 'unpack 'delete-program-manuals
1571 (lambda _
1572 (substitute* "man/man1/Makefile.in"
1573 (("^man_MANS = ngspice\\.1 ngnutmeg\\.1 ngsconvert\\.1 ngmultidec\\.1")
1574 "man_MANS = "))
1575 #t))
1576 (add-after 'install 'delete-script-files
1577 (lambda* (#:key outputs #:allow-other-keys)
1578 (delete-file-recursively
1579 (string-append (assoc-ref outputs "out")
1580 "/share/ngspice/scripts")))))
1581 #:configure-flags
1582 (list "--enable-openmp"
1583 "--enable-xspice"
1584 "--with-ngshared"
1585 "--with-readline=yes")))
1586 (native-inputs
1587 `(("bison" ,bison)
1588 ("flex" ,flex)))
1589 (inputs
1590 `(("libxaw" ,libxaw)
1591 ("mpi" ,openmpi)
1592 ("readline" ,readline)))
1593 (home-page "http://ngspice.sourceforge.net/")
1594 (synopsis "Mixed-level/mixed-signal circuit simulator")
1595 (description
1596 "Ngspice is a mixed-level/mixed-signal circuit simulator. It includes
1597@code{Spice3f5}, a circuit simulator, and @code{Xspice}, an extension that
1598provides code modeling support and simulation of digital components through
1599an embedded event driven algorithm.")
1600 (license (list license:lgpl2.0+ ; code in frontend/numparam
1601 (license:non-copyleft "file:///COPYING") ; spice3 bsd-style
1602 license:public-domain)))) ; xspice
1603
1604(define-public ngspice
1605 ;; The ngspice executables (see libngpsice above.)
1606 (package (inherit libngspice)
1607 (name "ngspice")
1608 (arguments
1609 (substitute-keyword-arguments (package-arguments libngspice)
1610 ((#:configure-flags flags)
1611 `(delete "--with-ngshared" ,flags))
1612 ((#:phases phases)
1613 `(modify-phases ,phases
1614 (add-after 'unpack 'delete-include-files
1615 (lambda _
1616 (substitute* "src/Makefile.in"
1617 (("^SUBDIRS = misc maths frontend spicelib include/ngspice")
1618 "SUBDIRS = misc maths frontend spicelib"))
1619 #t))
1620 (add-after 'install 'delete-cmpp-dlmain
1621 (lambda* (#:key outputs #:allow-other-keys)
1622 (for-each (lambda (file)
1623 (delete-file
1624 (string-append (assoc-ref outputs "out")
1625 file)))
1626 '("/bin/cmpp" "/share/ngspice/dlmain.c"))
1627 #t))
1628 (delete 'delete-program-manuals)
1629 (delete 'delete-script-files)))))
1630 (inputs
1631 `(("libngspice" ,libngspice)
1632 ("readline" ,readline)))))
1da02b6a
TF
1633
1634(define trilinos-serial-xyce
1635 ;; Note: This is a Trilinos containing only the packages Xyce needs, so we
1636 ;; keep it private. See
1637 ;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=27344#248>.
1638 ;; TODO: Remove when we have modular Trilinos packages?
1639 (package
1640 (name "trilinos-serial-xyce")
d73482b4 1641 (version "12.12.1")
1da02b6a
TF
1642 (source
1643 (origin (method url-fetch)
1644 (uri (string-append "https://trilinos.org/oldsite/download/files/trilinos-"
1645 version "-Source.tar.gz"))
1646 (sha256
1647 (base32
d73482b4 1648 "1zgrcksrcbmyy79mbdv0j4j4sh0chpigxk8vcrrwgaxyxwxxhrvw"))))
1da02b6a
TF
1649 (build-system cmake-build-system)
1650 (arguments
1651 `(#:out-of-source? #t
d73482b4
TF
1652 #:phases
1653 (modify-phases %standard-phases
1654 ;; Delete unneeded tribits(build system) directory which makes validate-runpath
1655 ;; phase to fail.
1656 (add-before 'validate-runpath 'delete-tribits
1657 (lambda* (#:key outputs #:allow-other-keys)
1658 (delete-file-recursively
1659 (string-append (assoc-ref outputs "out")
1660 "/lib/cmake/tribits"))
1661 #t)))
1da02b6a
TF
1662 #:configure-flags
1663 (list "-DCMAKE_CXX_FLAGS=-O3 -fPIC"
1664 "-DCMAKE_C_FLAGS=-O3 -fPIC"
1665 "-DCMAKE_Fortran_FLAGS=-O3 -fPIC"
1666 "-DTrilinos_ENABLE_NOX=ON"
1667 "-DNOX_ENABLE_LOCA=ON"
1668 "-DTrilinos_ENABLE_EpetraExt=ON"
1669 "-DEpetraExt_BUILD_BTF=ON"
1670 "-DEpetraExt_BUILD_EXPERIMENTAL=ON"
1671 "-DEpetraExt_BUILD_GRAPH_REORDERINGS=ON"
1672 "-DTrilinos_ENABLE_TrilinosCouplings=ON"
1673 "-DTrilinos_ENABLE_Ifpack=ON"
1674 "-DTrilinos_ENABLE_Isorropia=ON"
1675 "-DTrilinos_ENABLE_AztecOO=ON"
1676 "-DTrilinos_ENABLE_Belos=ON"
1677 "-DTrilinos_ENABLE_Teuchos=ON"
1678 "-DTeuchos_ENABLE_COMPLEX=ON"
1679 "-DTrilinos_ENABLE_Amesos=ON"
1680 "-DAmesos_ENABLE_KLU=ON"
1681 "-DAmesos_ENABLE_UMFPACK=ON"
1682 "-DTrilinos_ENABLE_Sacado=ON"
1683 "-DTrilinos_ENABLE_Kokkos=OFF"
1684 "-DTrilinos_ENABLE_ALL_OPTIONAL_PACKAGES=OFF"
1685 "-DTPL_ENABLE_AMD=ON"
1686 "-DTPL_ENABLE_UMFPACK=ON"
1687 "-DTPL_ENABLE_BLAS=ON"
1688 "-DTPL_ENABLE_LAPACK=ON")))
1689 (native-inputs
1690 `(("fortran" ,gfortran)
1691 ("swig" ,swig)))
1692 (inputs
1693 `(("boost" ,boost)
d73482b4 1694 ("lapack" ,lapack)
1da02b6a
TF
1695 ("suitesparse" ,suitesparse)))
1696 (home-page "https://trilinos.org")
1697 (synopsis "Engineering and scientific problems algorithms")
1698 (description
1699 "The Trilinos Project is an effort to develop algorithms and enabling
1700technologies within an object-oriented software framework for the solution of
1701large-scale, complex multi-physics engineering and scientific problems. A
1702unique design feature of Trilinos is its focus on packages.")
1703 (license (list license:lgpl2.1+
1704 license:bsd-3))))
1705
1706(define-public xyce-serial
1707 (package
1708 (name "xyce-serial")
ac04601a 1709 (version "6.8")
1da02b6a
TF
1710 (source
1711 (origin (method url-fetch)
1712 (uri (string-append "https://archive.org/download/Xyce-"
1713 version "/Xyce-" version ".tar.gz"))
1714 (sha256
1715 (base32
ac04601a 1716 "09flp1xywbb2laayd9rg8vd0fjsh115y6k1p71jacy0nrbdvvlcg"))))
1da02b6a
TF
1717 (build-system gnu-build-system)
1718 (arguments
1719 `(#:tests? #f
1720 #:configure-flags
1721 (list
0fe041bd 1722 "CXXFLAGS=-O3"
1da02b6a
TF
1723 (string-append "ARCHDIR="
1724 (assoc-ref %build-inputs "trilinos")))))
1725 (native-inputs
8d564b8b 1726 `(("bison" ,bison-3.0) ;'configure' fails with Bison 3.4
1da02b6a
TF
1727 ("flex" ,flex)
1728 ("fortran" ,gfortran)))
1729 (inputs
1730 `(("fftw" ,fftw)
1731 ("suitesparse" ,suitesparse)
ac04601a 1732 ("lapack" ,lapack)
1da02b6a
TF
1733 ("trilinos" ,trilinos-serial-xyce)))
1734 (home-page "https://xyce.sandia.gov/")
1735 (synopsis "High-performance analog circuit simulator")
1736 (description
1737 "Xyce is a SPICE-compatible, high-performance analog circuit simulator,
1738capable of solving extremely large circuit problems by supporting large-scale
1739parallel computing platforms. It also supports serial execution.")
1740 (license license:gpl3+)))
91cabd3e
TF
1741
1742(define trilinos-parallel-xyce
1743 (package (inherit trilinos-serial-xyce)
1744 (name "trilinos-parallel-xyce")
1745 (arguments
1746 `(,@(substitute-keyword-arguments (package-arguments trilinos-serial-xyce)
1747 ((#:configure-flags flags)
1748 `(append (list "-DTrilinos_ENABLE_ShyLU=ON"
1749 "-DTrilinos_ENABLE_Zoltan=ON"
1750 "-DTPL_ENABLE_MPI=ON")
1751 ,flags)))))
1752 (inputs
1753 `(("mpi" ,openmpi)
1754 ,@(package-inputs trilinos-serial-xyce)))))
1755
1756(define-public xyce-parallel
1757 (package (inherit xyce-serial)
1758 (name "xyce-parallel")
1759 (arguments
1760 `(,@(substitute-keyword-arguments (package-arguments xyce-serial)
1761 ((#:configure-flags flags)
0fe041bd 1762 `(list "CXXFLAGS=-O3"
91cabd3e
TF
1763 "CXX=mpiCC"
1764 "CC=mpicc"
1765 "F77=mpif77"
1766 "--enable-mpi"
91cabd3e
TF
1767 (string-append
1768 "ARCHDIR="
1769 (assoc-ref %build-inputs "trilinos")))))))
1770 (propagated-inputs
1771 `(("mpi" ,openmpi)))
1772 (inputs
1773 `(("trilinos" ,trilinos-parallel-xyce)
1774 ,@(alist-delete "trilinos"
1775 (package-inputs xyce-serial))))))
f26af33a
TF
1776
1777(define-public freehdl
1778 (package
1779 (name "freehdl")
1780 (version "0.0.8")
1781 (source (origin
1782 (method url-fetch)
1783 (uri (string-append "http://downloads.sourceforge.net/qucs/freehdl-"
1784 version ".tar.gz"))
1785 (sha256
1786 (base32
1a044e39
MB
1787 "117dqs0d4pcgbzvr3jn5ppra7n7x2m6c161ywh6laa934pw7h2bz"))
1788 (patches
1789 (list (origin
1790 ;; Fix build with GCC 7. Patch taken from Arch Linux:
1791 ;; https://git.archlinux.org/svntogit/community.git/tree/trunk?h=packages/freehdl
1792 (method url-fetch)
1793 (uri "https://git.archlinux.org/svntogit/community.git\
1794/plain/trunk/build-fix.patch?h=packages/freehdl\
1795&id=3bb90d64dfe6883e26083cd1fa96226d0d59175a")
1796 (file-name "freehdl-c++-namespace.patch")
1797 (sha256
1798 (base32
1799 "09df3c70rx81rnhlhry1wpdhji274nx9jb74rfprk06l4739zm08")))))))
f26af33a
TF
1800 (build-system gnu-build-system)
1801 (arguments
1802 `(#:phases
1803 (modify-phases %standard-phases
1804 (add-before 'configure 'patch-pkg-config
1805 (lambda* (#:key inputs #:allow-other-keys)
1806 (substitute* "freehdl/freehdl-config"
1807 (("pkg-config")
1808 (string-append (assoc-ref inputs "pkg-config")
1809 "/bin/pkg-config"))
1810 (("cat")
1811 (string-append (assoc-ref inputs "coreutils")
1812 "/bin/cat")))
1813 #t))
d3f95898
TF
1814 (add-after 'patch-pkg-config 'setenv
1815 (lambda* (#:key inputs #:allow-other-keys)
1816 (setenv "CXX" (string-append (assoc-ref inputs "gcc")
1817 "/bin/g++"))
1818 (setenv "SYSTEM_LIBTOOL" (string-append (assoc-ref inputs "libtool")
1819 "/bin/libtool"))
1820 #t))
1821 (add-after 'setenv 'patch-gvhdl
1822 (lambda _
1823 (substitute* "v2cc/gvhdl.in"
1824 (("--mode=link") "--mode=link --tag=CXX")
1825 (("-lm") "-lm FREEHDL/lib/freehdl/libieee.la"))
1826 #t))
1827 (add-after 'patch-gvhdl 'patch-freehdl-gennodes
1828 (lambda* (#:key inputs #:allow-other-keys)
1829 (substitute* "freehdl/freehdl-gennodes.in"
1830 (("guile")
1831 (string-append (assoc-ref inputs "guile") "/bin/guile"))
1832 (("\\(debug") ";(debug")
1833 (("\\(@ ") "(apply-emit")
1834 (("\\(@@ ") "(apply-mini-format"))
1835 #t))
f26af33a
TF
1836 (add-after 'configure 'patch-freehdl-pc
1837 (lambda* (#:key inputs #:allow-other-keys)
1838 (substitute* "freehdl.pc"
1839 (("=g\\+\\+")
d3f95898 1840 (string-append "=" (assoc-ref inputs "gcc-toolchain")
f26af33a
TF
1841 "/bin/g++"))
1842 (("=libtool")
1843 (string-append "=" (assoc-ref inputs "libtool")
1844 "/bin/libtool")))
1845 #t))
1846 (add-after 'install-scripts 'make-wrapper
d3f95898 1847 (lambda* (#:key inputs outputs #:allow-other-keys)
f26af33a 1848 (let ((out (assoc-ref outputs "out")))
d3f95898
TF
1849 ;; 'gvhdl' invokes the C compiler directly, so hard-code its
1850 ;; file name.
1851 (wrap-program (string-append out "/bin/gvhdl")
1852 `("CPLUS_INCLUDE_PATH" ":" prefix
1853 (,(string-append (assoc-ref inputs "gcc-toolchain")
1854 "/include")))
1855 `("LIBRARY_PATH" ":" prefix
1856 (,(string-append (assoc-ref inputs "gcc-toolchain")
1857 "/lib")))
1858 `("PATH" ":" prefix
1859 (,(string-append (assoc-ref inputs "gcc-toolchain")
1860 "/bin")
1861 ,(string-append (assoc-ref inputs "coreutils")
1862 "/bin"))))
f26af33a
TF
1863 (wrap-program (string-append out "/bin/freehdl-config")
1864 `("PKG_CONFIG_PATH" ":" prefix (,(string-append out "/lib/pkgconfig")))))
1865 #t)))))
1866 (inputs
1867 `(("coreutils" ,coreutils)
40a99ca0 1868 ("gcc-toolchain" ,gcc-toolchain)
d3f95898 1869 ("guile" ,guile-2.2)
f26af33a
TF
1870 ("perl" ,perl)
1871 ("pkg-config" ,pkg-config)
1872 ("libtool" ,libtool)))
1873 (native-inputs
1874 `(("pkg-config-native" ,pkg-config)
1875 ("libtool-native" ,libtool)))
1876 (home-page "http://www.freehdl.seul.org/")
1877 (synopsis "VHDL simulator")
1878 (description
1879 "FreeHDL is a compiler/simulator suite for the hardware description language VHDL.
1880 VHDL'93 as well as VHDL'87 standards are supported.")
1881 (license (list license:gpl2+
1882 license:lgpl2.0+)))) ; freehdl's libraries
1883
c31b61ef 1884(define-public qucs
4f12a62d
TF
1885 ;; Qucs 0.0.19 segfaults when using glibc-2.26. Temporarily build from git.
1886 ;; TODO: When qucs-0.0.20 is released, revert the commit that introduced this
1887 ;; comment and update the package.
1888 (let ((commit "b4f27d9222568066cd59e4c387c51a35056c99d8")
1889 (revision "0"))
1890 (package
1891 (name "qucs")
1892 (version (git-version "0.0.19" revision commit))
1893 (source (origin
1894 (method git-fetch)
1895 (uri (git-reference
1896 (url "https://github.com/Qucs/qucs")
1897 (commit commit)))
1898 (sha256
1899 (base32 "10bclay9xhkffmsh4j4l28kj1qpxx0pnxja5vx6305cllnq4r3gb"))
1900 (file-name (string-append name "-" version "-checkout"))))
1901 (build-system gnu-build-system)
1902 (arguments
1903 `(#:phases
1904 (modify-phases %standard-phases
5e881946
DM
1905 (add-before 'bootstrap 'patch-bootstrap
1906 (lambda _
1907 (for-each patch-shebang
1908 '("bootstrap"
1909 "qucs/bootstrap"
1910 "qucs-doc/bootstrap"
1911 "qucs-core/bootstrap"))
1912 #t))
4f12a62d
TF
1913 (add-before 'configure 'patch-configure
1914 (lambda* (#:key inputs #:allow-other-keys)
1915 (substitute* "qucs/configure"
1916 (("\\$QTDIR") (assoc-ref inputs "qt4")))
1917 #t))
1918 (add-after 'patch-configure 'patch-scripts
1919 (lambda* (#:key inputs outputs #:allow-other-keys)
1920 (substitute* '("qucs/qucs/qucsdigi"
1921 "qucs/qucs/qucsdigilib"
1922 "qucs/qucs/qucsveri")
1923 (("\\$BINDIR")
1924 (string-append (assoc-ref outputs "out") "/bin"))
1925 (("freehdl-config")
1926 (string-append (assoc-ref inputs "freehdl") "/bin/freehdl-config"))
1927 (("freehdl-v2cc")
1928 (string-append (assoc-ref inputs "freehdl") "/bin/freehdl-v2cc"))
1929 (("cp ")
1930 (string-append (assoc-ref inputs "coreutils") "/bin/cp "))
1931 (("glibtool")
1932 (string-append (assoc-ref inputs "libtool") "/bin/libtool"))
1933 (("sed")
1934 (string-append (assoc-ref inputs "sed") "/bin/sed"))
1935 (("iverilog")
1936 (string-append (assoc-ref inputs "iverilog") "/bin/iverilog"))
1937 (("vvp")
1938 (string-append (assoc-ref inputs "iverilog") "/bin/vvp")))
1939 #t))
1940 (add-before 'check 'pre-check
1941 (lambda _
1942 ;; The test suite requires a running X server.
1943 (system "Xvfb :1 &")
1944 (setenv "DISPLAY" ":1")
1945 #t))
1946 (add-after 'install 'make-wrapper
1947 (lambda* (#:key inputs outputs #:allow-other-keys)
1948 (let ((out (assoc-ref outputs "out")))
1949 ;; 'qucs' directly invokes gcc, hence this wrapping.
1950 (wrap-program (string-append out "/bin/qucs")
1951 `("CPLUS_INCLUDE_PATH" ":" prefix
1952 (,(string-append (assoc-ref inputs "gcc-toolchain")
1953 "/include")))
1954 `("PATH" ":" prefix
1955 (,(string-append (assoc-ref inputs "gcc-toolchain")
1956 "/bin")))
1957 `("LIBRARY_PATH" ":" prefix
1958 (,(string-append (assoc-ref inputs "gcc-toolchain")
1959 "/lib")))
1960 `("ADMSXMLBINDIR" ":" prefix
1961 (,(string-append (assoc-ref inputs "adms") "/bin")))
1962 `("ASCOBINDIR" ":" prefix
1963 (,(string-append (assoc-ref inputs "asco") "/bin")))
1964 `("QUCS_OCTAVE" ":" prefix
1965 (,(string-append (assoc-ref inputs "octave") "/bin/octave")))))
1966 #t)))
1967 #:parallel-build? #f ; race condition
1968 #:configure-flags '("--disable-doc"))) ; we need octave-epstk
1969 (native-inputs
1970 `(("autoconf" ,autoconf)
1971 ("automake" ,automake)
1972 ("bison" ,bison)
1973 ("flex" ,flex)
1974 ("gperf" ,gperf)
1975 ("libtool-native" ,libtool)
1976 ("pkg-config" ,pkg-config)
1977 ("python" ,python-2) ; for tests
1978 ("matplotlib" ,python2-matplotlib) ; for tests
1979 ("numpy" ,python2-numpy) ; for tests
ff337525 1980 ("xorg-server" ,xorg-server-for-tests))) ; for tests
4f12a62d
TF
1981 (inputs
1982 `(("adms" ,adms)
1983 ("asco" ,asco)
1984 ("coreutils" ,coreutils)
1985 ("freehdl" ,freehdl)
1986 ("gcc-toolchain" ,gcc-toolchain)
1987 ("iverilog" ,iverilog)
1988 ("libtool" ,libtool)
5537603f 1989 ("octave" ,octave-cli)
4f12a62d
TF
1990 ("qt4" ,qt-4)
1991 ("sed" ,sed)))
1992 (home-page "http://qucs.sourceforge.net/")
1993 (synopsis "Circuit simulator with graphical user interface")
1994 (description
1995 "Qucs is a circuit simulator with graphical user interface. The software
c31b61ef
TF
1996aims to support all kinds of circuit simulation types---e.g. DC, AC,
1997S-parameter, transient, noise and harmonic balance analysis. Pure digital
1998simulations are also supported.")
4f12a62d 1999 (license license:gpl2+))))
ef2c6b40
TF
2000
2001(define-public qucs-s
2002 (package
2003 (name "qucs-s")
1c8d6d6d 2004 (version "0.0.21")
ef2c6b40
TF
2005 (source (origin
2006 (method url-fetch)
394b89ae
TF
2007 (uri (string-append "https://github.com/ra3xdh/qucs_s/archive/"
2008 version ".tar.gz"))
2009 (file-name (string-append name "-" version ".tar.gz"))
ef2c6b40
TF
2010 (sha256
2011 (base32
1c8d6d6d 2012 "12m1jwhb9qwvb141qzyskbxnw3wn1x22d02z4b4862p7xvccl5h7"))))
ef2c6b40
TF
2013 (build-system cmake-build-system)
2014 (arguments
2015 `(#:tests? #f ; no tests
2016 #:phases
2017 (modify-phases %standard-phases
2018 (add-before 'configure 'patch-scripts
2019 (lambda* (#:key inputs #:allow-other-keys)
2020 (substitute* '("qucs/qucsdigi"
2021 "qucs/qucsdigilib"
2022 "qucs/qucsveri")
2023 (("\\$BINDIR")
2024 (string-append (assoc-ref inputs "qucs") "/bin"))
2025 (("freehdl-config")
2026 (string-append (assoc-ref inputs "freehdl") "/bin/freehdl-config"))
2027 (("freehdl-v2cc")
2028 (string-append (assoc-ref inputs "freehdl") "/bin/freehdl-v2cc"))
2029 (("cp ")
2030 (string-append (assoc-ref inputs "coreutils") "/bin/cp "))
2031 (("glibtool")
2032 (string-append (assoc-ref inputs "libtool") "/bin/libtool"))
2033 (("sed")
2034 (string-append (assoc-ref inputs "sed") "/bin/sed"))
2035 (("iverilog")
2036 (string-append (assoc-ref inputs "iverilog") "/bin/iverilog"))
2037 (("vvp")
2038 (string-append (assoc-ref inputs "iverilog") "/bin/vvp")))
2039 #t))
2040 (add-after 'patch-scripts 'patch-paths
2041 (lambda* (#:key inputs #:allow-other-keys)
2042 (substitute* "qucs/main.cpp"
2043 (((string-append "QucsSettings\\.Qucsator = QucsSettings\\.BinDir "
2044 "\\+ \"qucsator\" \\+ executableSuffix"))
2045 (string-append "}{ QucsSettings.Qucsator = \""
2046 (assoc-ref inputs "qucs") "/bin/qucsator\""))
394b89ae
TF
2047 (((string-append "QucsSettings\\.XyceExecutable = "
2048 "\"/usr/local/Xyce-Release-6.8.0-OPENSOURCE/bin/Xyce"))
2049 (string-append "}{ QucsSettings.XyceExecutable = \""
ef2c6b40 2050 (assoc-ref inputs "xyce-serial") "/bin/Xyce"))
394b89ae
TF
2051 (((string-append "else QucsSettings\\.XyceParExecutable = "
2052 "\"mpirun -np %p /usr/local"
2053 "/Xyce-Release-6.8.0-OPENMPI-OPENSOURCE/bin/Xyce"))
ef2c6b40 2054 (string-append "QucsSettings.XyceParExecutable = \""
394b89ae
TF
2055 (assoc-ref inputs "mpi") "/bin/mpirun -np %p "
2056 (assoc-ref inputs "xyce-parallel") "/bin/Xyce"))
ef2c6b40
TF
2057 (("else QucsSettings\\.NgspiceExecutable = \"ngspice\"")
2058 (string-append "QucsSettings.NgspiceExecutable = " "\""
2059 (assoc-ref inputs "ngspice") "/bin/ngspice\"")))
394b89ae
TF
2060 (substitute* "qucs/extsimkernels/ngspice.cpp"
2061 (("share/qucs/xspice_cmlib") "share/qucs-s/xspice_cmlib"))
ef2c6b40
TF
2062 (substitute* "qucs/qucs_actions.cpp"
2063 (("qucstrans")
2064 (string-append (assoc-ref inputs "qucs") "/bin/qucstrans"))
2065 (("qucsattenuator")
2066 (string-append (assoc-ref inputs "qucs") "/bin/qucsattenuator"))
2067 (("qucsrescodes")
2068 (string-append (assoc-ref inputs "qucs") "/bin/qucsrescodes")))
2069 #t))
2070 (add-after 'install 'install-scripts
2071 (lambda* (#:key inputs outputs #:allow-other-keys)
2072 (for-each
2073 (lambda (script)
394b89ae 2074 (let ((file (string-append "../qucs_s-" ,version
ef2c6b40
TF
2075 "/qucs/" script))
2076 (out (assoc-ref outputs "out")))
2077 (install-file file (string-append out "/bin"))
2078 (chmod (string-append out "/bin/" script) #o555)))
2079 '("qucsdigi" "qucsdigilib" "qucsveri"))
2080 #t))
2081 (add-after 'install-scripts 'make-wrapper
2082 (lambda* (#:key inputs outputs #:allow-other-keys)
2083 (let* ((out (assoc-ref outputs "out"))
2084 (file (string-append out "/bin/qucs-s"))
2085 (qucs (assoc-ref inputs "qucs"))
2086 (qucsator (string-append qucs "/bin/qucsator")))
2087 (wrap-program file
2088 `("CPLUS_INCLUDE_PATH" ":" prefix
2089 (,(string-append (assoc-ref inputs "gcc-toolchain")
2090 "/include")))
2091 `("PATH" ":" prefix
2092 (,(string-append (assoc-ref inputs "gcc-toolchain")
2093 "/bin")))
2094 `("LIBRARY_PATH" ":" prefix
2095 (,(string-append (assoc-ref inputs "gcc-toolchain")
2096 "/lib")))
2097 `("QUCSATOR" ":" prefix (,qucsator))
2098 `("QUCSCONV" ":" prefix (,(string-append qucsator "/bin/qucsconv")))
2099 `("ADMSXMLBINDIR" ":" prefix (,(string-append (assoc-ref inputs "adms")
2100 "/bin")))
2101 `("ASCOBINDIR" ":" prefix (,(string-append (assoc-ref inputs "asco")
2102 "/bin")))
2103 `("QUCS_OCTAVE" ":" prefix (,(string-append (assoc-ref inputs "octave")
2104 "/bin/octave"))))
2105 (symlink qucsator (string-append out "/bin/qucsator"))
2106 #t))))))
2107 (native-inputs
2108 `(("libtool-native" ,libtool)))
2109 (inputs
2110 `(("adms" ,adms)
2111 ("asco" ,asco)
2112 ("coreutils" ,coreutils)
2113 ("freehdl" ,freehdl)
2114 ("gcc-toolchain" ,gcc-toolchain)
2115 ("iverilog" ,iverilog)
2116 ("libtool" ,libtool)
2117 ("mpi" ,openmpi)
2118 ("ngspice" ,ngspice)
5537603f 2119 ("octave" ,octave-cli)
ef2c6b40
TF
2120 ("qt4" ,qt-4)
2121 ("qucs" ,qucs)
2122 ("sed" ,sed)
2123 ("xyce-serial" ,xyce-serial)
2124 ("xyce-parallel" ,xyce-parallel)))
2125 (home-page "https://ra3xdh.github.io/")
2126 (synopsis "Circuit simulator with graphical user interface")
2127 (description
2128 "Qucs-S is a spin-off of the Qucs cross-platform circuit simulator.
2129The S letter indicates SPICE. The purpose of the Qucs-S subproject is to use
2130free SPICE circuit simulation kernels with the Qucs GUI. It provides the
2131simulator backends @code{Qucsator}, @code{ngspice} and @code{Xyce}.")
2132 (license license:gpl2+)))
63b69574
AI
2133
2134(define-public librepcb
2135 (package
2136 (name "librepcb")
9e8f73c4 2137 (version "0.1.4")
63b69574
AI
2138 (source
2139 (origin
2140 (method url-fetch)
9be92490
AI
2141 (uri (string-append "https://download.librepcb.org/releases/"
2142 version "/librepcb-" version "-source.zip"))
63b69574 2143 (sha256
9e8f73c4 2144 (base32 "1b5dkanz3q0y5ag80w0l85hn7axrachb5m9zvyv4zvzrfy09wa88"))))
63b69574
AI
2145 (build-system gnu-build-system)
2146 (inputs
2147 `(("qtbase" ,qtbase)
9e8f73c4 2148 ("qtsvg" ,qtsvg)
63b69574
AI
2149 ("zlib" ,zlib)))
2150 (native-inputs
542d64fd 2151 `(("qttools" ,qttools) ; for lrelease
63b69574
AI
2152 ("unzip" ,unzip)))
2153 (arguments
2154 `(#:phases
2155 (modify-phases %standard-phases
2156 (replace 'configure
2157 (lambda* (#:key inputs outputs #:allow-other-keys)
2158 (mkdir-p "build")
2159 (chdir "build")
2160 (let ((lrelease (string-append (assoc-ref inputs "qttools")
2161 "/bin/lrelease"))
2162 (out (assoc-ref outputs "out")))
2163 (invoke "qmake"
2164 (string-append "QMAKE_LRELEASE=" lrelease)
2165 (string-append "PREFIX=" out)
2166 "../librepcb.pro")))))))
2167 (home-page "https://librepcb.org/")
2168 (synopsis "Electronic Design Automation tool")
2169 (description "LibrePCB is @dfn{Electronic Design Automation} (EDA)
2170software to develop printed circuit boards. It features human readable file
2171formats and complete project management with library, schematic and board
2172editors.")
2173 (license (list license:gpl3+
2174 license:boost1.0 ; libs/clipper,
2175 ; libs/optional/tests/catch.hpp,
2176 ; libs/sexpresso/tests/catch.hpp
2177 license:expat ; libs/delaunay-triangulation,
2178 ; libs/parseagle, libs/type_safe
2179 license:asl2.0 ; libs/fontobene, libs/googletest,
2180 ; libs/parseagle
2181 license:isc ; libs/hoedown
2182 license:cc0 ; libs/optional, libs/sexpresso
2183 license:bsd-2 ; libs/optional/tests/catch.hpp
2184 license:lgpl2.1+)))) ; libs/quazip
6f8ade6e
TS
2185
2186(define-public gpx
2187 (package
2188 (name "gpx")
2189 (version "2.5.2")
2190 (source (origin
2191 (method git-fetch)
2192 (uri (git-reference
b0e7b699 2193 (url "https://github.com/markwal/GPX")
6f8ade6e 2194 (commit version)))
f1d4d79f 2195 (file-name (git-file-name name version))
6f8ade6e
TS
2196 (sha256
2197 (base32
2198 "1yab269x8qyf7rd04vaxyqyjv4pzz9lp4sc4dwh927k23avr3rw5"))))
2199 (build-system gnu-build-system)
2200 (home-page "https://github.com/markwal/GPX")
2201 (synopsis "Converting gcode to x3g files for 3D printing")
2202 (description
2203 "GPX is a post processing utility for converting gcode output from 3D
2204slicing software to x3g files for standalone 3D printing on common 3D
2205printers.")
2206 (license license:gpl2+)))
356b32b9
AI
2207
2208(define-public gnucap
2209 (package
2210 (name "gnucap")
2211 (version "20171003")
2212 (source
2213 (origin
2214 (method url-fetch)
2215 (uri (string-append "https://git.savannah.gnu.org/cgit/gnucap.git/snapshot/gnucap-"
2216 version ".tar.gz"))
2217 (sha256
2218 (base32
2219 "16m09xa685qhj5fqq3bcgakrwnb74xhf5f7rpqkkf9fg8plzbb1g"))))
2220 (build-system gnu-build-system)
2221 (inputs
2222 `(("readline" ,readline)))
2223 (arguments
2224 `(#:phases
2225 (modify-phases %standard-phases
2226 (replace 'configure
2227 (lambda* (#:key outputs #:allow-other-keys)
2228 (let ((out (assoc-ref outputs "out")))
2229 ;; Set correct rpath so that gnucap finds libgnucap.so.
2230 (substitute* (list "apps/configure" "lib/configure"
2231 "main/configure" "modelgen/configure")
2232 (("LDFLAGS =")
2233 (string-append "LDFLAGS = -Wl,-rpath=" out "/lib")))
2234 ;; gnucap uses a hand-written configure script that expects the
2235 ;; --prefix argument to be the first argument passed to it.
2236 (invoke "./configure" (string-append "--prefix=" out)))))
2237 (replace 'check
2238 (lambda* (#:key outputs #:allow-other-keys)
2239 (let ((out (assoc-ref outputs "out"))
2240 (libpath "../lib/O:../apps/O"))
2241 (with-directory-excursion "tests"
2242 ;; Make test return non-zero exit code when a test fails.
2243 (substitute* "test"
2244 (("/bin/sh") "/bin/sh -e")
2245 (("\\|\\| echo \"\\*\\*\\*\\* \\$ii fails \\*\\*\\*\\*\"") ""))
2246 ;; Fix expected plugin search path for test c_attach.1.gc
2247 (substitute* "==out/c_attach.1.gc.out"
2248 (("/usr/local/lib/gnucap")
2249 (string-append libpath ":" out "/lib/gnucap")))
2250 ;; Set library path so that gnucap can find libgnucap.so
2251 ;; while running the tests.
2252 (setenv "LD_LIBRARY_PATH" libpath)
2253 (invoke "./test" "../main/O/gnucap" "" "test-output" "==out"))))))))
2254 (home-page "https://www.gnu.org/software/gnucap/")
2255 (synopsis "Mixed analog and digital circuit simulator")
2256 (description "GNUcap is a circuit analysis package. It offers a general
2257purpose circuit simulator and can perform DC and transient analyses, fourier
2258analysis and AC analysis. The engine is designed to do true mixed-mode
2259simulation.")
2260 (license license:gpl3+)))
5cded306
JL
2261
2262(define-public cutter
2263 (package
2264 (name "cutter")
ebe9d865 2265 (version "1.10.3")
5cded306
JL
2266 (source
2267 (origin
2268 (method git-fetch)
2269 (uri (git-reference
2270 (url "https://github.com/radareorg/cutter")
2271 (commit (string-append "v" version))))
2272 (file-name (git-file-name name version))
2273 (sha256
ebe9d865 2274 (base32 "0qj8jyij02nif4jpirl09ygwnv8a9zi3vkb5sf5s8mg7qwlpnvyk"))))
5cded306
JL
2275 (build-system gnu-build-system)
2276 (arguments
2277 `(#:phases
2278 (modify-phases %standard-phases
2279 (replace 'configure
2280 (lambda* (#:key inputs outputs #:allow-other-keys)
2281 (let ((out (assoc-ref outputs "out"))
2282 (radare2 (assoc-ref inputs "radare2")))
ebe9d865
TGR
2283 ;; Fix pkg-config detection ./src/lib_radare2.pri:PREFIX=/usr/lib
2284 ;; override `qmake PREFIX=`.
5cded306
JL
2285 (substitute* "./src/lib_radare2.pri"
2286 (("PREFIX") "R2PREFIX")
2287 (("R2PREFIX=/usr") (string-append "R2PREFIX=" radare2)))
2288 (invoke "qmake"
2289 (string-append "PREFIX=" out)
2290 "./src/Cutter.pro")))))))
2291 (native-inputs
2292 `(("pkg-config" ,pkg-config)))
2293 (inputs
2294 `(("qtbase" ,qtbase)
2295 ("qtsvg" ,qtsvg)
2296 ("openssl" ,openssl)
2297 ("radare2" ,radare2)))
2298 (home-page "https://github.com/radareorg/cutter")
2299 (synopsis "GUI for radare2 reverse engineering framework")
2300 (description "Cutter is a GUI for radare2 reverse engineering framework.
2301Its goal is making an advanced andcustomizable reverse-engineering platform
2302while keeping the user experience at mind. Cutter is created by reverse
2303engineers for reverse engineers.")
2304 (license (list license:cc-by-sa3.0 ;the "Iconic" icon set
2305 license:gpl3+)))) ;everything else
2c0040ae
SS
2306
2307(define-public lib3mf
2308 (package
2309 (name "lib3mf")
2310 (version "1.8.1")
2311 (source
2312 (origin
2313 (method git-fetch)
b0e7b699 2314 (uri (git-reference (url "https://github.com/3MFConsortium/lib3mf")
2c0040ae
SS
2315 (commit (string-append "v" version))))
2316 (file-name (git-file-name name version))
2317 (sha256
2318 (base32
2319 "11wpk6n9ga2p57h1dcrp37w77mii0r7r6mlrgmykf7rvii1rzgqd"))))
2320 (build-system cmake-build-system)
2321 (native-inputs
2322 `(("googletest-source" ,(package-source googletest))))
2323 (inputs
bb93042c 2324 `(("libuuid" ,util-linux "lib")))
2c0040ae
SS
2325 (arguments
2326 `(#:phases
2327 (modify-phases %standard-phases
2328 (add-after 'unpack 'unpack-googletest
2329 (lambda* (#:key inputs #:allow-other-keys)
2330 (copy-recursively (assoc-ref inputs "googletest-source")
2331 "UnitTests/googletest")
2332 #t)))))
2333 (synopsis "Implementation of the 3D Manufacturing Format (3MF) file standard")
2334 (description
2335 "Lib3MF is a C++ implementation of the 3D Manufacturing Format (3MF) file
2336standard. It offers a way to integrate 3MF reading and writing capabilities, as
2337well as conversion and validation tools for input and output data. The
2338specification can be downloaded at @url{http://3mf.io/specification/}.")
2339 (home-page "https://3mf.io/")
2340 (license license:bsd-2)))
2316ce51
SS
2341
2342(define-public openscad
2343 (package
2344 (name "openscad")
2345 (version "2019.05")
2346 (source
2347 (origin
2348 (method url-fetch)
2349 (uri (string-append "https://files.openscad.org/openscad-" version
2350 ".src.tar.gz"))
2351 (sha256
2352 (base32
c08a784c
SS
2353 "0nbgk5q5pgnw53la0kccdcpz2f4xf6d6076rkn0q08z57hkc85ha"))
2354 (patches (search-patches
2355 "openscad-parser-boost-1.72.patch"))))
2316ce51
SS
2356 (build-system cmake-build-system)
2357 (inputs
2358 `(("boost" ,boost)
2359 ("cgal" ,cgal)
2360 ("double-conversion" ,double-conversion)
2361 ("eigen" ,eigen)
2362 ("fontconfig" ,fontconfig)
2363 ("glew" ,glew)
2364 ("gmp" ,gmp)
2365 ("harfbuzz" ,harfbuzz)
2366 ("lib3mf" ,lib3mf)
2367 ("libxml2" ,libxml2)
2368 ("libzip" ,libzip)
2369 ("mpfr" ,mpfr)
2370 ("opencsg" ,opencsg)
2371 ("qscintilla" ,qscintilla)
2372 ("qtbase" ,qtbase)
2373 ("qtmultimedia" ,qtmultimedia)))
2374 (native-inputs
2375 `(("bison" ,bison)
2376 ("flex" ,flex)
2377 ("gettext" ,gettext-minimal)
2378 ("pkg-config" ,pkg-config)
2379 ("which" ,which)
2380 ;; the following are only needed for tests
2381 ("imagemagick" ,imagemagick)
2382 ("ps" ,procps)
2383 ("python" ,python)
ff337525 2384 ("xvfb" ,xorg-server-for-tests)))
2316ce51
SS
2385 (arguments
2386 `(#:phases
2387 (modify-phases %standard-phases
2388 (replace 'configure
2389 (lambda* (#:key outputs #:allow-other-keys)
2390 (invoke "qmake"
2391 (string-append "PREFIX=" (assoc-ref outputs "out")))
2392 #t))
2393 (replace 'check
2394 (lambda _
2395 (with-directory-excursion "tests"
2396 (invoke "cmake" ".")
2397 (invoke "make")
2398 (invoke "ctest"))
2399 ;; strip python test files since lib dir ends up in out/share
2400 (for-each delete-file
2401 (find-files "libraries/MCAD" ".*\\.py"))
2402 #t)))))
2403 (synopsis "Script-based 3D modeling application")
2404 (description
2405 "OpenSCAD is a 3D Computer-aided Design (CAD) application. Unlike an
2406interactive modeler, OpenSCAD generates 3D models from a script, giving you
2407full programmatic control over your models.")
2408 (home-page "https://www.openscad.org/")
2409 (license license:gpl2+)))
2895a87f 2410
4cd9de60
JS
2411(define-public freecad
2412 (package
2413 (name "freecad")
ae5525c5 2414 (version "0.18.4")
4cd9de60
JS
2415 (source
2416 (origin
2417 (method git-fetch)
2418 (uri (git-reference
b0e7b699 2419 (url "https://github.com/FreeCAD/FreeCAD")
4cd9de60 2420 (commit version)))
72099cb0
BD
2421 (modules '((guix build utils)))
2422 (snippet
2423 '(begin
2424 ;; Fix build with Python 3.8, see
2425 ;; <https://tracker.freecadweb.org/view.php?id=4143>.
2426 (substitute* "src/Base/swigpyrun.inl"
2427 (("PyObject \\*modules = interp->modules;")
2428 "PyObject *modules = PyEval_GetBuiltins();"))
2429 #t))
4cd9de60
JS
2430 (file-name (git-file-name name version))
2431 (sha256
2432 (base32
ae5525c5 2433 "170hk1kgrvsddrwykp24wyj0cha78zzmzbf50gn98x7ngqqs395s"))))
25b99921 2434 (build-system qt-build-system)
4cd9de60
JS
2435 (native-inputs
2436 `(("doxygen" ,doxygen)
2437 ("graphviz" ,graphviz)
2438 ("qttools" ,qttools)
2439 ("pkg-config" ,pkg-config)
2440 ("swig" ,swig)))
2441 (inputs
2442 `(("boost" ,boost)
2443 ("coin3D" ,coin3D)
2444 ("eigen" ,eigen)
2445 ("freetype" ,freetype)
2446 ("glew" ,glew)
2447 ("hdf5" ,hdf5-1.10)
2448 ("libarea" ,libarea)
2449 ("libmedfile" ,libmedfile)
2450 ("libspnav" ,libspnav)
2451 ("libxi" ,libxi)
2452 ("libxmu" ,libxmu)
2453 ("openmpi" ,openmpi)
2454 ("opencascade-occt" ,opencascade-occt)
2455 ("python-matplotlib" ,python-matplotlib)
2456 ("python-pyside-2" ,python-pyside-2)
2457 ("python-pyside-2-tools" ,python-pyside-2-tools)
2458 ("python-shiboken-2" ,python-shiboken-2)
2459 ("python-wrapper" ,python-wrapper)
132c1915 2460 ("qtbase" ,qtbase)
4cd9de60
JS
2461 ("qtsvg" ,qtsvg)
2462 ("qtx11extras" ,qtx11extras)
2463 ("qtxmlpatterns" ,qtxmlpatterns)
2464 ;; qtwebkit is optional. We remove it currently, because it takes
2465 ;; much time to compile and substitutes are often unavailable
2466 ;;("qtwebkit" ,qtwebkit)
2467 ("tbb" ,tbb)
2468 ("vtk" ,vtk)
2469 ("xerces-c" ,xerces-c)
2470 ("zlib" ,zlib)))
2471 (arguments
2472 `(#:tests? #f
2473 #:configure-flags
2474 (list
2475 "-DBUILD_QT5=ON"
2476 (string-append "-DCMAKE_INSTALL_LIBDIR="
2477 (assoc-ref %outputs "out") "/lib"))
2478 #:phases
2479 (modify-phases %standard-phases
2480 (add-before 'configure 'restore-pythonpath
2481 (lambda _
2482 (substitute* "src/Main/MainGui.cpp"
2483 (("_?putenv\\(\"PYTHONPATH=\"\\);") ""))
2484 #t))
2485 (add-after 'install 'wrap-pythonpath
2486 (lambda* (#:key outputs #:allow-other-keys)
2487 (let ((out (assoc-ref outputs "out")))
2488 (wrap-program (string-append out "/bin/FreeCAD")
2489 (list "PYTHONPATH"
2490 'prefix (list (getenv "PYTHONPATH")))))
2491 #t)))))
2492 (home-page "https://www.freecadweb.org/")
2493 (synopsis "Your Own 3D Parametric Modeler")
2494 (description
2495 "FreeCAD is a general purpose feature-based, parametric 3D modeler for
2496CAD, MCAD, CAx, CAE and PLM, aimed directly at mechanical engineering and
2497product design but also fits a wider range of uses in engineering, such as
2498architecture or other engineering specialties. It is 100% Open Source (LGPL2+
2499license) and extremely modular, allowing for very advanced extension and
2500customization.")
2501 (license
2502 (list
2503 license:lgpl2.1+
2504 license:lgpl2.0+
2505 license:gpl3+
2506 license:bsd-3))))
2507
704853fb
JS
2508(define-public libmedfile
2509 (package
2510 (name "libmedfile")
2511 (version "4.0.0")
2512 (source
2513 (origin
2514 (method url-fetch)
2515 (uri (string-append
2516 "https://files.salome-platform.org/Salome/other/med-"
2517 version ".tar.gz"))
2518 (sha256
2519 (base32
2520 "017h9p0x533fm4gn6pwc8kmp72rvqmcn6vznx72nkkl2b05yjx54"))))
2521 (build-system cmake-build-system)
2522 (inputs `(("hdf5" ,hdf5-1.10)))
2523 (arguments
2524 `(#:phases
2525 (modify-phases %standard-phases
2526 (add-after 'install 'remove-test-output
2527 (lambda* (#:key outputs #:allow-other-keys)
2528 (let ((out (assoc-ref outputs "out")))
2529 (delete-file-recursively
2530 (string-append out "/bin/testc"))
2531 #t))))))
2532 (home-page "https://www.salome-platform.org")
2533 (synopsis "Library to read and write MED files")
2534 (description
2535 "The purpose of the MED module is to provide a standard for storing and
2536recovering computer data associated to numerical meshes and fields, and to
2537facilitate the exchange between codes and solvers.
2538
2539The persistent data storage is based upon HDF format (like CGNS, a standard
2540developed by Boeing and NASA in the area of Computational Fluid Dynamic).
2541
2542MED also provides structures to hold data on meshes and fields. These
2543structures are exchanged between solvers, hide the communication level (CORBA
2544or MPI), and offer persistence (read/write in .med files).
2545
2546The main benefit of a common exchange format is reduced complexity of code
2547coupling. It also allows sharing such high level functionalities as
2548computation of nodal connectivity of sub-elements (faces and edges),
2549arithmetic operations on fields, entity location functionalities, and
2550interpolation toolkit.")
2551 (license license:gpl3+)))
2552
2003e837
JS
2553(define-public libarea
2554 (let ((revision "1")
2555 (commit "8f8bac811c10f1f01fda0d742a18591f61dd76ee"))
2556 (package
2557 (name "libarea")
2558 (version (git-version "0" revision commit))
2559 (source
2560 (origin
2561 (method git-fetch)
b0e7b699 2562 (uri (git-reference (url "https://github.com/Heeks/libarea")
2003e837
JS
2563 (commit commit)))
2564 (file-name (git-file-name name version))
2565 (sha256
2566 (base32 "0pvqz6cabxqdz5y26wnj6alkn8v5d7gkx0d3h8xmg4lvy9r3kh3g"))))
2567 (build-system gnu-build-system)
2568 (inputs `(("boost" ,boost)
2569 ("python-wrapper" ,python-wrapper)))
2570 (native-inputs
c085742e 2571 `(("cmake" ,cmake-minimal)))
2003e837
JS
2572 (arguments
2573 `(#:tests? #f
2574 #:phases
2575 (modify-phases %standard-phases
2576 (add-after 'configure 'cmake-configure
2577 (lambda* (#:key inputs outputs #:allow-other-keys)
2578 (let ((out (assoc-ref outputs "out"))
2579 (cmake (assoc-ref inputs "cmake")))
2580 (mkdir-p "build")
2581 (invoke "cmake"
2582 (string-append "-DCMAKE_INSTALL_PREFIX=" out)))))
2583 (delete 'configure))))
2584 (home-page "https://github.com/Heeks/libarea")
2585 (synopsis
2586 "Library and python module for pocketing and profiling operations")
2587 (description
2588 "Area is a CAM-related software for pocketing operation.
2589
2590This project provides library and associated python-module to compute pocket
2591operations.")
2592 (license (list
2593 license:bsd-3
2594 license:gpl3+)))))
2595
2895a87f
JS
2596(define-public libspnav
2597 (package
2598 (name "libspnav")
2599 (version "0.2.3")
2600 (source (origin
2601 (method git-fetch)
2602 (uri (git-reference
b0e7b699 2603 (url "https://github.com/FreeSpacenav/libspnav")
2895a87f
JS
2604 (commit (string-append "libspnav-" version))))
2605 (sha256
2606 (base32
2607 "098h1jhlj87axpza5zgy58prp0zn94wyrbch6x0s7q4mzh7dc8ba"))
2608 (file-name (git-file-name name version))))
2609 (build-system gnu-build-system)
2610 (inputs
2611 `(("libx11" ,libx11)))
2612 (arguments `(#:tests? #f))
2613 (home-page "http://spacenav.sourceforge.net/")
2614 (synopsis
2615 "Library for communicating with spacenavd or 3dxsrv")
2616 (description
2617 "The libspnav library is provided as a replacement of the magellan
2618library. It provides a cleaner, and more orthogonal interface. libspnav
2619supports both the original X11 protocol for communicating with the driver, and
2620the new alternative non-X protocol. Programs that choose to use the X11
2621protocol, are automatically compatible with either the free spacenavd driver
2622or the official 3dxserv, as if they were using the magellan SDK.
2623
2624Also, libspnav provides a magellan API wrapper on top of the new API. So, any
2625applications that were using the magellan library, can switch to libspnav
18a69803 2626without any changes. And programmers that are familiar with the magellan API
2895a87f
JS
2627can continue using it with a free library without the restrictions of the
2628official SDK.")
2629 (license license:bsd-3)))
e3c3fb1d
EZ
2630
2631(define-public openctm
2632 (let ((revision 603))
2633 ;; Previous versions don't compile, they need to link libGL and libGLU.
2634 ;; Fixed in this revision.
2635 (package
2636 (name "openctm")
2637 (version (string-append "1.0.3." (number->string revision)))
2638 (source
2639 (origin
2640 (method svn-fetch)
2641 (uri (svn-reference
2642 (url "https://svn.code.sf.net/p/openctm/code/trunk")
2643 (revision revision)))
2644 (file-name (string-append name "-" version "-checkout"))
2645 (sha256
2646 (base32 "01wb70m48xh5gwhv60a5brv4sxl0i0rh038w32cgnlxn5x86s9f1"))))
2647 (build-system gnu-build-system)
2648 (native-inputs
525fd26d
EZ
2649 `(("pkg-config" ,pkg-config)))
2650 (inputs
e3c3fb1d
EZ
2651 `(("mesa" ,mesa)
2652 ("glu" ,glu)
2653 ("glut" ,freeglut)
525fd26d 2654 ("gtk" ,gtk+-2)))
e3c3fb1d
EZ
2655 (arguments
2656 `(#:tests? #f ;no tests
2657 #:phases
2658 (modify-phases %standard-phases
2659 (replace 'configure
2660 (lambda* (#:key outputs #:allow-other-keys)
2661 (rename-file "Makefile.linux" "Makefile")
2662 (let ((out (assoc-ref outputs "out")))
2663 ;; Create output directories.
2664 (mkdir-p (string-append out "/lib"))
2665 (mkdir-p (string-append out "/include"))
2666 (mkdir-p (string-append out "/bin"))
2667 ;; Fix rpath.
2668 (substitute* "tools/Makefile.linux"
2669 (("-rpath,\\.")
2670 (string-append "-rpath," out "/lib/"))
2671 (("/usr/local")
2672 out))
2673 ;; Set right output.
2674 (substitute* "Makefile"
2675 (("/usr/lib")
2676 (string-append out "/lib"))
2677 (("\\/usr\\/local")
2678 out))
2679 #t))))))
2680 (synopsis "3D triangle mesh format and related tools and libraries")
2681 (description "OpenCTM is a file format, a software library and a tool set
2682for compression of 3D triangle meshes. The geometry is compressed to a
2683fraction of comparable file formats (3DS, STL, COLLADA...), and the format is
2684accessible through a simple API")
2685 (license license:zlib)
2686 (home-page "http://openctm.sourceforge.net/"))))
1c85ecec
EZ
2687
2688(define-public lib3ds
2689 (package
2690 (name "lib3ds")
2691 (version "1.3.0")
2692 (source
2693 (origin
2694 (method url-fetch)
2695 (uri (string-append
2696 "https://storage.googleapis.com/google-code-archive-downloads"
2697 "/v2/code.google.com/lib3ds/lib3ds-" version ".zip"))
2698 (sha256
2699 (base32 "1qr9arfdkjf7q11xhvxwzmhxqz3nhcjkyb8zzfjpz9jm54q0rc7m"))))
2700 (build-system gnu-build-system)
2701 (native-inputs
2702 `(("unzip" ,unzip)))
2703 (home-page "https://code.google.com/archive/p/lib3ds")
2704 (synopsis "3DS format file toolkit")
2705 (description "Lib3ds is a toolkit for handling the 3DS format for 3D
2706model files. Its main goal is to simplify the creation of 3DS import and
2707export filters.")
2708 (license license:lgpl2.1+)))
2c74e870
EZ
2709
2710(define-public meshlab
2711 (package
2712 (name "meshlab")
667e3f49 2713 (version "2020.06")
2c74e870
EZ
2714 (source (origin
2715 (method git-fetch)
2716 (uri (git-reference
2717 (url "https://github.com/cnr-isti-vclab/meshlab")
2718 (commit (string-append "Meshlab-" version))
2719 (recursive? #t)))
2720 (file-name (git-file-name name version))
2721 (sha256
667e3f49 2722 (base32 "1cgx24wxh2ah5pff51rcrk6x8qcdjpkxcdak7s4cfzmxvjlshydd"))))
2c74e870
EZ
2723 (build-system cmake-build-system)
2724 (inputs
2725 `(("qtbase" ,qtbase)
2726 ("qtscript" ,qtscript)
2727 ("qtxmlpatterns" ,qtxmlpatterns)
2728 ("mesa" ,mesa)
2729 ("glu" ,glu)
2730 ("glew" ,glew)
2731 ("muparser" ,muparser)
2732 ("gmp" ,gmp)
2733 ("eigen" ,eigen)
2734 ("libfreenect" ,libfreenect)
2735 ("lib3ds" ,lib3ds)
2736 ("openctm" ,openctm)
2737 ;; FIXME: Compilation fails with system qhull:
2738 ;; https://github.com/cnr-isti-vclab/meshlab/issues/678
2739 ;; ("qhull" ,qhull)
2740 ))
2741 (arguments
2742 `(#:tests? #f ; Has no tests
2743 #:phases
2744 (modify-phases %standard-phases
2745 (add-after 'unpack 'go-to-source-dir
2746 (lambda _ (chdir "src") #t))
2747 (add-after 'install 'move-files
2748 (lambda* (#:key outputs #:allow-other-keys)
2749 (let ((lib (string-append (assoc-ref outputs "out")
2750 "/lib")))
2751 (rename-file
2752 (string-append lib "/meshlab/libmeshlab-common.so")
2753 (string-append lib "/libmeshlab-common.so"))
2754 #t))))))
2755 (synopsis "3D triangular mesh processing and editing software")
2756 (home-page "https://www.meshlab.net/")
2757 (description "MeshLab is a system for the processing and
2758editing of unstructured large 3D triangular meshes. It is aimed to help the
2759processing of the typical not-so-small unstructured models arising in 3D
2760scanning, providing a set of tools for editing, cleaning, healing, inspecting,
2761rendering and converting this kind of meshes. These tools include MeshLab
2762proper, a versatile program with a graphical user interface, and meshlabserver,
2763a program that can perform mesh processing tasks in batch mode, without a
2764GUI.")
2765 (license license:gpl3+)))
512d23c6
W
2766
2767(define-public poke
2768 ;; Upstream has yet to tag any releases.
2769 (let ((commit "d33317a46e3b7c48130a471a48cbfea1abab70d8")
2770 (revision "0"))
2771 (package
2772 (name "poke")
2773 (version (git-version "0.0.0" revision commit))
2774 (source
2775 (origin
2776 (method git-fetch)
2777 (uri (git-reference
2778 (url "git://git.savannah.gnu.org/poke.git")
2779 (commit commit)
2780 (recursive? #t)))
2781 (sha256
2782 (base32 "1dd0r1x123bqi78lrsk58rvg9c9wka0kywdyzn7g3i4hkh54xb7d"))
2783 (file-name (git-file-name name version))))
2784 (build-system gnu-build-system)
2785 ;; The GUI, which we elide, requires tcl and tk.
2786 (native-inputs `(("autoconf" ,autoconf)
2787 ("automake" ,automake)
2788 ;; Requires bison 3.6+ but we currently only have 3.5.
2789 ;; Bison 3.6 will be available in the next core update.
2790 ("bison-3.6" ,bison-3.6)
2791 ("clisp" ,clisp)
2792 ("dejagnu" ,dejagnu)
2793 ("flex" ,flex)
2794 ("gettext" ,gettext-minimal)
2795 ("help2man" ,help2man)
2796 ("libtool" ,libtool)
2797 ("perl" ,perl)
2798 ("pkg-config" ,pkg-config)
2799 ("python-2" ,python-2)
2800 ("python-3" ,python-3)
2801 ("texinfo" ,texinfo)))
2802 ;; FIXME: Enable NBD support by adding `libnbd' (currently unpackaged).
2803 ;; FIXME: A "hyperlinks-capable" `libtexststyle' needed for the hserver.
2804 (inputs `(("json-c" ,json-c)
2805 ("libgc" ,libgc)
2806 ("readline" ,readline)))
2807 (arguments
2808 ;; To build the GUI, add the `--enable-gui' configure flag.
2809 ;; To enable the "hyperlink server", add the `--enable-hserver' flag.
2810 `(#:configure-flags '("--enable-mi")
2811 #:phases (modify-phases %standard-phases
2812 ;; This is a non-trivial bootstrap that needs many of the
2813 ;; native-inputs and thus must run after `patch-shebangs'.
2814 (delete 'bootstrap)
2815 (add-after 'patch-source-shebangs 'bootstrap
2816 (lambda _
2817 (invoke "./bootstrap" "--no-git"
2818 "--no-bootstrap-sync"
2819 "--gnulib-srcdir=gnulib")
2820 #t)))))
2821 (home-page "http://jemarch.net/poke.html")
2822 (synopsis "Interactive, extensible editor for binary data")
2823 (description "GNU poke is an interactive, extensible editor for binary
2824 data. Not limited to editing basic entities such as bits and bytes, it
2825 provides a full-fledged procedural, interactive programming language designed
2826 to describe data structures and to operate on them.")
2827 (license license:gpl3+))))