handheld-daemon-ui: 3.2.3 -> 3.3.0 (#361609)
[NixPkgs.git] / pkgs / games / xonotic / default.nix
blob3977f87f8e9393b48ec0b1362be7616ef9f4368c
1 { lib, stdenv, fetchurl, fetchzip, makeWrapper, runCommand, makeDesktopItem
2 , xonotic-data, copyDesktopItems
3 , # required for both
4   unzip, libjpeg, zlib, libvorbis, curl, freetype, libpng, libtheora
5 , # glx
6   libX11, libGLU, libGL, libXpm, libXext, libXxf86vm, alsa-lib
7 , # sdl
8   SDL2
9 , # blind
10   gmp
12 , withSDL ? true
13 , withGLX ? false
14 , withDedicated ? true
17 let
18   pname = "xonotic";
19   version = "0.8.6";
20   name = "${pname}-${version}";
21   variant =
22     if withSDL && withGLX then
23       ""
24     else if withSDL then
25       "-sdl"
26     else if withGLX then
27       "-glx"
28     else if withDedicated then
29       "-dedicated"
30     else "-what-even-am-i";
32   meta = {
33     description = "A free fast-paced first-person shooter";
34     longDescription = ''
35       Xonotic is a free, fast-paced first-person shooter that works on
36       Windows, macOS and Linux. The project is geared towards providing
37       addictive arena shooter gameplay which is all spawned and driven
38       by the community itself. Xonotic is a direct successor of the
39       Nexuiz project with years of development between them, and it
40       aims to become the best possible open-source FPS of its kind.
41     '';
42     homepage = "https://www.xonotic.org/";
43     license = lib.licenses.gpl2Plus;
44     maintainers = with lib.maintainers; [ astsmtl zalakain ];
45     platforms = lib.platforms.linux;
46   };
48   desktopItem = makeDesktopItem {
49     name = "xonotic";
50     exec = "xonotic";
51     comment = meta.description;
52     desktopName = "Xonotic";
53     categories = [ "Game" "Shooter" ];
54     icon = "xonotic";
55     startupNotify = false;
56   };
58   xonotic-unwrapped = stdenv.mkDerivation rec {
59     pname = "xonotic${variant}-unwrapped";
60     inherit version;
62     src = fetchurl {
63       url = "https://dl.xonotic.org/xonotic-${version}-source.zip";
64       hash = "sha256-i5KseBz/SuicEhoj6s197AWiqr7azMI6GdGglYtAEqg=";
65     };
67     nativeBuildInputs = [ unzip ];
68     buildInputs = [ libjpeg zlib libvorbis curl gmp ]
69       ++ lib.optionals withGLX [ libX11 libGLU libGL libXpm libXext libXxf86vm alsa-lib ]
70       ++ lib.optionals withSDL [ SDL2 ];
72     sourceRoot = "Xonotic/source/darkplaces";
74     # "debug", "release", "profile"
75     target = "release";
77     dontStrip = target != "release";
79     postConfigure = ''
80       pushd ../d0_blind_id
81       ./configure $configureFlags
82       popd
83     '';
85     buildPhase = (lib.optionalString withDedicated ''
86       make -j $NIX_BUILD_CORES sv-${target}
87     '' + lib.optionalString withGLX ''
88       make -j $NIX_BUILD_CORES cl-${target}
89     '' + lib.optionalString withSDL ''
90       make -j $NIX_BUILD_CORES sdl-${target}
91     '') + ''
92       pushd ../d0_blind_id
93       make -j $NIX_BUILD_CORES
94       popd
95     '';
97     enableParallelBuilding = true;
99     installPhase = (''
100       install -Dm644 ../../misc/logos/xonotic_icon.svg \
101         $out/share/icons/hicolor/scalable/apps/xonotic.svg
102       pushd ../../misc/logos/icons_png
103       for img in *.png; do
104         size=''${img#xonotic_}
105         size=''${size%.png}
106         dimensions="''${size}x''${size}"
107         install -Dm644 $img \
108           $out/share/icons/hicolor/$dimensions/apps/xonotic.png
109       done
110       popd
111     '' + lib.optionalString withDedicated ''
112       install -Dm755 darkplaces-dedicated "$out/bin/xonotic-dedicated"
113     '' + lib.optionalString withGLX ''
114       install -Dm755 darkplaces-glx "$out/bin/xonotic-glx"
115     '' + lib.optionalString withSDL ''
116       install -Dm755 darkplaces-sdl "$out/bin/xonotic-sdl"
117     '') + ''
118       pushd ../d0_blind_id
119       make install
120       popd
121     '';
123     # Xonotic needs to find libcurl.so at runtime for map downloads
124     dontPatchELF = true;
125     postFixup = lib.optionalString withDedicated ''
126       patchelf --add-needed ${curl.out}/lib/libcurl.so $out/bin/xonotic-dedicated
127     '' + lib.optionalString withGLX ''
128       patchelf \
129           --add-needed ${curl.out}/lib/libcurl.so \
130           --add-needed ${libvorbis}/lib/libvorbisfile.so \
131           --add-needed ${libvorbis}/lib/libvorbisenc.so \
132           --add-needed ${libvorbis}/lib/libvorbis.so \
133           --add-needed ${libGL.out}/lib/libGL.so \
134           --add-needed ${freetype}/lib/libfreetype.so \
135           --add-needed ${libpng}/lib/libpng.so \
136           --add-needed ${libtheora}/lib/libtheora.so \
137           $out/bin/xonotic-glx
138     '' + lib.optionalString withSDL ''
139       patchelf \
140           --add-needed ${curl.out}/lib/libcurl.so \
141           --add-needed ${libvorbis}/lib/libvorbisfile.so \
142           --add-needed ${libvorbis}/lib/libvorbisenc.so \
143           --add-needed ${libvorbis}/lib/libvorbis.so \
144           --add-needed ${freetype}/lib/libfreetype.so \
145           --add-needed ${libpng}/lib/libpng.so \
146           --add-needed ${libtheora}/lib/libtheora.so \
147           $out/bin/xonotic-sdl
148     '';
149   };
151 in rec {
152   xonotic-data = fetchzip {
153     name = "xonotic-data";
154     url = "https://dl.xonotic.org/xonotic-${version}.zip";
155     hash = "sha256-Lhjpyk7idmfQAVn4YUb7diGyyKZQBfwNXxk2zMOqiZQ=";
156     postFetch = ''
157       cd $out
158       rm -rf $(ls | grep -v "^data$" | grep -v "^key_0.d0pk$")
159     '';
160     meta.hydraPlatforms = [];
161     inherit version pname;
162   };
164   xonotic = runCommand "xonotic${variant}-${version}" {
165     inherit xonotic-unwrapped version;
166     pname = "${pname}${variant}";
167     nativeBuildInputs = [ makeWrapper copyDesktopItems ];
168     desktopItems = [ desktopItem ];
169     meta = meta // {
170       hydraPlatforms = [];
171     };
172   } (''
173     mkdir -p $out/bin
174   '' + lib.optionalString withDedicated ''
175     ln -s ${xonotic-unwrapped}/bin/xonotic-dedicated $out/bin/
176   '' + lib.optionalString withGLX ''
177     ln -s ${xonotic-unwrapped}/bin/xonotic-glx $out/bin/xonotic-glx
178     ln -s $out/bin/xonotic-glx $out/bin/xonotic
179   '' + lib.optionalString withSDL ''
180     ln -s ${xonotic-unwrapped}/bin/xonotic-sdl $out/bin/xonotic-sdl
181     ln -sf $out/bin/xonotic-sdl $out/bin/xonotic
182   '' + lib.optionalString (withSDL || withGLX) ''
183     mkdir -p $out/share
184     ln -s ${xonotic-unwrapped}/share/icons $out/share/icons
185     copyDesktopItems
186   '' + ''
187     for binary in $out/bin/xonotic-*; do
188       wrapProgram $binary --add-flags "-basedir ${xonotic-data}" --prefix LD_LIBRARY_PATH : "${xonotic-unwrapped}/lib"
189     done
190   '');