1{ stdenv, lib, runCommand, buildEnv, makeWrapper, makeDesktopItem, gamePacks, libstdcxx5, SDL, openal }:
2
3let
4 game = buildEnv {
5 name = "ut2004-game";
6 paths = gamePacks;
7 ignoreCollisions = true;
8 pathsToLink = [ "/" "/System" ];
9 postBuild = ''
10 ln -s ${lib.getLib SDL}/lib/libSDL-1.2.so.0 $out/System
11 ln -s ${lib.getLib openal}/lib/libopenal.so $out/System/openal.so
12 for i in $out/System/*-bin; do
13 path="$(readlink -f "$i")"
14 rm "$i"
15 cp "$path" "$i"
16 chmod +w "$i"
17 patchelf \
18 --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \
19 --set-rpath "$out/System:${lib.makeLibraryPath [ libstdcxx5 ]}" \
20 "$i"
21 done
22 '';
23 };
24
25 desktop = makeDesktopItem {
26 name = "ut2004";
27 desktopName = "Unreal Tournament 2004";
28 comment = "A first-person shooter video game developed by Epic Games and Digital Extreme";
29 genericName = "First-person shooter";
30 categories = "Application;Game;";
31 exec = "ut2004";
32 };
33
34in runCommand "ut2004" {
35 nativeBuildInputs = [ makeWrapper ];
36} ''
37 mkdir -p $out/bin
38 for i in ${game}/System/*-bin; do
39 name="$(basename "$i")"
40 makeWrapper $i $out/bin/''${name%-bin} \
41 --run "cd ${game}/System"
42 done
43
44 mkdir -p $out/share/applications
45 ln -s ${desktop}/share/applications/* $out/share/applications
46''