ripasso-cursive: cosmetic changes (#361736)
[NixPkgs.git] / pkgs / by-name / se / segger-jlink / package.nix
bloba092097bce3bc1b92e9f17419e9b2f30ef723e7d
1 { lib
2 , stdenv
3 , fetchurl
4 , callPackage
5 , autoPatchelfHook
6 , udev
7 , config
8 , acceptLicense ? config.segger-jlink.acceptLicense or false
9 , headless ? false
10 , makeDesktopItem
11 , copyDesktopItems
14 let
15   source = import ./source.nix;
16   supported = removeAttrs source ["version"];
18   platform = supported.${stdenv.system} or (throw "unsupported platform ${stdenv.system}");
20   inherit (source) version;
22   url = "https://www.segger.com/downloads/jlink/JLink_Linux_V${version}_${platform.name}.tgz";
24   src =
25     assert !acceptLicense -> throw ''
26       Use of the "SEGGER JLink Software and Documentation pack" requires the
27       acceptance of the following licenses:
29         - SEGGER Downloads Terms of Use [1]
30         - SEGGER Software Licensing [2]
32       You can express acceptance by setting acceptLicense to true in your
33       configuration. Note that this is not a free license so it requires allowing
34       unfree licenses as well.
36       configuration.nix:
37         nixpkgs.config.allowUnfree = true;
38         nixpkgs.config.segger-jlink.acceptLicense = true;
40       config.nix:
41         allowUnfree = true;
42         segger-jlink.acceptLicense = true;
44       [1]: ${url}
45       [2]: https://www.segger.com/purchase/licensing/
46     '';
47       fetchurl {
48         inherit url;
49         inherit (platform) hash;
50         curlOpts = "--data accept_license_agreement=accepted";
51       };
53   qt4-bundled = callPackage ./qt4-bundled.nix { inherit src version; };
55 in stdenv.mkDerivation {
56   pname = "segger-jlink";
57   inherit src version;
59   nativeBuildInputs = [
60     autoPatchelfHook
61   ] ++ lib.optionals (!headless) [
62     copyDesktopItems
63   ];
65   buildInputs = lib.optionals (!headless) [
66     qt4-bundled
67   ];
69   # Udev is loaded late at runtime
70   appendRunpaths = [
71     "${udev}/lib"
72   ];
74   dontConfigure = true;
75   dontBuild = true;
77   desktopItems = lib.optionals (!headless) (
78     map (entry:
79       (makeDesktopItem {
80         name = entry;
81         exec = entry;
82         icon = "applications-utilities";
83         desktopName = entry;
84         genericName = "SEGGER ${entry}";
85         categories = [ "Development" ];
86         type = "Application";
87         terminal = false;
88         startupNotify = false;
89       })
90     ) [
91       "JFlash"
92       "JFlashLite"
93       "JFlashSPI"
94       "JLinkConfig"
95       "JLinkGDBServer"
96       "JLinkLicenseManager"
97       "JLinkRTTViewer"
98       "JLinkRegistration"
99       "JLinkRemoteServer"
100       "JLinkSWOViewer"
101       "JLinkUSBWebServer"
102       "JMem"
103     ]
104   );
106   installPhase = ''
107     runHook preInstall
109     mkdir -p $out/opt
111     ${lib.optionalString (!headless) ''
112       # Install binaries and runtime files into /opt/
113       mv J* ETC GDBServer Firmwares $out/opt
115       # Link executables into /bin/
116       mkdir -p $out/bin
117       for binr in $out/opt/*Exe; do
118         binrlink=''${binr#"$out/opt/"}
119         ln -s $binr $out/bin/$binrlink
120         # Create additional symlinks without "Exe" suffix
121         binrlink=''${binrlink/%Exe}
122         ln -s $binr $out/bin/$binrlink
123       done
125       # Copy special alias symlinks
126       for slink in $(find $out/opt/. -type l); do
127         cp -P -n $slink $out/bin || true
128         rm $slink
129       done
130     ''}
132     # Install libraries
133     install -Dm444 libjlinkarm.so* -t $out/lib
134     for libr in $out/lib/libjlinkarm.*; do
135       ln -s $libr $out/opt
136     done
138     # Install docs and examples
139     mkdir -p $out/share
140     mv Doc $out/share/docs
141     mv Samples $out/share/examples
143     # Install udev rules
144     install -Dm444 99-jlink.rules -t $out/lib/udev/rules.d/
146     runHook postInstall
147   '';
149   passthru.updateScript = ./update.py;
151   meta = with lib; {
152     description = "J-Link Software and Documentation pack";
153     homepage = "https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack";
154     changelog = "https://www.segger.com/downloads/jlink/ReleaseNotes_JLink.html";
155     license = licenses.unfree;
156     platforms = attrNames supported;
157     maintainers = with maintainers; [
158       FlorianFranzen
159       h7x4
160       stargate01
161     ];
162   };