From 710cc1a402062896444c8682939d623986e27d23 Mon Sep 17 00:00:00 2001 From: Theodoros Foradis Date: Sat, 9 Sep 2017 20:57:46 +0300 Subject: [PATCH] gnu: Add libngspice and ngspice. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/packages/engineering.scm (libngspice, ngspice): New variables. Signed-off-by: Ludovic Courtès --- gnu/packages/engineering.scm | 102 +++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/gnu/packages/engineering.scm b/gnu/packages/engineering.scm index 5492f1c629..0356fbfe9e 100644 --- a/gnu/packages/engineering.scm +++ b/gnu/packages/engineering.scm @@ -1178,3 +1178,105 @@ servers, ...") "ASCO brings circuit optimization capabilities to existing SPICE simulators using a high-performance parallel differential evolution (DE) optimization algorithm.") (license license:gpl2+))) + +(define-public libngspice + ;; Note: The ngspice's build system does not allow us to build both the + ;; library and the executables in one go. Thus, we have two packages. + ;; See . + (package + (name "libngspice") + (version "26") + (source (origin + (method url-fetch) + (uri (string-append "mirror://sourceforge/ngspice/ng-spice-rework/" + version "/ngspice-" version ".tar.gz")) + (sha256 + (base32 + "02019ndcl057nq9z41nxycqba7wxlb081ibvfj9jv010nz431qji")) + (modules '((guix build utils))) + ;; We remove the non-free cider and build without it. + (snippet + '(begin + (delete-file-recursively "src/ciderlib") + (delete-file "src/ciderinit") + (substitute* "configure" + (("src/ciderlib/Makefile") "") + (("src/ciderlib/input/Makefile") "") + (("src/ciderlib/support/Makefile") "") + (("src/ciderlib/oned/Makefile") "") + (("src/ciderlib/twod/Makefile") "")))))) + (build-system gnu-build-system) + (arguments + `(;; No tests for libngspice exist. + ;; The transient tests for ngspice fail. + #:tests? #f + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-timestamps + (lambda _ + (substitute* "configure" + (("`date`") "Do 1. Jan 00:00:00 UTC 1970")) + #t)) + (add-after 'unpack 'delete-program-manuals + (lambda _ + (substitute* "man/man1/Makefile.in" + (("^man_MANS = ngspice\\.1 ngnutmeg\\.1 ngsconvert\\.1 ngmultidec\\.1") + "man_MANS = ")) + #t)) + (add-after 'install 'delete-script-files + (lambda* (#:key outputs #:allow-other-keys) + (delete-file-recursively + (string-append (assoc-ref outputs "out") + "/share/ngspice/scripts"))))) + #:configure-flags + (list "--enable-openmp" + "--enable-xspice" + "--with-ngshared" + "--with-readline=yes"))) + (native-inputs + `(("bison" ,bison) + ("flex" ,flex))) + (inputs + `(("libxaw" ,libxaw) + ("mpi" ,openmpi) + ("readline" ,readline))) + (home-page "http://ngspice.sourceforge.net/") + (synopsis "Mixed-level/mixed-signal circuit simulator") + (description + "Ngspice is a mixed-level/mixed-signal circuit simulator. It includes +@code{Spice3f5}, a circuit simulator, and @code{Xspice}, an extension that +provides code modeling support and simulation of digital components through +an embedded event driven algorithm.") + (license (list license:lgpl2.0+ ; code in frontend/numparam + (license:non-copyleft "file:///COPYING") ; spice3 bsd-style + license:public-domain)))) ; xspice + +(define-public ngspice + ;; The ngspice executables (see libngpsice above.) + (package (inherit libngspice) + (name "ngspice") + (arguments + (substitute-keyword-arguments (package-arguments libngspice) + ((#:configure-flags flags) + `(delete "--with-ngshared" ,flags)) + ((#:phases phases) + `(modify-phases ,phases + (add-after 'unpack 'delete-include-files + (lambda _ + (substitute* "src/Makefile.in" + (("^SUBDIRS = misc maths frontend spicelib include/ngspice") + "SUBDIRS = misc maths frontend spicelib")) + #t)) + (add-after 'install 'delete-cmpp-dlmain + (lambda* (#:key outputs #:allow-other-keys) + (for-each (lambda (file) + (delete-file + (string-append (assoc-ref outputs "out") + file))) + '("/bin/cmpp" "/share/ngspice/dlmain.c")) + #t)) + (delete 'delete-program-manuals) + (delete 'delete-script-files))))) + (inputs + `(("libngspice" ,libngspice) + ("readline" ,readline)))))