nixpkgs/pkgs/servers/hqplayerd/default.nix

134 lines
3.3 KiB
Nix
Raw Normal View History

2021-06-10 06:40:27 +00:00
{ stdenv
, alsa-lib
2021-10-21 22:14:36 +00:00
, addOpenGLRunpath
2021-06-10 06:40:27 +00:00
, autoPatchelfHook
, cairo
, fetchurl
, flac
2021-07-21 19:27:26 +00:00
, gcc11
2021-06-10 06:40:27 +00:00
, gnome
, gssdp
, lib
, libgmpris
, llvmPackages_10
2021-11-04 22:32:34 +00:00
, mpg123
2021-06-10 06:40:27 +00:00
, rpmextract
, wavpack
, gupnp
, gupnp-av
, meson
, ninja
2021-06-10 06:40:27 +00:00
}:
let
# hqplayerd relies on some package versions available for the fc34 release,
# which has out-of-date pkgs compared to nixpkgs. The following drvs
# can/should be removed when the fc35 hqplayer rpm is made available.
gupnp_1_2 = gupnp.overrideAttrs (old: rec {
pname = "gupnp";
version = "1.2.7";
src = fetchurl {
url = "mirror://gnome/sources/gupnp/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "sha256-hEEnbxr9AXbm9ZUCajpQfu0YCav6BAJrrT8hYis1I+w=";
};
});
2021-06-10 06:40:27 +00:00
gupnp-av_0_12 = gupnp-av.overrideAttrs (old: rec {
pname = "gupnp-av";
version = "0.12.11";
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "sha256-aJ3PFJKriZHa6ikTZaMlSKd9GiKU2FszYitVzKnOb9w=";
};
nativeBuildInputs = lib.subtractLists [ meson ninja ] old.nativeBuildInputs;
});
in
2021-06-10 06:40:27 +00:00
stdenv.mkDerivation rec {
pname = "hqplayerd";
2021-11-12 16:30:29 +00:00
version = "4.27.2-72";
2021-06-10 06:40:27 +00:00
src = fetchurl {
2021-11-04 22:32:34 +00:00
url = "https://www.signalyst.eu/bins/${pname}/fc34/${pname}-${version}sse42.fc34.x86_64.rpm";
2021-11-12 16:30:29 +00:00
sha256 = "sha256-oCZS68n9R6Hm6lltcL6zQhPaU9FRqtB59DrstRNjnH8=";
2021-06-10 06:40:27 +00:00
};
unpackPhase = ''
${rpmextract}/bin/rpmextract $src
'';
2021-10-21 22:14:36 +00:00
nativeBuildInputs = [ addOpenGLRunpath autoPatchelfHook rpmextract ];
2021-06-10 06:40:27 +00:00
buildInputs = [
alsa-lib
cairo
flac
2021-07-21 19:27:26 +00:00
gcc11.cc.lib
2021-06-10 06:40:27 +00:00
gnome.rygel
gssdp
gupnp_1_2
gupnp-av_0_12
2021-06-10 06:40:27 +00:00
libgmpris
llvmPackages_10.openmp
2021-11-04 22:32:34 +00:00
mpg123
2021-06-10 06:40:27 +00:00
wavpack
];
dontConfigure = true;
dontBuild = true;
installPhase = ''
2021-06-13 22:12:55 +00:00
runHook preInstall
2021-06-10 06:40:27 +00:00
# main executable
mkdir -p $out/bin
cp ./usr/bin/hqplayerd $out/bin
# main configuration
mkdir -p $out/etc/hqplayer
cp ./etc/hqplayer/hqplayerd.xml $out/etc/hqplayer/
2021-06-10 06:40:27 +00:00
# udev rules
mkdir -p $out/etc/udev/rules.d
cp ./etc/udev/rules.d/50-taudio2.rules $out/etc/udev/rules.d/
2021-06-10 06:40:27 +00:00
# kernel module cfgs
mkdir -p $out/etc/modules-load.d
cp ./etc/modules-load.d/taudio2.conf $out/etc/modules-load.d/
2021-06-10 06:40:27 +00:00
# systemd service file
mkdir -p $out/lib/systemd/system
cp ./usr/lib/systemd/system/hqplayerd.service $out/lib/systemd/system/
2021-06-10 06:40:27 +00:00
# documentation
2021-06-13 22:12:55 +00:00
mkdir -p $out/share/doc/hqplayerd
cp ./usr/share/doc/hqplayerd/* $out/share/doc/hqplayerd/
2021-06-10 06:40:27 +00:00
# misc service support files
2021-07-22 16:28:51 +00:00
mkdir -p $out/var/lib/hqplayer
cp -r ./var/lib/hqplayer/web $out/var/lib/hqplayer
2021-06-13 22:12:55 +00:00
runHook postInstall
2021-06-10 06:40:27 +00:00
'';
postInstall = ''
substituteInPlace $out/lib/systemd/system/hqplayerd.service \
--replace /usr/bin/hqplayerd $out/bin/hqplayerd \
--replace "NetworkManager-wait-online.service" ""
2021-06-10 06:40:27 +00:00
'';
2021-10-21 22:14:36 +00:00
# NB: addOpenGLRunpath needs to run _after_ autoPatchelfHook, which runs in
# postFixup, so we tack it on here.
doInstallCheck = true;
installCheckPhase = ''
addOpenGLRunpath $out/bin/hqplayerd
$out/bin/hqplayerd --version
2021-06-10 06:40:27 +00:00
'';
meta = with lib; {
homepage = "https://www.signalyst.com/custom.html";
description = "High-end upsampling multichannel software embedded HD-audio player";
license = licenses.unfree;
maintainers = with maintainers; [ lovesegfault ];
};
}