sdrangel: fix build on x86_64-darwin
[NixPkgs.git] / pkgs / games / unvanquished / default.nix
blob628c72a24a926a1e4ec87d54852b984a3c1a9164
1 { lib
2 , stdenv
3 , fetchzip
4 , fetchFromGitHub
5 , fetchpatch
6 , SDL2
7 , buildFHSEnv
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.54.1";
37   binary-deps-version = "10";
39   src = fetchFromGitHub {
40     owner = "Unvanquished";
41     repo = "Unvanquished";
42     rev = "v${version}";
43     fetchSubmodules = true;
44     sha256 = "sha256-F8U9UBFCe0PcFYZ2DThQwhouO22jKyWb0/ABhprHXCU=";
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/linux-amd64-default_${version}.tar.xz ";
54       sha256 = "sha256-5n8gRvTuke4e7EaZ/5G+dtCG6qmnawhtA1IXIFQPkzA=";
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 = buildFHSEnv {
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-xb8gKQHSyscWM29r0BWK0YsALull9uYjX7e+l1DHFPg=";
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     TARGET="linux-amd64-default_${binary-deps-version}"
139     mkdir daemon/external_deps/"$TARGET"
140     cp -r ${unvanquished-binary-deps}/* daemon/external_deps/"$TARGET"/
141     chmod +w -R daemon/external_deps/"$TARGET"/
142   '';
144   nativeBuildInputs = [
145     cmake
146     unvanquished-binary-deps
147     copyDesktopItems
148   ];
150   buildInputs = [
151     gmp
152     libGL
153     zlib
154     ncurses
155     geoip
156     lua5
157     nettle
158     curl
159     SDL2
160     freetype
161     glew
162     openal
163     libopus
164     opusfile
165     libogg
166     libvorbis
167     libjpeg
168     libwebp
169     libpng
170   ];
172   cmakeFlags = [
173     "-DBUILD_CGAME=NO"
174     "-DBUILD_SGAME=NO"
175     "-DUSE_HARDENING=TRUE"
176     "-DUSE_LTO=TRUE"
177     "-DOpenGL_GL_PREFERENCE=LEGACY" # https://github.com/DaemonEngine/Daemon/issues/474
178   ];
180   desktopItems = [
181     (makeDesktopItem {
182       name = "net.unvanquished.Unvanquished.desktop";
183       desktopName = "Unvanquished";
184       comment = "FPS/RTS Game - Aliens vs. Humans";
185       icon = "unvanquished";
186       exec = "unvanquished";
187       categories = [ "Game" "ActionGame" "StrategyGame" ];
188       prefersNonDefaultGPU = true;
189     })
190     (makeDesktopItem {
191       name = "net.unvanquished.UnvanquishedProtocolHandler.desktop";
192       desktopName = "Unvanquished (protocol handler)";
193       noDisplay = true;
194       exec = "unvanquished -connect %u";
195       mimeTypes = [ "x-scheme-handler/unv" ];
196       prefersNonDefaultGPU = true;
197     })
198   ];
200   installPhase = ''
201     runHook preInstall
203     for f in daemon daemon-tty daemonded nacl_loader nacl_helper_bootstrap; do
204       install -Dm0755 -t $out/lib/ $f
205     done
206     install -Dm0644 -t $out/lib/ irt_core-amd64.nexe
208     mkdir $out/bin/
209     ${wrapBinary "daemon"     "unvanquished"}
210     ${wrapBinary "daemon-tty" "unvanquished-tty"}
211     ${wrapBinary "daemonded"  "unvanquished-server"}
213     for d in ${src}/dist/icons/*; do
214       install -Dm0644 -t $out/share/icons/hicolor/$(basename $d)/apps/ $d/unvanquished.png
215     done
217     runHook postInstall
218   '';
220   meta = {
221     homepage = "https://unvanquished.net/";
222     downloadPage = "https://unvanquished.net/download/";
223     description = "A fast paced, first person strategy game";
224     # don't replace the following lib.licenses.zlib with just "zlib",
225     # or you would end up with the package instead
226     license = with lib.licenses; [
227       mit gpl3Plus lib.licenses.zlib bsd3 # engine
228       cc-by-sa-25 cc-by-sa-30 cc-by-30 cc-by-sa-40 cc0 # assets
229     ];
230     sourceProvenance = with lib.sourceTypes; [
231       fromSource
232       binaryNativeCode  # unvanquished-binary-deps
233     ];
234     maintainers = with lib.maintainers; [ afontain ];
235     platforms = [ "x86_64-linux" ];
236   };