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