Merge pull request #330634 from r-ryantm/auto-update/circumflex
[NixPkgs.git] / pkgs / servers / roon-server / default.nix
blob84e75f90c44231c168bb31752dde2d3e3d7c24bf
1 { alsa-lib
2 , alsa-utils
3 , autoPatchelfHook
4 , cifs-utils
5 , fetchurl
6 , ffmpeg
7 , freetype
8 , icu66
9 , krb5
10 , lib
11 , libtasn1
12 , lttng-ust_2_12
13 , makeWrapper
14 , openssl
15 , stdenv
17 let
18   version = "2.0-1442";
19   urlVersion = builtins.replaceStrings [ "." "-" ] [ "00" "0" ] version;
21 stdenv.mkDerivation {
22   pname = "roon-server";
23   inherit version;
25   src = fetchurl {
26     url = "https://download.roonlabs.com/updates/production/RoonServer_linuxx64_${urlVersion}.tar.bz2";
27     hash = "sha256-D6Xdij92bDUchkSTT9/ADaNALqCyYwL9EnLqma48alg=";
28   };
30   dontConfigure = true;
31   dontBuild = true;
33   buildInputs = [
34     alsa-lib
35     freetype
36     krb5
37     libtasn1
38     lttng-ust_2_12
39     stdenv.cc.cc.lib
40   ];
42   nativeBuildInputs = [ autoPatchelfHook makeWrapper ];
44   installPhase =
45     let
46       # NB: While this might seem like odd behavior, it's what Roon expects. The
47       # tarball distribution provides scripts that do a bunch of nonsense on top
48       # of what wrapBin is doing here, so consider it the lesser of two evils.
49       # I didn't bother checking whether the symlinks are really necessary, but
50       # I wouldn't put it past Roon to have custom code based on the binary
51       # name, so we're playing it safe.
52       wrapBin = binPath: ''
53         (
54           binDir="$(dirname "${binPath}")"
55           binName="$(basename "${binPath}")"
56           dotnetDir="$out/RoonDotnet"
58           ln -sf "$dotnetDir/dotnet" "$dotnetDir/$binName"
59           rm "${binPath}"
60           makeWrapper "$dotnetDir/$binName" "${binPath}" \
61             --add-flags "$binDir/$binName.dll" \
62             --argv0 "$binName" \
63             --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ alsa-lib icu66 ffmpeg openssl ]}" \
64             --prefix PATH : "$dotnetDir" \
65             --prefix PATH : "${lib.makeBinPath [ alsa-utils cifs-utils ffmpeg ]}" \
66             --chdir "$binDir" \
67             --set DOTNET_ROOT "$dotnetDir"
68         )
69       '';
70     in
71     ''
72       runHook preInstall
73       mkdir -p $out
74       mv * $out
76       rm $out/check.sh
77       rm $out/start.sh
78       rm $out/VERSION
80       ${wrapBin "$out/Appliance/RAATServer"}
81       ${wrapBin "$out/Appliance/RoonAppliance"}
82       ${wrapBin "$out/Server/RoonServer"}
84       mkdir -p $out/bin
85       makeWrapper "$out/Server/RoonServer" "$out/bin/RoonServer" --chdir "$out"
87       runHook postInstall
88     '';
90   meta = with lib; {
91     description = "Music player for music lovers";
92     changelog = "https://community.roonlabs.com/c/roon/software-release-notes/18";
93     homepage = "https://roonlabs.com";
94     sourceProvenance = with sourceTypes; [ binaryNativeCode ];
95     license = licenses.unfree;
96     maintainers = with maintainers; [ lovesegfault steell ];
97     platforms = [ "x86_64-linux" ];
98     mainProgram = "RoonServer";
99   };