diff options
author | Profpatsch <mail@profpatsch.de> | 2017-06-14 11:29:31 +0200 |
---|---|---|
committer | Joachim Schiele <js@lastlog.de> | 2017-06-14 11:29:31 +0200 |
commit | 79dd4deda5a5ee44359a88cdcbbc22a15ba26224 (patch) | |
tree | 270e42ec5d33fa623f92e352fe9025d14e269bca /pkgs/tools/misc/ultrastar-manager | |
parent | f6fbbabcb70a19428a7adde2e4f1ec477c439654 (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.nix | 121 |
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 ]; + }; +} |