diff options
Diffstat (limited to 'nixpkgs/pkgs/games/super-tux-kart/default.nix')
-rw-r--r-- | nixpkgs/pkgs/games/super-tux-kart/default.nix | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/games/super-tux-kart/default.nix b/nixpkgs/pkgs/games/super-tux-kart/default.nix new file mode 100644 index 000000000000..b20d00a8da4e --- /dev/null +++ b/nixpkgs/pkgs/games/super-tux-kart/default.nix @@ -0,0 +1,151 @@ +{ lib +, stdenv +, fetchFromGitHub +, fetchsvn +, cmake +, pkg-config +, makeWrapper +, SDL2 +, glew +, openal +, OpenAL +, libvorbis +, libogg +, curl +, freetype +, libjpeg +, libpng +, harfbuzz +, mcpp +, wiiuse +, angelscript +, libopenglrecorder +, sqlite +, Cocoa +, IOKit +, libsamplerate +, shaderc +}: +let + assets = fetchsvn { + url = "https://svn.code.sf.net/p/supertuxkart/code/stk-assets"; + rev = "18464"; + sha256 = "1a84j3psl4cxzkn5ynakpjill7i2f9ki2p729bpmbrvg8fki95aa"; + name = "stk-assets"; + }; + + # List of bundled libraries in stk-code/lib to keep + # Those are the libraries that cannot be replaced + # with system packages. + bundledLibraries = [ + # Bullet 2.87 is incompatible (bullet 2.79 needed whereas 2.87 is packaged) + # The api changed in a lot of classes, too much work to adapt + "bullet" + # Upstream Libenet doesn't yet support IPv6, + # So we will use the bundled libenet which + # has been fixed to support it. + "enet" + # Internal library of STK, nothing to do about it + "graphics_engine" + # Internal library of STK, nothing to do about it + "graphics_utils" + # Internal library. + "simd_wrapper" + # This irrlicht is bundled with cmake + # whereas upstream irrlicht still uses + # archaic Makefiles, too complicated to switch to. + "irrlicht" + # Not packaged to this date + "libsquish" + # Not packaged to this date + "sheenbidi" + # Not packaged to this date + "tinygettext" + # Not packaged to this date (needed on Darwin) + "mojoal" + ]; +in +stdenv.mkDerivation rec { + + pname = "supertuxkart"; + version = "1.4"; + + src = fetchFromGitHub { + owner = "supertuxkart"; + repo = "stk-code"; + rev = version; + hash = "sha256-gqdaVvgNfCN40ZO/9y8+vTeIJPSq6udKxYZ/MAi4ZMM="; + }; + + postPatch = '' + # Deletes all bundled libs in stk-code/lib except those + # That couldn't be replaced with system packages + find lib -maxdepth 1 -type d | egrep -v "^lib$|${(lib.concatStringsSep "|" bundledLibraries)}" | xargs -n1 -L1 -r -I{} rm -rf {} + + # Allow building with system-installed wiiuse on Darwin + substituteInPlace CMakeLists.txt \ + --replace 'NOT (APPLE OR HAIKU)) AND USE_SYSTEM_WIIUSE' 'NOT (HAIKU)) AND USE_SYSTEM_WIIUSE' + ''; + + nativeBuildInputs = [ + cmake + pkg-config + makeWrapper + ]; + + buildInputs = [ + shaderc + SDL2 + glew + libvorbis + libogg + freetype + curl + libjpeg + libpng + harfbuzz + mcpp + wiiuse + angelscript + sqlite + ] + ++ lib.optional (stdenv.hostPlatform.isWindows || stdenv.hostPlatform.isLinux) libopenglrecorder + ++ lib.optional stdenv.hostPlatform.isLinux openal + ++ lib.optionals stdenv.hostPlatform.isDarwin [ OpenAL IOKit Cocoa libsamplerate ]; + + cmakeFlags = [ + "-DBUILD_RECORDER=${if (stdenv.hostPlatform.isWindows || stdenv.hostPlatform.isLinux) then "ON" else "OFF"}" + "-DUSE_SYSTEM_ANGELSCRIPT=ON" + "-DCHECK_ASSETS=OFF" + "-DUSE_SYSTEM_WIIUSE=ON" + "-DOpenGL_GL_PREFERENCE=GLVND" + ]; + + # Extract binary from built app bundle + postInstall = lib.optionalString stdenv.hostPlatform.isDarwin '' + mkdir $out/bin + mv $out/{supertuxkart.app/Contents/MacOS,bin}/supertuxkart + rm -rf $out/supertuxkart.app + ''; + + # Obtain the assets directly from the fetched store path, to avoid duplicating assets across multiple engine builds + preFixup = '' + wrapProgram $out/bin/supertuxkart \ + --set-default SUPERTUXKART_ASSETS_DIR "${assets}" \ + --set-default SUPERTUXKART_DATADIR "$out/share/supertuxkart" \ + ''; + + meta = with lib; { + description = "A Free 3D kart racing game"; + longDescription = '' + SuperTuxKart is a Free 3D kart racing game, with many tracks, + characters and items for you to try, similar in spirit to Mario + Kart. + ''; + homepage = "https://supertuxkart.net/"; + license = licenses.gpl2Plus; + maintainers = with maintainers; [ pyrolagus peterhoeg ]; + platforms = with platforms; unix; + changelog = "https://github.com/supertuxkart/stk-code/blob/${version}/CHANGELOG.md"; + }; +} |