btrbk: add mainProgram
[NixPkgs.git] / pkgs / by-name / pi / picoscope / package.nix
blob056a682d1c1cb9492c67e57d305877eb999d6f45
1 { stdenv, lib, fetchurl, dpkg, makeWrapper , mono, gtk-sharp-3_0
2 , glib, libusb1 , zlib, gtk3-x11, callPackage, writeTextDir
3 , scopes ? [
4   "picocv"
5   "ps2000"
6   "ps2000a"
7   "ps3000"
8   "ps3000a"
9   "ps4000"
10   "ps4000a"
11   "ps5000"
12   "ps5000a"
13   "ps6000"
14   "ps6000a"
15 ] }:
17 let
18   shared_meta = lib: {
19     homepage = "https://www.picotech.com/downloads/linux";
20     maintainers = with lib.maintainers; [ wirew0rm ] ++ lib.teams.lumiguide.members;
21     platforms = [ "x86_64-linux" ];
22     license = lib.licenses.unfree;
23   };
25   libpicoipp = callPackage ({ stdenv, lib, fetchurl, autoPatchelfHook, dpkg }:
26     stdenv.mkDerivation rec {
27       pname = "libpicoipp";
28       inherit (sources.libpicoipp) version;
29       src = fetchurl { inherit (sources.libpicoipp) url sha256; };
30       nativeBuildInputs = [ dpkg autoPatchelfHook ];
31       buildInputs = [ (lib.getLib stdenv.cc.cc) ];
32       sourceRoot = ".";
33       unpackCmd = "dpkg-deb -x $src .";
34       installPhase = ''
35         runHook preInstall
36         mkdir -p $out/lib
37         cp -d opt/picoscope/lib/* $out/lib
38         install -Dt $out/usr/share/doc/libpicoipp usr/share/doc/libpicoipp/copyright
39         runHook postInstall
40       '';
41       meta = shared_meta lib // {
42         sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
43         description = "library for picotech oscilloscope software";
44       };
45     }) { };
47   # If we don't have a platform available, put a dummy version here, so at
48   # least evaluation succeeds.
49   sources =
50     (lib.importJSON ./sources.json).${stdenv.system} or (throw "unsupported system ${stdenv.system}");
52   scopePkg = name:
53     { url, version, sha256 }:
54     stdenv.mkDerivation rec {
55       pname = "lib${name}";
56       inherit version;
57       src = fetchurl { inherit url sha256; };
58       # picoscope does a signature check, so we can't patchelf these
59       nativeBuildInputs = [ dpkg ];
60       sourceRoot = ".";
61       unpackCmd = "dpkg-deb -x $src .";
62       installPhase = ''
63         runHook preInstall
64         mkdir -p $out/lib
65         cp -d opt/picoscope/lib/* $out/lib
66          runHook postInstall
67       '';
68       meta = with lib;
69         shared_meta lib // {
70           description = "library for picotech oscilloscope ${name} series";
71         };
72     };
74   scopePkgs = lib.mapAttrs scopePkg sources;
76 in stdenv.mkDerivation rec {
77   pname = "picoscope";
78   inherit (sources.picoscope) version;
80   src = fetchurl { inherit (sources.picoscope) url sha256; };
82   nativeBuildInputs = [ dpkg makeWrapper ];
83   buildInputs = [ gtk-sharp-3_0 mono glib libusb1 zlib ];
85   unpackCmd = "dpkg-deb -x $src .";
86   sourceRoot = ".";
87   scopeLibs = lib.attrVals (map (x: "lib${x}") scopes) scopePkgs;
88   MONO_PATH = "${gtk-sharp-3_0}/lib/mono/gtk-sharp-3.0:" + (lib.makeLibraryPath
89     ([
90       glib
91       gtk3-x11
92       gtk-sharp-3_0
93       libusb1
94       zlib
95       libpicoipp
96     ] ++ scopeLibs));
98   installPhase = ''
99     runHook preInstall
100     mkdir -p $out/
101     cp -dr usr/share $out/share
102     cp -dr opt/picoscope/* $out/
103     makeWrapper "$(command -v mono)" $out/bin/picoscope \
104       --add-flags $out/lib/PicoScope.GTK.exe \
105       --prefix MONO_PATH : "$MONO_PATH" \
106       --prefix LD_LIBRARY_PATH : "$MONO_PATH" \
107       --set LANG C
108     runHook postInstall
109   '';
111   # usage:
112   # services.udev.packages = [ pkgs.picoscope.rules ];
113   # users.groups.pico = {};
114   # users.users.you.extraGroups = [ "pico" ];
115   passthru.rules = writeTextDir "lib/udev/rules.d/95-pico.rules" ''
116     SUBSYSTEMS=="usb", ATTRS{idVendor}=="0ce9", MODE="664",GROUP="pico"
117   '';
119   meta = with lib;
120     shared_meta lib // {
121       description =
122         "Oscilloscope application that works with all PicoScope models";
123       longDescription = ''
124         PicoScope for Linux is a powerful oscilloscope application that works
125         with all PicoScope models. The most important features from PicoScope
126         for Windows are included—scope, spectrum analyzer, advanced triggers,
127         automated measurements, interactive zoom, persistence modes and signal
128         generator control. More features are being added all the time.
130         Waveform captures can be saved for off-line analysis, and shared with
131         PicoScope for Linux, PicoScope for macOS and PicoScope for Windows
132         users, or exported in text, CSV and MathWorks MATLAB 4 formats.
133       '';
134       sourceProvenance = with sourceTypes; [ binaryBytecode ];
135     };