jlink: Add automatic updater

This commit is contained in:
Artemis Tosini 2021-11-18 01:43:03 +00:00
parent 0fafc95119
commit cbbe164e4a
Signed by: artemist
GPG key ID: ADFFE553DCBB831E
3 changed files with 49 additions and 21 deletions

View file

@ -19,32 +19,14 @@
, libXrandr
}:
let
jlinkVersion = "756a";
architecture = {
x86_64-linux = "x86_64";
i686-linux = "i386";
armv7l-linux = "arm";
aarch64-linux = "arm64";
}.${stdenv.hostPlatform.system} or (throw "unsupported system ${stdenv.hostPlatform.system}");
sha256 = {
x86_64-linux = "1bg038042byrfn575n3add9l83i1clbav7fzm7ga7svfd06k4lny";
i686-linux = "0a1prsb91rhpy55qklmnh3r1ac6325yvk3gjwhy0dcl34fd0wjqf";
armv7l-linux = "1vvxsfizvdsgqv0f71nxqj5kmj9glx09z1jsrqq8h3ld95f92xmp";
aarch64-linux = "0gw50jnd92g1p4391qiyvcwmn76akc3f1f5arkax6dqcwim443gg";
}.${stdenv.hostPlatform.system} or (throw "unsupported system ${stdenv.hostPlatform.system}");
url = "https://www.segger.com/downloads/jlink/JLink_Linux_V${jlinkVersion}_${architecture}.tgz";
conf = (lib.importJSON ./version.json).${stdenv.hostPlatform.system} or (throw "unsupported system ${stdenv.hostPlatform.system}");
in
stdenv.mkDerivation rec {
pname = "jlink";
version = jlinkVersion;
version = conf.version;
src = fetchurl {
url = url;
sha256 = sha256;
curlOpts = "-d accept_license_agreement=accepted -d non_emb_ctr=confirmed";
inherit (conf) url sha256 curlOpts;
};
dontConfigure = true;
@ -83,6 +65,8 @@ stdenv.mkDerivation rec {
patchelf --add-needed libudev.so.1 $out/JLink/libjlinkarm.so
'';
passthru.updateScript = ./update.py;
meta = with lib; {
homepage = "https://www.segger.com/downloads/jlink";
description = "SEGGER J-Link";

43
externals/packages/jlink/update.py vendored Executable file
View file

@ -0,0 +1,43 @@
#!/usr/bin/env nix-shell
#! nix-shell -i python3 -p "python3.withPackages (ps: with ps; [ beautifulsoup4 requests ] )" nix-prefetch
import requests
import bs4
import json
import subprocess
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
URL_FORMAT = 'https://www.segger.com/downloads/jlink/JLink_Linux_V{version}_{arch}.tgz'
CURL_OPTS = '-d accept_license_agreement=accepted -d submit=Download+software'
page = requests.get('https://www.segger.com/downloads/jlink').text
elem = bs4.BeautifulSoup(page, features='lxml').find(
'select', {'class': 'version'}).find('option')
version = elem.children.__next__().lstrip('V')
arches = [
('x86_64-linux', 'x86_64'),
('i686-linux', 'i686'),
('armv7l-linux', 'arm'),
('aarch64-linux', 'arm64')
]
out_obj = {}
for nix_arch, jlink_arch in arches:
url = URL_FORMAT.format(version=version.replace('.', ''), arch=jlink_arch)
out = subprocess.run(
['nix-prefetch', f'{{fetchurl}}: fetchurl {{ url = "{url}"; curlOpts = "{CURL_OPTS}"; }}'], stdout=subprocess.PIPE, check=True)
sha256 = out.stdout.decode('utf8').strip()
out_obj[nix_arch] = {
'url': url,
'version': version,
'curlOpts': CURL_OPTS,
'sha256': sha256
}
out_file = open(os.path.join(BASE_DIR, 'version.json'), 'w')
json.dump(out_obj, out_file)
out_file.close()

1
externals/packages/jlink/version.json vendored Normal file
View file

@ -0,0 +1 @@
{"x86_64-linux": {"url": "https://www.segger.com/downloads/jlink/JLink_Linux_V758b_x86_64.tgz", "version": "7.58b", "curlOpts": "-d accept_license_agreement=accepted -d submit=Download+software", "sha256": "sha256-kr1zCzvGx4pmhPeWEoXlouOMnZY69V59/cF8hakv7ps="}, "i686-linux": {"url": "https://www.segger.com/downloads/jlink/JLink_Linux_V758b_i686.tgz", "version": "7.58b", "curlOpts": "-d accept_license_agreement=accepted -d submit=Download+software", "sha256": "sha256-d8gVsn3hYU39m15Tu5VkqOnocPTXyuCKmvLZsRw6fNw="}, "armv7l-linux": {"url": "https://www.segger.com/downloads/jlink/JLink_Linux_V758b_arm.tgz", "version": "7.58b", "curlOpts": "-d accept_license_agreement=accepted -d submit=Download+software", "sha256": "sha256-ze5EEjboQuT4UVxw/rU3w4Pgsk5yHoLARURQxonl26w="}, "aarch64-linux": {"url": "https://www.segger.com/downloads/jlink/JLink_Linux_V758b_arm64.tgz", "version": "7.58b", "curlOpts": "-d accept_license_agreement=accepted -d submit=Download+software", "sha256": "sha256-NFzo2udZ2ZuHdwG4ZGftI139LZPIrdso5adiMG09uh0="}}