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