anvil-editor: init at 0.4
[NixPkgs.git] / pkgs / games / super-tux-kart / default.nix
blob69bdb24cea7c50611540524a410ccb6d4071c99d
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , fetchsvn
5 , cmake
6 , pkg-config
7 , makeWrapper
8 , SDL2
9 , glew
10 , openal
11 , OpenAL
12 , libvorbis
13 , libogg
14 , curl
15 , freetype
16 , libjpeg
17 , libpng
18 , harfbuzz
19 , mcpp
20 , wiiuse
21 , angelscript
22 , libopenglrecorder
23 , sqlite
24 , Cocoa
25 , IOKit
26 , IOBluetooth
27 , libsamplerate
28 , shaderc
30 let
31   assets = fetchsvn {
32     url = "https://svn.code.sf.net/p/supertuxkart/code/stk-assets";
33     rev = "18464";
34     sha256 = "1a84j3psl4cxzkn5ynakpjill7i2f9ki2p729bpmbrvg8fki95aa";
35     name = "stk-assets";
36   };
38   # List of bundled libraries in stk-code/lib to keep
39   # Those are the libraries that cannot be replaced
40   # with system packages.
41   bundledLibraries = [
42     # Bullet 2.87 is incompatible (bullet 2.79 needed whereas 2.87 is packaged)
43     # The api changed in a lot of classes, too much work to adapt
44     "bullet"
45     # Upstream Libenet doesn't yet support IPv6,
46     # So we will use the bundled libenet which
47     # has been fixed to support it.
48     "enet"
49     # Internal library of STK, nothing to do about it
50     "graphics_engine"
51     # Internal library of STK, nothing to do about it
52     "graphics_utils"
53     # Internal library.
54     "simd_wrapper"
55     # This irrlicht is bundled with cmake
56     # whereas upstream irrlicht still uses
57     # archaic Makefiles, too complicated to switch to.
58     "irrlicht"
59     # Not packaged to this date
60     "libsquish"
61     # Not packaged to this date
62     "sheenbidi"
63     # Not packaged to this date
64     "tinygettext"
65     # Not packaged to this date (needed on Darwin)
66     "mojoal"
67   ];
69 stdenv.mkDerivation rec {
71   pname = "supertuxkart";
72   version = "1.4";
74   src = fetchFromGitHub {
75     owner = "supertuxkart";
76     repo = "stk-code";
77     rev = version;
78     hash = "sha256-gqdaVvgNfCN40ZO/9y8+vTeIJPSq6udKxYZ/MAi4ZMM=";
79   };
81   postPatch = ''
82     # Deletes all bundled libs in stk-code/lib except those
83     # That couldn't be replaced with system packages
84     find lib -maxdepth 1 -type d | egrep -v "^lib$|${(lib.concatStringsSep "|" bundledLibraries)}" | xargs -n1 -L1 -r -I{} rm -rf {}
86     # Allow building with system-installed wiiuse on Darwin
87     substituteInPlace CMakeLists.txt \
88       --replace 'NOT (APPLE OR HAIKU)) AND USE_SYSTEM_WIIUSE' 'NOT (HAIKU)) AND USE_SYSTEM_WIIUSE'
89   '';
91   nativeBuildInputs = [
92     cmake
93     pkg-config
94     makeWrapper
95   ];
97   buildInputs = [
98     shaderc
99     SDL2
100     glew
101     libvorbis
102     libogg
103     freetype
104     curl
105     libjpeg
106     libpng
107     harfbuzz
108     mcpp
109     wiiuse
110     angelscript
111     sqlite
112   ]
113   ++ lib.optional (stdenv.hostPlatform.isWindows || stdenv.hostPlatform.isLinux) libopenglrecorder
114   ++ lib.optional stdenv.hostPlatform.isLinux openal
115   ++ lib.optionals stdenv.hostPlatform.isDarwin [ OpenAL IOKit Cocoa IOBluetooth libsamplerate ];
117   cmakeFlags = [
118     "-DBUILD_RECORDER=${if (stdenv.hostPlatform.isWindows || stdenv.hostPlatform.isLinux) then "ON" else "OFF"}"
119     "-DUSE_SYSTEM_ANGELSCRIPT=ON"
120     "-DCHECK_ASSETS=OFF"
121     "-DUSE_SYSTEM_WIIUSE=ON"
122     "-DOpenGL_GL_PREFERENCE=GLVND"
123   ];
125   CXXFLAGS = [
126     # GCC 13: error: 'snprintf' was not declared in this scope
127     "-include cstdio"
128     # GCC 13: error: 'runtime_error' is not a member of 'std'
129     "-include stdexcept"
130   ];
132   # Extract binary from built app bundle
133   postInstall = lib.optionalString stdenv.hostPlatform.isDarwin ''
134     mkdir $out/bin
135     mv $out/{supertuxkart.app/Contents/MacOS,bin}/supertuxkart
136     rm -rf $out/supertuxkart.app
137   '';
139   # Obtain the assets directly from the fetched store path, to avoid duplicating assets across multiple engine builds
140   preFixup = ''
141     wrapProgram $out/bin/supertuxkart \
142       --set-default SUPERTUXKART_ASSETS_DIR "${assets}" \
143       --set-default SUPERTUXKART_DATADIR "$out/share/supertuxkart" \
144   '';
146   meta = with lib; {
147     description = "Free 3D kart racing game";
148     mainProgram = "supertuxkart";
149     longDescription = ''
150       SuperTuxKart is a Free 3D kart racing game, with many tracks,
151       characters and items for you to try, similar in spirit to Mario
152       Kart.
153     '';
154     homepage = "https://supertuxkart.net/";
155     license = licenses.gpl2Plus;
156     maintainers = with maintainers; [ pyrolagus peterhoeg ];
157     platforms = with platforms; unix;
158     changelog = "https://github.com/supertuxkart/stk-code/blob/${version}/CHANGELOG.md";
159   };