121 lines
3.3 KiB
Nix
121 lines
3.3 KiB
Nix
{ lib, mkDerivation, fetchFromGitHub, pkg-config, symlinkJoin, qmake, diffPlugins
|
||
, qtbase, qtmultimedia, taglib, libmediainfo, libzen, libbass }:
|
||
|
||
let
|
||
version = "2019-04-23";
|
||
rev = "ef4524e2239ddbb60f26e05bfba1f4f28cb7b54f";
|
||
sha256 = "0dl2qp686vbs160b3i9qypb7sv37phy2wn21kgzljbk3wnci3yv4";
|
||
buildInputs = [ qtbase qtmultimedia taglib libmediainfo libzen libbass ];
|
||
|
||
plugins = [
|
||
"albumartex"
|
||
"amazon"
|
||
"audiotag"
|
||
"cleanup"
|
||
"freecovers"
|
||
"lyric"
|
||
"preparatory"
|
||
"rename"
|
||
];
|
||
|
||
patchedSrc =
|
||
let src = fetchFromGitHub {
|
||
owner = "UltraStar-Deluxe";
|
||
repo = "UltraStar-Manager";
|
||
inherit rev sha256;
|
||
};
|
||
in mkDerivation {
|
||
name = "${src.name}-patched";
|
||
inherit src;
|
||
phases = [ "unpackPhase" "patchPhase" ];
|
||
|
||
patchPhase = with lib; ''
|
||
# we don’t want prebuild binaries checked into version control!
|
||
rm -rf lib include
|
||
|
||
# fix up main project file
|
||
sed -e 's|-L.*unix.*lbass.*$|-lbass|' \
|
||
-e "/QMAKE_POST_LINK/d" \
|
||
-e "s|../include/bass|${getLib libbass}/include|g" \
|
||
-e "s|../include/taglib|${getLib taglib}/include|g" \
|
||
-e "s|../include/mediainfo|${getLib libmediainfo}/include|g" \
|
||
-i src/UltraStar-Manager.pro
|
||
|
||
# if more plugins start depending on ../../../include,
|
||
# it should be abstracted out for all .pro files
|
||
sed -e "s|../../../include/taglib|${getLib taglib}/include/taglib|g" \
|
||
-i src/plugins/audiotag/audiotag.pro
|
||
|
||
mkdir $out
|
||
mv * $out
|
||
'';
|
||
};
|
||
|
||
patchApplicationPath = file: path: ''
|
||
sed -e "s|QCore.*applicationDirPath()|QString(\"${path}\")|" -i "${file}"
|
||
'';
|
||
|
||
buildPlugin = name: mkDerivation {
|
||
name = "ultrastar-manager-${name}-plugin-${version}";
|
||
src = patchedSrc;
|
||
|
||
buildInputs = [ qmake ] ++ buildInputs;
|
||
|
||
postPatch = ''
|
||
sed -e "s|DESTDIR = .*$|DESTDIR = $out|" \
|
||
-i src/plugins/${name}/${name}.pro
|
||
|
||
# plugins use the application’s binary folder (wtf)
|
||
for f in $(grep -lr "QCoreApplication::applicationDirPath" src/plugins); do
|
||
${patchApplicationPath "$f" "\$out"}
|
||
done
|
||
|
||
'';
|
||
preConfigure = ''
|
||
cd src/plugins/${name}
|
||
'';
|
||
};
|
||
|
||
builtPlugins =
|
||
symlinkJoin {
|
||
name = "ultrastar-manager-plugins-${version}";
|
||
paths = map buildPlugin plugins;
|
||
};
|
||
|
||
in mkDerivation {
|
||
pname = "ultrastar-manager";
|
||
inherit version;
|
||
src = patchedSrc;
|
||
|
||
postPatch = ''
|
||
sed -e "s|DESTDIR =.*$|DESTDIR = $out/bin|" \
|
||
-i src/UltraStar-Manager.pro
|
||
# patch plugin manager to point to the collected plugin folder
|
||
${patchApplicationPath "src/plugins/QUPluginManager.cpp" builtPlugins}
|
||
'';
|
||
|
||
buildPhase = ''
|
||
find -path './src/plugins/*' -prune -type d -print0 \
|
||
| xargs -0 -i'{}' basename '{}' \
|
||
| sed -e '/shared/d' \
|
||
> found_plugins
|
||
${diffPlugins plugins "found_plugins"}
|
||
|
||
cd src && qmake && make
|
||
'';
|
||
|
||
# is not installPhase so that qt post hooks can run
|
||
preInstall = ''
|
||
make install
|
||
'';
|
||
|
||
nativeBuildInputs = [ pkg-config ];
|
||
inherit buildInputs;
|
||
|
||
meta = with lib; {
|
||
description = "Ultrastar karaoke song manager";
|
||
homepage = "https://github.com/UltraStar-Deluxe/UltraStar-Manager";
|
||
license = licenses.gpl2;
|
||
maintainers = with maintainers; [ Profpatsch ];
|
||
};
|
||
}
|