mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-02-17 09:34:36 +00:00
ndi: 4 -> 5.5.1
Bump NDI to v5 SDK.
This commit is contained in:
parent
6895427d34
commit
87b25db2ac
@ -1,15 +1,19 @@
|
||||
{ lib, stdenv, requireFile, avahi }:
|
||||
{ lib, stdenv, requireFile, avahi, obs-studio-plugins }:
|
||||
|
||||
let
|
||||
versionJSON = builtins.fromJSON (builtins.readFile ./version.json);
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "ndi";
|
||||
fullVersion = "4.6.2";
|
||||
version = builtins.head (builtins.splitVersion fullVersion);
|
||||
version = versionJSON.version;
|
||||
majorVersion = builtins.head (builtins.splitVersion version);
|
||||
installerName = "Install_NDI_SDK_v${majorVersion}_Linux";
|
||||
|
||||
src = requireFile rec {
|
||||
name = "InstallNDISDK_v${version}_Linux.tar.gz";
|
||||
sha256 = "181ypfj1bl0kljzrfr6037i14ykg2y4plkzdhym6m3z7kcrnm1fl";
|
||||
name = "${installerName}.tar.gz";
|
||||
sha256 = versionJSON.hash;
|
||||
message = ''
|
||||
In order to use NDI SDK version ${fullVersion}, you need to comply with
|
||||
In order to use NDI SDK version ${version}, you need to comply with
|
||||
NewTek's license and download the appropriate Linux tarball from:
|
||||
|
||||
${meta.homepage}
|
||||
@ -25,7 +29,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
unpackPhase = ''
|
||||
unpackFile ${src}
|
||||
echo y | ./InstallNDISDK_v4_Linux.sh
|
||||
echo y | ./${installerName}.sh
|
||||
sourceRoot="NDI SDK for Linux";
|
||||
'';
|
||||
|
||||
@ -51,6 +55,11 @@ stdenv.mkDerivation rec {
|
||||
# Stripping breaks ndi-record.
|
||||
dontStrip = true;
|
||||
|
||||
passthru.tests = {
|
||||
inherit (obs-studio-plugins) obs-ndi;
|
||||
};
|
||||
passthru.updateScript = ./update.py;
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://ndi.tv/sdk/";
|
||||
description = "NDI Software Developer Kit";
|
||||
|
77
pkgs/development/libraries/ndi/update.py
Executable file
77
pkgs/development/libraries/ndi/update.py
Executable file
@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#! nix-shell -i python -p "python3.withPackages (ps: with ps; [ ps.absl-py ps.requests ])"
|
||||
|
||||
import hashlib
|
||||
import io
|
||||
import json
|
||||
import os.path
|
||||
import tarfile
|
||||
|
||||
import requests
|
||||
from absl import app, flags
|
||||
|
||||
BASE_NAME = "Install_NDI_SDK_v5_Linux"
|
||||
NDI_SDK_URL = f"https://downloads.ndi.tv/SDK/NDI_SDK_Linux/{BASE_NAME}.tar.gz"
|
||||
NDI_EXEC = f"{BASE_NAME}.sh"
|
||||
|
||||
NDI_ARCHIVE_MAGIC = b"__NDI_ARCHIVE_BEGIN__\n"
|
||||
|
||||
FLAG_out = flags.DEFINE_string("out", None, "Path to read/write version.json from/to.")
|
||||
|
||||
|
||||
def find_version_json() -> str:
|
||||
if FLAG_out.value:
|
||||
return FLAG_out.value
|
||||
try_paths = ["pkgs/development/libraries/ndi/version.json", "version.json"]
|
||||
for path in try_paths:
|
||||
if os.path.exists(path):
|
||||
return path
|
||||
raise Exception(
|
||||
"Couldn't figure out where to write version.json; try specifying --out"
|
||||
)
|
||||
|
||||
|
||||
def fetch_tarball() -> bytes:
|
||||
r = requests.get(NDI_SDK_URL)
|
||||
r.raise_for_status()
|
||||
return r.content
|
||||
|
||||
|
||||
def read_version(tarball: bytes) -> str:
|
||||
# Find the inner script.
|
||||
outer_tarfile = tarfile.open(fileobj=io.BytesIO(tarball), mode="r:gz")
|
||||
eula_script = outer_tarfile.extractfile(NDI_EXEC).read()
|
||||
|
||||
# Now find the archive embedded within the script.
|
||||
archive_start = eula_script.find(NDI_ARCHIVE_MAGIC) + len(NDI_ARCHIVE_MAGIC)
|
||||
inner_tarfile = tarfile.open(
|
||||
fileobj=io.BytesIO(eula_script[archive_start:]), mode="r:gz"
|
||||
)
|
||||
|
||||
# Now find Version.txt...
|
||||
version_txt = (
|
||||
inner_tarfile.extractfile("NDI SDK for Linux/Version.txt")
|
||||
.read()
|
||||
.decode("utf-8")
|
||||
)
|
||||
_, _, version = version_txt.strip().partition(" v")
|
||||
return version
|
||||
|
||||
|
||||
def main(argv):
|
||||
tarball = fetch_tarball()
|
||||
|
||||
sha256 = hashlib.sha256(tarball).hexdigest()
|
||||
version = {
|
||||
"hash": f"sha256:{sha256}",
|
||||
"version": read_version(tarball),
|
||||
}
|
||||
|
||||
out_path = find_version_json()
|
||||
with open(out_path, "w") as f:
|
||||
json.dump(version, f)
|
||||
f.write("\n")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(main)
|
1
pkgs/development/libraries/ndi/version.json
Normal file
1
pkgs/development/libraries/ndi/version.json
Normal file
@ -0,0 +1 @@
|
||||
{"hash": "sha256:24ed671e140ee62ebe96a494b3f0e3a3e5ba005364a0a6ad8ebf89b3494b7644", "version": "5.5.1"}
|
Loading…
Reference in New Issue
Block a user