nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 callPackage,
3 fetchgit,
4 installShellFiles,
5 lib,
6 readline,
7 runCommand,
8 stdenv,
9 termcap,
10 writeScript,
11}:
12
13stdenv.mkDerivation (finalAttrs: {
14 pname = "gnucap";
15 version = "20240220";
16
17 src = fetchgit {
18 url = "https://https.git.savannah.gnu.org/git/gnucap.git";
19 tag = finalAttrs.version;
20 hash = "sha256-aZMiNKwI6eQZAxlF/+GoJhKczohgGwZ0/Wgpv3+AhYY=";
21 };
22
23 nativeBuildInputs = [
24 installShellFiles
25 ];
26
27 buildInputs = [
28 readline
29 termcap
30 ];
31
32 doCheck = true;
33
34 postInstall = ''
35 installManPage man/*
36 '';
37
38 passthru = {
39 tests = {
40 verilog = runCommand "gnucap-verilog-test" { } ''
41 echo "attach mgsim" | ${
42 finalAttrs.finalPackage.withPlugins (p: [ p.verilog ])
43 }/bin/gnucap -a msgsim > $out
44 cat $out | grep "verilog: already installed"
45 '';
46 };
47
48 plugins = callPackage ./plugins.nix { };
49 withPlugins =
50 p:
51 let
52 gnucap = finalAttrs.finalPackage;
53 selectedPlugins = p gnucap.plugins;
54 wrapper = writeScript "gnucap" ''
55 export GNUCAP_PLUGPATH=${gnucap}/lib/gnucap
56 for plugin in ${builtins.concatStringsSep " " selectedPlugins}; do
57 export GNUCAP_PLUGPATH=$plugin/lib/gnucap:$GNUCAP_PLUGPATH
58 done
59 ${lib.getExe gnucap}
60 '';
61 in
62 stdenv.mkDerivation {
63 pname = "${finalAttrs.pname}-with-plugins";
64 inherit (finalAttrs) version;
65
66 propagatedBuildInputs = selectedPlugins;
67
68 dontUnpack = true;
69
70 installPhase = ''
71 mkdir -p $out/bin
72 cp ${wrapper} $out/bin/gnucap
73 '';
74
75 inherit (finalAttrs) meta;
76 };
77 };
78
79 meta = {
80 description = "Gnu Circuit Analysis Package";
81 longDescription = ''
82 Gnucap is a modern general purpose circuit simulator with several advantages over Spice derivatives.
83 It performs nonlinear dc and transient analyses, fourier analysis, and ac analysis.
84 '';
85 homepage = "http://www.gnucap.org/";
86 changelog = "https://gitweb.git.savannah.gnu.org/gitweb/?p=gnucap.git;a=blob;f=NEWS";
87 license = lib.licenses.gpl3Only;
88 platforms = lib.platforms.all;
89 broken = stdenv.hostPlatform.isDarwin; # Relies on LD_LIBRARY_PATH
90 maintainers = [ lib.maintainers.raboof ];
91 mainProgram = "gnucap";
92 };
93})