ansible-later: 2.0.22 -> 2.0.23
[NixPkgs.git] / pkgs / games / unvanquished / default.nix
blob5a088f34a4cee42d8d4dd36d4d7b74c1b6e7158c
1 { lib
2 , stdenv
3 , fetchzip
4 , fetchFromGitHub
5 , fetchpatch
6 , SDL2
7 , buildFHSUserEnv
8 , cmake
9 , copyDesktopItems
10 , curl
11 , freetype
12 , gcc
13 , geoip
14 , glew
15 , gmp
16 , libGL
17 , libjpeg
18 , libogg
19 , libopus
20 , libpng
21 , libvorbis
22 , libwebp
23 , lua5
24 , makeDesktopItem
25 , ncurses
26 , nettle
27 , openal
28 , opusfile
29 , zlib
30 # to download assets
31 , aria2
32 , cacert
35 let
36   version = "0.53.2";
37   binary-deps-version = "6";
39   src = fetchFromGitHub {
40     owner = "Unvanquished";
41     repo = "Unvanquished";
42     rev = "v${version}";
43     fetchSubmodules = true;
44     sha256 = "sha256-VqMhA6GEYh/m+dzOgXS+5Jqo4x7RrQf4qIwstdTTU+E=";
45   };
47   unvanquished-binary-deps = stdenv.mkDerivation rec {
48     # DISCLAIMER: this is selected binary crap from the NaCl SDK
49     name = "unvanquished-binary-deps";
50     version = binary-deps-version;
52     src = fetchzip {
53       url = "https://dl.unvanquished.net/deps/linux64-${version}.tar.bz2";
54       sha256 = "sha256-ERfg89oTf9JTtv/qRnTRIzFP+zMpHT8W4WAIxqogy9E=";
55     };
57     dontPatchELF = true;
59     preFixup = ''
60       # We are not using the autoPatchelfHook, because it would make
61       # nacl_bootstrap_helper unable to load nacl_loader:
62       # "nacl_loader: ELF file has unreasonable e_phnum=13"
63       interpreter="$(< "$NIX_CC/nix-support/dynamic-linker")"
64       for f in pnacl/bin/*; do
65         if [ -f "$f" && -x "$f" ]; then
66           echo "Patching $f"
67           patchelf --set-interpreter "$interpreter" "$f"
68         fi
69       done
70     '';
72     preCheck = ''
73       # check it links correctly
74       pnacl/bin/clang -v
75     '';
77     installPhase = ''
78       runHook preInstall
80       mkdir -p $out
81       cp -R ./* $out/
83       runHook postInstall
84     '';
85   };
87   libstdcpp-preload-for-unvanquished-nacl = stdenv.mkDerivation {
88     name = "libstdcpp-preload-for-unvanquished-nacl";
90     propagatedBuildInputs = [ gcc.cc.lib ];
92     buildCommand = ''
93       mkdir $out/etc -p
94       echo ${gcc.cc.lib}/lib/libstdc++.so.6 > $out/etc/ld-nix.so.preload
95     '';
96   };
98   fhsEnv = buildFHSUserEnv {
99     name = "unvanquished-fhs-wrapper";
101     targetPkgs = pkgs: [ libstdcpp-preload-for-unvanquished-nacl ];
102   };
104   wrapBinary = binary: wrappername: ''
105     cat > $out/lib/${binary}-wrapper <<-EOT
106     #!/bin/sh
107     exec $out/lib/${binary} -pakpath ${unvanquished-assets} "\$@"
108     EOT
109     chmod +x $out/lib/${binary}-wrapper
111     cat > $out/bin/${wrappername} <<-EOT
112     #!/bin/sh
113     exec ${fhsEnv}/bin/unvanquished-fhs-wrapper $out/lib/${binary}-wrapper "\$@"
114     EOT
115     chmod +x $out/bin/${wrappername}
116   '';
118   unvanquished-assets = stdenv.mkDerivation {
119     pname = "unvanquished-assets";
120     inherit version src;
122     outputHash = "sha256-MPqyqcZGc5KlkftGCspWhISBJ/h+Os29g7ZK6yWz0cQ=";
123     outputHashMode = "recursive";
125     nativeBuildInputs = [ aria2 cacert ];
127     buildCommand = ''
128       bash $src/download-paks --cache=$(pwd) --version=${version} $out
129     '';
130   };
132 # this really is the daemon game engine, the game itself is in the assets
133 in stdenv.mkDerivation rec {
134   pname = "unvanquished";
135   inherit version src binary-deps-version;
137   preConfigure = ''
138     mkdir daemon/external_deps/linux64-${binary-deps-version}/
139     cp -r ${unvanquished-binary-deps}/* daemon/external_deps/linux64-${binary-deps-version}/
140     chmod +w -R daemon/external_deps/linux64-${binary-deps-version}/
141   '';
143   nativeBuildInputs = [
144     cmake
145     unvanquished-binary-deps
146     copyDesktopItems
147   ];
149   buildInputs = [
150     gmp
151     libGL
152     zlib
153     ncurses
154     geoip
155     lua5
156     nettle
157     curl
158     SDL2
159     freetype
160     glew
161     openal
162     libopus
163     opusfile
164     libogg
165     libvorbis
166     libjpeg
167     libwebp
168     libpng
169   ];
171   cmakeFlags = [
172     "-DBUILD_CGAME=NO"
173     "-DBUILD_SGAME=NO"
174     "-DUSE_HARDENING=TRUE"
175     "-DUSE_LTO=TRUE"
176     "-DOpenGL_GL_PREFERENCE=LEGACY" # https://github.com/DaemonEngine/Daemon/issues/474
177   ];
179   desktopItems = [
180     (makeDesktopItem {
181       name = "net.unvanquished.Unvanquished.desktop";
182       desktopName = "Unvanquished";
183       comment = "FPS/RTS Game - Aliens vs. Humans";
184       icon = "unvanquished";
185       exec = "unvanquished";
186       categories = [ "Game" "ActionGame" "StrategyGame" ];
187       prefersNonDefaultGPU = true;
188     })
189     (makeDesktopItem {
190       name = "net.unvanquished.UnvanquishedProtocolHandler.desktop";
191       desktopName = "Unvanquished (protocol handler)";
192       noDisplay = true;
193       exec = "unvanquished -connect %u";
194       mimeTypes = [ "x-scheme-handler/unv" ];
195       prefersNonDefaultGPU = true;
196     })
197   ];
199   installPhase = ''
200     runHook preInstall
202     for f in daemon daemon-tty daemonded nacl_loader nacl_helper_bootstrap; do
203       install -Dm0755 -t $out/lib/ $f
204     done
205     install -Dm0644 -t $out/lib/ irt_core-x86_64.nexe
207     mkdir $out/bin/
208     ${wrapBinary "daemon"     "unvanquished"}
209     ${wrapBinary "daemon-tty" "unvanquished-tty"}
210     ${wrapBinary "daemonded"  "unvanquished-server"}
212     for d in ${src}/dist/icons/*; do
213       install -Dm0644 -t $out/share/icons/hicolor/$(basename $d)/apps/ $d/unvanquished.png
214     done
216     runHook postInstall
217   '';
219   meta = {
220     homepage = "https://unvanquished.net/";
221     downloadPage = "https://unvanquished.net/download/";
222     description = "A fast paced, first person strategy game";
223     # don't replace the following lib.licenses.zlib with just "zlib",
224     # or you would end up with the package instead
225     license = with lib.licenses; [
226       mit gpl3Plus lib.licenses.zlib bsd3 # engine
227       cc-by-sa-25 cc-by-sa-30 cc-by-30 cc-by-sa-40 cc0 # assets
228     ];
229     sourceProvenance = with lib.sourceTypes; [
230       fromSource
231       binaryNativeCode  # unvanquished-binary-deps
232     ];
233     maintainers = with lib.maintainers; [ afontain ];
234     platforms = [ "x86_64-linux" ];
235   };