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.wip/yesman
parent
f6fbbabcb7
commit
79dd4deda5
@ -0,0 +1,29 @@ |
||||
{ stdenv }: |
||||
# helper functions for packaging programs with plugin systems |
||||
{ |
||||
|
||||
/* Takes a list of expected plugin names |
||||
* and compares it to the found plugins given in the file, |
||||
* one plugin per line. |
||||
* If the lists differ, the build fails with a nice message. |
||||
* |
||||
* This is helpful to ensure maintainers don’t miss |
||||
* the addition or removal of a plugin. |
||||
*/ |
||||
diffPlugins = expectedPlugins: foundPluginsFilePath: '' |
||||
# sort both lists first |
||||
plugins_expected=$(mktemp) |
||||
(${stdenv.lib.concatMapStrings (s: "echo \"${s}\";") expectedPlugins}) \ |
||||
| sort -u > "$plugins_expected" |
||||
plugins_found=$(mktemp) |
||||
sort -u "${foundPluginsFilePath}" > "$plugins_found" |
||||
|
||||
if ! mismatches="$(diff -y "$plugins_expected" "$plugins_found")"; then |
||||
echo "The the list of expected plugins (left side) doesn't match" \ |
||||
"the list of plugins we found (right side):" >&2 |
||||
echo "$mismatches" >&2 |
||||
exit 1 |
||||
fi |
||||
''; |
||||
|
||||
} |
@ -0,0 +1,59 @@ |
||||
{ stdenv, unzip, fetchurl, writeText }: |
||||
|
||||
let |
||||
version = "24"; |
||||
|
||||
allBass = { |
||||
bass = { |
||||
h = "bass.h"; |
||||
so = { |
||||
i686_linux = "libbass.so"; |
||||
x86_64-linux = "x64/libbass.so"; |
||||
}; |
||||
urlpath = "bass${version}-linux.zip"; |
||||
sha256 = "1a2z9isabkymz7qmkgklbjpj2wxkvv1cngfp9aj0c9178v97pjd7"; |
||||
}; |
||||
|
||||
bass_fx = { |
||||
h = "C/bass_fx.h"; |
||||
so = { |
||||
i686_linux = "libbass_fx.so"; |
||||
x86_64-linux = "x64/libbass_fx.so"; |
||||
}; |
||||
urlpath = "z/0/bass_fx${version}-linux.zip"; |
||||
sha256 = "0j1cbq88j3vnqf2bibcqnfhciz904w48ldgycyh9d8954hwyg22m"; |
||||
}; |
||||
}; |
||||
|
||||
dropBass = name: bass: stdenv.mkDerivation { |
||||
name = "lib${name}-${version}"; |
||||
|
||||
src = fetchurl { |
||||
url = "https://www.un4seen.com/files/${bass.urlpath}"; |
||||
inherit (bass) sha256; |
||||
}; |
||||
unpackCmd = '' |
||||
mkdir out |
||||
${unzip}/bin/unzip $curSrc -d out |
||||
''; |
||||
|
||||
lpropagatedBuildInputs = [ unzip ]; |
||||
dontBuild = true; |
||||
installPhase = |
||||
let so = |
||||
if bass.so ? ${stdenv.system} then bass.so.${stdenv.system} |
||||
else abort "${name} not packaged for ${stdenv.system} (yet)."; |
||||
in '' |
||||
mkdir -p $out/{lib,include} |
||||
install -m644 -t $out/lib/ ${so} |
||||
install -m644 -t $out/include/ ${bass.h} |
||||
''; |
||||
|
||||
meta = with stdenv.lib; { |
||||
description = "Shareware audio library"; |
||||
homepage = https://www.un4seen.com/; |
||||
license = licenses.unfreeRedistributable; |
||||
}; |
||||
}; |
||||
|
||||
in stdenv.lib.mapAttrs dropBass allBass |
@ -0,0 +1,49 @@ |
||||
{ stdenv, autoreconfHook, fetchFromGitHub, pkgconfig |
||||
, lua, fpc, pcre, portaudio, freetype, libpng |
||||
, SDL2, SDL2_image, SDL2_gfx, SDL2_mixer, SDL2_net, SDL2_ttf |
||||
, ffmpeg, sqlite, zlib, libX11, mesa }: |
||||
|
||||
let |
||||
sharedLibs = [ |
||||
pcre portaudio freetype |
||||
SDL2 SDL2_image SDL2_gfx SDL2_mixer SDL2_net SDL2_ttf |
||||
sqlite lua zlib libX11 mesa ffmpeg |
||||
]; |
||||
|
||||
in stdenv.mkDerivation rec { |
||||
name = "ultrastardx-${version}"; |
||||
version = "1.3.5-beta"; |
||||
src = fetchFromGitHub { |
||||
owner = "UltraStar-Deluxe"; |
||||
repo = "USDX"; |
||||
rev = "v${version}"; |
||||
sha256 = "0qp64qsj29a08cbv3i52jm1w2pcklw6ya5sniycs24zxggza5pkn"; |
||||
}; |
||||
|
||||
buildInputs = [ |
||||
pkgconfig autoreconfHook |
||||
fpc libpng |
||||
] ++ sharedLibs; |
||||
|
||||
postPatch = '' |
||||
# autoconf substitutes strange things otherwise |
||||
substituteInPlace src/config.inc.in \ |
||||
--subst-var-by libpcre_LIBNAME libpcre.so.1 |
||||
''; |
||||
|
||||
preBuild = with stdenv.lib; |
||||
let items = concatMapStringsSep " " (x: "-rpath ${getLib x}/lib") sharedLibs; |
||||
in '' |
||||
export NIX_LDFLAGS="$NIX_LDFLAGS ${items}" |
||||
''; |
||||
|
||||
# dlopened libgcc requires the rpath not to be shrinked |
||||
dontPatchELF = true; |
||||
|
||||
meta = with stdenv.lib; { |
||||
homepage = http://ultrastardx.sourceforge.net/; |
||||
description = "Free and open source karaoke game"; |
||||
license = licenses.gpl2Plus; |
||||
maintainers = with maintainers; [ profpatsch ]; |
||||
}; |
||||
} |
@ -0,0 +1,41 @@ |
||||
{ stdenv, fetchFromGitHub |
||||
, qmakeHook, qtbase, makeQtWrapper |
||||
, pkgconfig, taglib, libbass, libbass_fx }: |
||||
|
||||
stdenv.mkDerivation rec { |
||||
name = "ultrastar-creator-${version}"; |
||||
version = "2017-04-12"; |
||||
|
||||
src = fetchFromGitHub { |
||||
owner = "UltraStar-Deluxe"; |
||||
repo = "UltraStar-Creator"; |
||||
rev = "ac519a003f8283bfbe5e2d8e9cdff3a3faf97001"; |
||||
sha256 = "00idr8a178gvmylq722n13bli59kpxlsy5d8hlplqn7fih48mnzi"; |
||||
}; |
||||
|
||||
postPatch = with stdenv.lib; '' |
||||
# we don’t want prebuild binaries checked into version control! |
||||
rm -rf lib include |
||||
sed -e "s|DESTDIR =.*$|DESTDIR = $out/bin|" \ |
||||
-e 's|-L".*unix"||' \ |
||||
-e "/QMAKE_POST_LINK/d" \ |
||||
-e "s|../include/bass|${getLib libbass}/include|g" \ |
||||
-e "s|../include/bass_fx|${getLib libbass_fx}/include|g" \ |
||||
-e "s|../include/taglib|${getLib taglib}/include|g" \ |
||||
-i src/UltraStar-Creator.pro |
||||
''; |
||||
|
||||
preConfigure = '' |
||||
cd src |
||||
''; |
||||
|
||||
nativeBuildInputs = [ qmakeHook makeQtWrapper pkgconfig ]; |
||||
buildInputs = [ qtbase taglib libbass libbass_fx ]; |
||||
|
||||
meta = with stdenv.lib; { |
||||
description = "Ultrastar karaoke song creation tool"; |
||||
homepage = https://github.com/UltraStar-Deluxe/UltraStar-Creator; |
||||
license = licenses.gpl2; |
||||
maintainers = with maintainers; [ profpatsch ]; |
||||
}; |
||||
} |
@ -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 ]; |
||||
}; |
||||
} |
Loading…
Reference in new issue