lol
1{ stdenv, writeScript, fetchurl, requireFile, unzip, clang_35, mono, which,
2 xorg, xdg-user-dirs }:
3
4let
5 inherit (stdenv) lib;
6 deps = import ./cdn-deps.nix { inherit fetchurl; };
7 linkDeps = writeScript "link-deps.sh" (lib.concatMapStringsSep "\n" (hash:
8 let prefix = lib.concatStrings (lib.take 2 (lib.stringToCharacters hash));
9 in ''
10 mkdir -p .git/ue4-gitdeps/${prefix}
11 ln -s ${lib.getAttr hash deps} .git/ue4-gitdeps/${prefix}/${hash}
12 ''
13 ) (lib.attrNames deps));
14 libPath = stdenv.lib.makeLibraryPath [
15 xorg.libX11 xorg.libXScrnSaver xorg.libXau xorg.libXcursor xorg.libXext
16 xorg.libXfixes xorg.libXi xorg.libXrandr xorg.libXrender xorg.libXxf86vm
17 xorg.libxcb
18 ];
19in
20stdenv.mkDerivation rec {
21 name = "ue4-${version}";
22 version = "4.10.2";
23 sourceRoot = "UnrealEngine-${version}-release";
24 src = requireFile {
25 name = "${sourceRoot}.zip";
26 url = "https://github.com/EpicGames/UnrealEngine/releases/tag/${version}";
27 sha256 = "1rh6r2z00kjzq1i2235py65bg9i482az4rwr14kq9n4slr60wkk1";
28 };
29 unpackPhase = ''
30 ${unzip}/bin/unzip $src
31 '';
32 configurePhase = ''
33 ${linkDeps}
34
35 # Sometimes mono segfaults and things start downloading instead of being
36 # deterministic. Let's just fail in that case.
37 export http_proxy="nodownloads"
38
39 patchShebangs Setup.sh
40 patchShebangs Engine/Build/BatchFiles/Linux
41 ./Setup.sh
42 ./GenerateProjectFiles.sh
43 '';
44
45 installPhase = ''
46 mkdir -p $out/bin $out/share/UnrealEngine
47
48 sharedir="$out/share/UnrealEngine"
49
50 cat << EOF > $out/bin/UE4Editor
51 #! $SHELL -e
52
53 sharedir="$sharedir"
54
55 # Can't include spaces, so can't piggy-back off the other Unreal directory.
56 workdir="\$HOME/.config/unreal-engine-nix-workdir"
57 if [ ! -e "\$workdir" ]; then
58 mkdir -p "\$workdir"
59 ${xorg.lndir}/bin/lndir "\$sharedir" "\$workdir"
60 unlink "\$workdir/Engine/Binaries/Linux/UE4Editor"
61 cp "\$sharedir/Engine/Binaries/Linux/UE4Editor" "\$workdir/Engine/Binaries/Linux/UE4Editor"
62 fi
63
64 cd "\$workdir/Engine/Binaries/Linux"
65 export PATH="${xdg-user-dirs}/bin\''${PATH:+:}\$PATH"
66 export LD_LIBRARY_PATH="${libPath}\''${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH"
67 exec ./UE4Editor "\$@"
68 EOF
69 chmod +x $out/bin/UE4Editor
70
71 cp -r . "$sharedir"
72 '';
73 buildInputs = [ clang_35 mono which xdg-user-dirs ];
74
75 meta = {
76 description = "A suite of integrated tools for game developers to design and build games, simulations, and visualizations";
77 homepage = https://www.unrealengine.com/what-is-unreal-engine-4;
78 license = stdenv.lib.licenses.unfree;
79 platforms = stdenv.lib.platforms.linux;
80 maintainers = [ stdenv.lib.maintainers.puffnfresh ];
81 broken = true;
82 };
83}