1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
{ stdenv, lib
, addDriverRunpath
, alsa-lib
, autoPatchelfHook
, cairo
, fetchurl
, flac
, gcc12
, gssdp
, gupnp
, gupnp-av
, lame
, libgmpris
, libusb-compat-0_1
, llvmPackages_14
, mpg123
, rpmextract
, wavpack
, callPackage
, rygel ? null
}@inputs:
let
# FIXME: Replace with gnome.rygel once hqplayerd releases a new version.
rygel-hqplayerd = inputs.rygel or (callPackage ./rygel.nix { });
in
stdenv.mkDerivation rec {
pname = "hqplayerd";
version = "5.5.0-13";
src = fetchurl {
url = "https://www.signalyst.eu/bins/${pname}/fc37/${pname}-${version}.fc37.x86_64.rpm";
hash = "sha256-yfdgsQu2w56apq5lyD0JcEkM9/EtlfdZQ9I5x1BBOcU=";
};
unpackPhase = ''
${rpmextract}/bin/rpmextract $src
'';
nativeBuildInputs = [ addDriverRunpath autoPatchelfHook rpmextract ];
buildInputs = [
alsa-lib
cairo
flac
gcc12.cc.lib
rygel-hqplayerd
gssdp
gupnp
gupnp-av
lame
libgmpris
libusb-compat-0_1
llvmPackages_14.openmp
mpg123
wavpack
];
dontConfigure = true;
dontBuild = true;
installPhase = ''
runHook preInstall
# executables
mkdir -p $out
cp -rv ./usr/bin $out/bin
# libs
mkdir -p $out
cp -rv ./opt/hqplayerd/lib $out
# configuration
mkdir -p $out/etc
cp -rv ./etc/hqplayer $out/etc/
# systemd service file
mkdir -p $out/lib/systemd
cp -rv ./usr/lib/systemd/system $out/lib/systemd/
# documentation
mkdir -p $out/share/doc
cp -rv ./usr/share/doc/hqplayerd $out/share/doc/
# misc service support files
mkdir -p $out/var/lib
cp -rv ./var/lib/hqplayer $out/var/lib/
runHook postInstall
'';
postInstall = ''
substituteInPlace $out/lib/systemd/system/hqplayerd.service \
--replace /usr/bin/hqplayerd $out/bin/hqplayerd \
--replace "NetworkManager-wait-online.service" ""
'';
# NB: addDriverRunpath needs to run _after_ autoPatchelfHook, which runs in
# postFixup, so we tack it on here.
doInstallCheck = true;
installCheckPhase = ''
addDriverRunpath $out/bin/hqplayerd
$out/bin/hqplayerd --version
'';
passthru = {
rygel = rygel-hqplayerd;
};
meta = with lib; {
homepage = "https://www.signalyst.com/custom.html";
description = "High-end upsampling multichannel software embedded HD-audio player";
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
license = licenses.unfree;
platforms = [ "x86_64-linux" ];
maintainers = with maintainers; [ lovesegfault ];
};
}
|