From c5f6ad787a45557f6ca3b2b5ee4c9e3cd6c7199c Mon Sep 17 00:00:00 2001 From: Naxdy Date: Thu, 19 Jun 2025 13:06:29 +0200 Subject: [PATCH 1/2] blackmagic-desktop-video: add updateScript --- .../bl/blackmagic-desktop-video/package.nix | 70 ++++++++++++++----- pkgs/os-specific/linux/decklink/default.nix | 14 ++-- 2 files changed, 59 insertions(+), 25 deletions(-) diff --git a/pkgs/by-name/bl/blackmagic-desktop-video/package.nix b/pkgs/by-name/bl/blackmagic-desktop-video/package.nix index 56c7ef7a63ab..96d463d88ad3 100644 --- a/pkgs/by-name/bl/blackmagic-desktop-video/package.nix +++ b/pkgs/by-name/bl/blackmagic-desktop-video/package.nix @@ -1,17 +1,20 @@ { - stdenv, - cacert, - curl, - runCommandLocal, - lib, autoPatchelfHook, - libcxx, - libGL, + cacert, + common-updater-scripts, + curl, gcc, + jq, + lib, + libGL, + libcxx, + runCommandLocal, + stdenv, + writeShellApplication, }: stdenv.mkDerivation (finalAttrs: { pname = "blackmagic-desktop-video"; - version = "14.4.1a4"; + version = "14.4.1"; buildInputs = [ autoPatchelfHook @@ -23,12 +26,6 @@ stdenv.mkDerivation (finalAttrs: { # yes, the below download function is an absolute mess. # blame blackmagicdesign. src = - let - # from the URL the download page where you click the "only download" button is at - REFERID = "5baba0af3eda41ee9cd0ec7349660d74"; - # from the URL that the POST happens to, see browser console - DOWNLOADID = "bc31044728f146859c6d9e0ccef868d8"; - in runCommandLocal "${finalAttrs.pname}-${lib.versions.majorMinor finalAttrs.version}-src.tar.gz" { outputHashMode = "recursive"; @@ -37,13 +34,15 @@ stdenv.mkDerivation (finalAttrs: { impureEnvVars = lib.fetchers.proxyImpureEnvVars; - nativeBuildInputs = [ curl ]; + nativeBuildInputs = [ + curl + jq + ]; # ENV VARS SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt"; - inherit REFERID; - SITEURL = "https://www.blackmagicdesign.com/api/register/us/download/${DOWNLOADID}"; + DOWNLOADSURL = "https://www.blackmagicdesign.com/api/support/us/downloads.json"; USERAGENT = builtins.concatStringsSep " " [ "User-Agent: Mozilla/5.0 (X11; Linux ${stdenv.hostPlatform.linuxArch})" @@ -58,8 +57,24 @@ stdenv.mkDerivation (finalAttrs: { "platform" = "Linux"; "policy" = true; }; + + PRODUCT = "Desktop Video"; + VERSION = finalAttrs.version; } '' + DOWNLOADID=$( + curl --silent --compressed "$DOWNLOADSURL" \ + | jq --raw-output '.downloads[] | .urls.Linux?[]? | select(.downloadTitle | test("^'"$PRODUCT $VERSION"'( Update)?$")) | .downloadId' + ) + REFERID=$( + curl --silent --compressed "$DOWNLOADSURL" \ + | jq --raw-output '.downloads[] | .urls.Linux?[]? | select(.downloadTitle | test("^'"$PRODUCT $VERSION"'( Update)?$")) | .releaseId' + ) + echo "Download ID is $DOWNLOADID" + echo "Refer ID is $REFERID" + test -n "$REFERID" + test -n "$DOWNLOADID" + SITEURL="https://www.blackmagicdesign.com/api/register/us/download/$DOWNLOADID"; RESOLVEURL=$(curl \ -s \ -H "$USERAGENT" \ @@ -75,13 +90,30 @@ stdenv.mkDerivation (finalAttrs: { > $out ''; + passthru.updateScript = lib.getExe (writeShellApplication { + # mostly stolen from pkgs/by-name/da/davinci-resolve/package.nix :) + name = "update-blackmagic-desktop-video"; + runtimeInputs = [ + common-updater-scripts + curl + jq + ]; + text = '' + set -o errexit + downloadsJSON="$(curl --fail --silent https://www.blackmagicdesign.com/api/support/us/downloads.json)" + latestLinuxVersion="$(echo "$downloadsJSON" | jq '[.downloads[] | select(.urls.Linux) | .urls.Linux[] | select(.downloadTitle | test("Desktop Video")) | .downloadTitle]' | grep -oP 'Desktop Video \K\d\d\.\d+(\.\d+)?' | sort | tail -n 1)" + + update-source-version blackmagic-desktop-video "$latestLinuxVersion" + ''; + }); + postUnpack = let arch = stdenv.hostPlatform.uname.processor; in '' - tar xf Blackmagic_Desktop_Video_Linux_${lib.head (lib.splitString "a" finalAttrs.version)}/other/${arch}/desktopvideo-${finalAttrs.version}-${arch}.tar.gz - unpacked=$NIX_BUILD_TOP/desktopvideo-${finalAttrs.version}-${stdenv.hostPlatform.uname.processor} + tar xf Blackmagic_Desktop_Video_Linux_${finalAttrs.version}/other/${arch}/desktopvideo-${finalAttrs.version}*-${arch}.tar.gz + unpacked=$NIX_BUILD_TOP/desktopvideo-${finalAttrs.version}*-${stdenv.hostPlatform.uname.processor} ''; installPhase = '' diff --git a/pkgs/os-specific/linux/decklink/default.nix b/pkgs/os-specific/linux/decklink/default.nix index 03f1b5cb61f8..0cc6f0762985 100644 --- a/pkgs/os-specific/linux/decklink/default.nix +++ b/pkgs/os-specific/linux/decklink/default.nix @@ -37,22 +37,24 @@ stdenv.mkDerivation (finalAttrs: { arch = stdenv.hostPlatform.uname.processor; in '' - tar xf Blackmagic_Desktop_Video_Linux_${lib.head (lib.splitString "a" finalAttrs.version)}/other/${arch}/desktopvideo-${finalAttrs.version}-${arch}.tar.gz - moduleRoot=$NIX_BUILD_TOP/desktopvideo-${finalAttrs.version}-${stdenv.hostPlatform.uname.processor}/usr/src + tar xf Blackmagic_Desktop_Video_Linux_${finalAttrs.version}/other/${arch}/desktopvideo-${finalAttrs.version}*-${arch}.tar.gz + bmVersion=$(ls -d $NIX_BUILD_TOP/desktopvideo-${finalAttrs.version}*-${arch}/usr/src | sed -e 's/.*desktopvideo-\([[:digit:]\.a-z]\+\).*/\1/') + + moduleRoot=$NIX_BUILD_TOP/desktopvideo-$bmVersion-${arch}/usr/src sourceRoot=$moduleRoot ''; buildPhase = '' runHook preBuild - make -C $moduleRoot/blackmagic-${finalAttrs.version} -j$NIX_BUILD_CORES - make -C $moduleRoot/blackmagic-io-${finalAttrs.version} -j$NIX_BUILD_CORES + make -C $moduleRoot/blackmagic-$bmVersion -j$NIX_BUILD_CORES + make -C $moduleRoot/blackmagic-io-$bmVersion -j$NIX_BUILD_CORES runHook postBuild ''; installPhase = '' runHook preInstall - make -C $KERNELDIR M=$moduleRoot/blackmagic-${finalAttrs.version} modules_install - make -C $KERNELDIR M=$moduleRoot/blackmagic-io-${finalAttrs.version} modules_install + make -C $KERNELDIR M=$moduleRoot/blackmagic-$bmVersion modules_install + make -C $KERNELDIR M=$moduleRoot/blackmagic-io-$bmVersion modules_install runHook postInstall ''; From fc34ce8f3352a61fadd57d2df846d6fdec071529 Mon Sep 17 00:00:00 2001 From: Naxdy Date: Sun, 31 Aug 2025 14:03:23 +0200 Subject: [PATCH 2/2] blackmagic-desktop-video: 14.4.1 -> 15.0 --- .../bl/blackmagic-desktop-video/package.nix | 4 +-- .../decklink/02-rename-timer-delete.patch | 26 ------------------- pkgs/os-specific/linux/decklink/default.nix | 15 ----------- 3 files changed, 2 insertions(+), 43 deletions(-) delete mode 100644 pkgs/os-specific/linux/decklink/02-rename-timer-delete.patch diff --git a/pkgs/by-name/bl/blackmagic-desktop-video/package.nix b/pkgs/by-name/bl/blackmagic-desktop-video/package.nix index 96d463d88ad3..6efcde582213 100644 --- a/pkgs/by-name/bl/blackmagic-desktop-video/package.nix +++ b/pkgs/by-name/bl/blackmagic-desktop-video/package.nix @@ -14,7 +14,7 @@ }: stdenv.mkDerivation (finalAttrs: { pname = "blackmagic-desktop-video"; - version = "14.4.1"; + version = "15.0"; buildInputs = [ autoPatchelfHook @@ -30,7 +30,7 @@ stdenv.mkDerivation (finalAttrs: { { outputHashMode = "recursive"; outputHashAlgo = "sha256"; - outputHash = "sha256-qh305s7u1yurv58TZnlONgDmWT4RXG3fXTfun382HAs="; + outputHash = "sha256-+89enkB+Lxuzpkwwfy0y1NajNqx6QQfeVVrak4LgawQ="; impureEnvVars = lib.fetchers.proxyImpureEnvVars; diff --git a/pkgs/os-specific/linux/decklink/02-rename-timer-delete.patch b/pkgs/os-specific/linux/decklink/02-rename-timer-delete.patch deleted file mode 100644 index 3535f8b9af09..000000000000 --- a/pkgs/os-specific/linux/decklink/02-rename-timer-delete.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/blackmagic-io-14.4.1a4/bm_util.c b/blackmagic-io-14.4.1a4/bm_util.c -index 66751cb..bf9723c 100644 ---- a/blackmagic-io-14.4.1a4/bm_util.c -+++ b/blackmagic-io-14.4.1a4/bm_util.c -@@ -471,10 +471,10 @@ void bm_timer_free(bm_timer_t* timer) - { - #if KERNEL_VERSION_OR_LATER(4, 15, 0) - struct bm_timer_wrapper* timer_wrapper = container_of(timer, struct bm_timer_wrapper, timer); -- del_timer(timer); -+ timer_delete(timer); - bm_kfree(timer_wrapper); - #else -- del_timer(timer); -+ timer_delete(timer); - bm_kfree(timer); - #endif - } -@@ -491,7 +491,7 @@ void bm_timer_expire_at(bm_timer_t* timer, uint64_t ns) - - void bm_timer_cancel(bm_timer_t* timer) - { -- del_timer_sync(timer); -+ timer_delete_sync(timer); - } - - // Event waiting diff --git a/pkgs/os-specific/linux/decklink/default.nix b/pkgs/os-specific/linux/decklink/default.nix index 0cc6f0762985..5cb0d8ad6991 100644 --- a/pkgs/os-specific/linux/decklink/default.nix +++ b/pkgs/os-specific/linux/decklink/default.nix @@ -3,7 +3,6 @@ lib, blackmagic-desktop-video, kernel, - fetchpatch, }: stdenv.mkDerivation (finalAttrs: { pname = "decklink"; @@ -13,20 +12,6 @@ stdenv.mkDerivation (finalAttrs: { # See pkgs/by-name/bl/blackmagic-desktop-video/package.nix for more. inherit (blackmagic-desktop-video) src version; - patches = - (lib.optionals (lib.versionAtLeast kernel.modDirVersion "6.13") [ - # needed for version 14.4.x to build for kernel 6.13 - (fetchpatch { - name = "01-update-makefiles"; - url = "https://aur.archlinux.org/cgit/aur.git/plain/01-update-makefiles.patch?h=decklink"; - hash = "sha256-l3iu0fG/QJMdGI/WSlNn+qjF4nK25JxoiwhPrMGTqE4="; - }) - ]) - ++ (lib.optionals (lib.versionAtLeast kernel.modDirVersion "6.15") [ - # needed for version 14.4.x to build for kernel 6.15 - ./02-rename-timer-delete.patch - ]); - KERNELDIR = "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"; INSTALL_MOD_PATH = placeholder "out";