about summary refs log tree commit diff
path: root/pkgs/tools/misc/ultrastar-manager
diff options
context:
space:
mode:
authorProfpatsch <mail@profpatsch.de>2017-06-14 11:29:31 +0200
committerJoachim Schiele <js@lastlog.de>2017-06-14 11:29:31 +0200
commit79dd4deda5a5ee44359a88cdcbbc22a15ba26224 (patch)
tree270e42ec5d33fa623f92e352fe9025d14e269bca /pkgs/tools/misc/ultrastar-manager
parentf6fbbabcb70a19428a7adde2e4f1ec477c439654 (diff)
Ultrastar (#26524)
* ultrastardx-beta: init at 1.3.5

* libbass, libbass_fx: init at 24

* ultrastar-creator: init at 2017-04-12

* buildSupport/plugins.nix: add diffPlugins

Helper function to compare expected plugin lists to the found plugins.

* ultrastar-manager: init at 2017-05-24

The plugins are built in their own derivations, speeding up (re-)compilation.
The `diffPlugins` function from `beets` is reused to test for changes in the
plugin list on updates.

* beets: switch to diffPlugins

The function is basically just extracted for better reusability.
Diffstat (limited to 'pkgs/tools/misc/ultrastar-manager')
-rw-r--r--pkgs/tools/misc/ultrastar-manager/default.nix121
1 files changed, 121 insertions, 0 deletions
diff --git a/pkgs/tools/misc/ultrastar-manager/default.nix b/pkgs/tools/misc/ultrastar-manager/default.nix
new file mode 100644
index 0000000000000..61b2c6aaa228a
--- /dev/null
+++ b/pkgs/tools/misc/ultrastar-manager/default.nix
@@ -0,0 +1,121 @@
+{ stdenv, fetchFromGitHub, pkgconfig, symlinkJoin, qmakeHook, diffPlugins
+, qtbase, qtmultimedia, makeQtWrapper
+, taglib, libmediainfo, libzen, libbass }:
+
+let
+  version = "2017-05-24";
+  rev = "eed5dc41c849ab29b2dee37d97852fffdb45e390";
+  sha256 = "1ymdgaffazndg9vhh47qqjr5873ld7j066hycp670r08bm519ysg";
+  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 stdenv.mkDerivation {
+      name = "${src.name}-patched";
+      inherit src;
+      phases = [ "unpackPhase" "patchPhase" ];
+
+      patchPhase = with stdenv.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: stdenv.mkDerivation {
+    name = "ultrastar-manager-${name}-plugin-${version}";
+    src = patchedSrc;
+
+    buildInputs = [ qmakeHook ] ++ 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 stdenv.mkDerivation {
+  name = "ultrastar-manager-${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 = [ makeQtWrapper pkgconfig ];
+  inherit buildInputs;
+
+  meta = with stdenv.lib; {
+    description = "Ultrastar karaoke song manager";
+    homepage = https://github.com/UltraStar-Deluxe/UltraStar-Manager;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ profpatsch ];
+  };
+}