diff options
Diffstat (limited to 'derivations/blackmagic-desktop-video-gui/generic.nix')
-rw-r--r-- | derivations/blackmagic-desktop-video-gui/generic.nix | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/derivations/blackmagic-desktop-video-gui/generic.nix b/derivations/blackmagic-desktop-video-gui/generic.nix new file mode 100644 index 0000000..5eb36e9 --- /dev/null +++ b/derivations/blackmagic-desktop-video-gui/generic.nix @@ -0,0 +1,159 @@ +{ + stdenv, + cacert, + curl, + runCommandLocal, + lib, + autoPatchelfHook, + libcxx, + libGL, + gcc, + + optionals, + optionalString, + + desktopVideoFull ? false, + desktopVideoUpdater ? desktopVideoFull, + + dbus ? desktopVideoFull, + glib ? desktopVideoFull, + fontconfig ? desktopVideoFull, + freetype ? desktopVideoFull, + libXrender ? desktopVideoFull, + libICE ? desktopVideoFull, + libusb1 ? desktopVideoFull, + qt5 ? desktopVideoFull, + wrapQtAppsHook ? desktopVideoFull, +}: +stdenv.mkDerivation (finalAttrs: { + pname = "blackmagic-desktop-video"; + version = "14.4.1a4"; + + buildInputs = [ + autoPatchelfHook + libcxx + libGL + gcc.cc.lib + ] ++ optionals desktopVideoFull [ + dbus + glib + fontconfig + freetype + libXrender + libICE + libusb1 + qt5.qtbase + ]; + nativeBuildInputs = lib.mkIf desktopVideoFull [ wrapQtAppsHook ]; + + # 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"; + outputHashAlgo = "sha256"; + outputHash = "sha256-qh305s7u1yurv58TZnlONgDmWT4RXG3fXTfun382HAs="; + + impureEnvVars = lib.fetchers.proxyImpureEnvVars; + + nativeBuildInputs = [ curl ]; + + # ENV VARS + SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt"; + + inherit REFERID; + SITEURL = "https://www.blackmagicdesign.com/api/register/us/download/${DOWNLOADID}"; + + USERAGENT = builtins.concatStringsSep " " [ + "User-Agent: Mozilla/5.0 (X11; Linux ${stdenv.hostPlatform.linuxArch})" + "AppleWebKit/537.36 (KHTML, like Gecko)" + "Chrome/77.0.3865.75" + "Safari/537.36" + ]; + + REQJSON = builtins.toJSON { + "country" = "nl"; + "downloadOnly" = true; + "platform" = "Linux"; + "policy" = true; + }; + } + '' + RESOLVEURL=$(curl \ + -s \ + -H "$USERAGENT" \ + -H 'Content-Type: application/json;charset=UTF-8' \ + -H "Referer: https://www.blackmagicdesign.com/support/download/$REFERID/Linux" \ + --data-ascii "$REQJSON" \ + --compressed \ + "$SITEURL") + curl \ + --retry 3 --retry-delay 3 \ + --compressed \ + "$RESOLVEURL" \ + > $out + ''; + + 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} + ''; + + installPhase = '' + runHook preInstall + mkdir -p $out/{bin,share/doc,share/man/man1,lib/systemd/system} + cp -r $unpacked/usr/share/doc/desktopvideo $out/share/doc + cp $unpacked/usr/share/man/man1/DesktopVideoHelper.1 $out/share/man/man1 + cp $unpacked/usr/lib/*.so $out/lib + cp $unpacked/usr/lib/systemd/system/DesktopVideoHelper.service $out/lib/systemd/system + cp $unpacked/usr/lib/blackmagic/DesktopVideo/DesktopVideoHelper $out/bin/ + substituteInPlace $out/lib/systemd/system/DesktopVideoHelper.service \ + --replace-fail "/usr/lib/blackmagic/DesktopVideo/DesktopVideoHelper" "$out/bin/DesktopVideoHelper" + '' + # FIXME TODO patch update tool with correct patj + + optionalString (desktopVideoUpdater || desktopVideoFull) '' + mkdir -p $out/lib/blackmagic/DesktopVideo/Firmware + cp $unpacked/usr/share/man/man1/DesktopVideoUpdateTool.1 $out/share/man/man1 + cp -r $unpacked/usr/lib/blackmagic/DesktopVideo/Firmware $out/lib/blackmagic/DesktopVideo/Firmware + cp $unpacked/usr/lib/blackmagic/DesktopVideo/DesktopVideoUpdateTool $out/bin/ + '' + + optionalString desktopVideoFull '' + mkdir -p $out/{share/man,share/icons,share/applications} + cp -r $unpacked/usr/share/doc/desktopvideo-gui $out/share/doc + # Man + cp -r $unpacked/usr/share/man/man1/{DesktopVideoUpdater,BlackmagicDesktopVideoSetup}.1 $out/share/man/man1 + # Icons + cp -r $unpacked/usr/share/icons/* $out/share/icons + # Desktop files + cp $unpacked/usr/share/applications/* $out/share/applications + # Additional libs + cp $unpacked/usr/lib/blackmagic/DesktopVideo/*.so $out/lib + # Bins + #cp $unpacked/usr/lib/blackmagic/DesktopVideo/{DesktopVideo{Notifier,Updater},BlackmagicDesktopVideoSetup} $out/bin/ + '' + + '' + runHook postInstall + ''; + + # need to tell the DesktopVideoHelper where to find its own library + appendRunpaths = [ "${placeholder "out"}/lib" ]; + + meta = with lib; { + homepage = "https://www.blackmagicdesign.com/support/family/capture-and-playback"; + maintainers = [ maintainers.naxdy ]; + license = licenses.unfree; + description = "Supporting applications for Blackmagic Decklink. Doesn't include the desktop applications, only the helper required to make the driver work"; + platforms = platforms.linux; + }; +}) |