anvil-editor: init at 0.4
[NixPkgs.git] / pkgs / tools / misc / ultrastar-manager / default.nix
blobd1d983bc10da86a763edb6bcc2bffb9613af240a
1 { lib, mkDerivation, fetchFromGitHub, pkg-config, symlinkJoin, qmake, diffPlugins
2 , qtbase, qtmultimedia, taglib, libmediainfo, libzen, libbass }:
4 let
5   version = "2019-04-23";
6   rev = "ef4524e2239ddbb60f26e05bfba1f4f28cb7b54f";
7   sha256 = "0dl2qp686vbs160b3i9qypb7sv37phy2wn21kgzljbk3wnci3yv4";
8   buildInputs = [ qtbase qtmultimedia taglib libmediainfo libzen libbass ];
10   plugins = [
11     "albumartex"
12     "amazon"
13     "audiotag"
14     "cleanup"
15     "freecovers"
16     "lyric"
17     "preparatory"
18     "rename"
19  ];
21   patchedSrc =
22     let src = fetchFromGitHub {
23       owner = "UltraStar-Deluxe";
24       repo = "UltraStar-Manager";
25       inherit rev sha256;
26     };
27     in mkDerivation {
28       name = "${src.name}-patched";
29       inherit src;
31       dontInstall = true;
33       patchPhase = ''
34         # we don’t want prebuild binaries checked into version control!
35         rm -rf lib include
37         # fix up main project file
38         sed -e 's|-L.*unix.*lbass.*$|-lbass|' \
39             -e "/QMAKE_POST_LINK/d" \
40             -e "s|../include/bass|${lib.getLib libbass}/include|g" \
41             -e "s|../include/taglib|${lib.getLib taglib}/include|g" \
42             -e "s|../include/mediainfo|${lib.getLib libmediainfo}/include|g" \
43             -i src/UltraStar-Manager.pro
45         # if more plugins start depending on ../../../include,
46         # it should be abstracted out for all .pro files
47         sed -e "s|../../../include/taglib|${lib.getLib taglib}/include/taglib|g" \
48             -i src/plugins/audiotag/audiotag.pro
50         mkdir $out
51         mv * $out
52       '';
53     };
55   patchApplicationPath = file: path: ''
56     sed -e "s|QCore.*applicationDirPath()|QString(\"${path}\")|" -i "${file}"
57   '';
59   buildPlugin = name: mkDerivation {
60     name = "ultrastar-manager-${name}-plugin-${version}";
61     src = patchedSrc;
63     buildInputs = [ qmake ] ++ buildInputs;
65     postPatch = ''
66       sed -e "s|DESTDIR = .*$|DESTDIR = $out|" \
67           -i src/plugins/${name}/${name}.pro
69       # plugins use the application’s binary folder (wtf)
70       for f in $(grep -lr "QCoreApplication::applicationDirPath" src/plugins); do
71         ${patchApplicationPath "$f" "\$out"}
72       done
74     '';
75     preConfigure = ''
76       cd src/plugins/${name}
77     '';
78   };
80   builtPlugins =
81     symlinkJoin {
82       name = "ultrastar-manager-plugins-${version}";
83       paths = map buildPlugin plugins;
84     };
86 in mkDerivation {
87   pname = "ultrastar-manager";
88   inherit version;
89   src = patchedSrc;
91   postPatch = ''
92     sed -e "s|DESTDIR =.*$|DESTDIR = $out/bin|" \
93         -i src/UltraStar-Manager.pro
94     # patch plugin manager to point to the collected plugin folder
95     ${patchApplicationPath "src/plugins/QUPluginManager.cpp" builtPlugins}
96   '';
98   buildPhase = ''
99     find -path './src/plugins/*' -prune -type d -print0 \
100       | xargs -0 -i'{}' basename '{}' \
101       | sed -e '/shared/d' \
102       > found_plugins
103     ${diffPlugins plugins "found_plugins"}
105     cd src && qmake && make
106   '';
108   # is not installPhase so that qt post hooks can run
109   preInstall = ''
110     make install
111   '';
113   nativeBuildInputs = [ pkg-config ];
114   inherit buildInputs;
116   meta = with lib; {
117     description = "Ultrastar karaoke song manager";
118     homepage = "https://github.com/UltraStar-Deluxe/UltraStar-Manager";
119     license = licenses.gpl2Only;
120     maintainers = with maintainers; [ Profpatsch ];
121   };