about summary refs log tree commit diff
path: root/pkgs/games/ue4/default.nix
diff options
context:
space:
mode:
authorBrian McKenna <bmckenna@atlassian.com>2016-02-18 13:50:26 +1100
committerBrian McKenna <bmckenna@atlassian.com>2016-02-19 14:41:51 +1100
commit392699a82d2c98fe4fa451364ec3b50d22ed5732 (patch)
treee76848cce145c7fa69d2a1a22caa9045c44db114 /pkgs/games/ue4/default.nix
parent412dd80149e837ef89171f1fe0f0423e3b72aa21 (diff)
ue4: init at 4.10.2
This builds Unreal Engine 4 and has a wrapper to start the editor.

Sadly the application requires write access to a lot of paths. I have a
hack to do a symlink tree under $HOME and it works well, the UE4Editor
binary just needs to be not a symlink.
Diffstat (limited to 'pkgs/games/ue4/default.nix')
-rw-r--r--pkgs/games/ue4/default.nix82
1 files changed, 82 insertions, 0 deletions
diff --git a/pkgs/games/ue4/default.nix b/pkgs/games/ue4/default.nix
new file mode 100644
index 0000000000000..ac14c40f52b89
--- /dev/null
+++ b/pkgs/games/ue4/default.nix
@@ -0,0 +1,82 @@
+{ stdenv, writeScript, fetchurl, requireFile, unzip, clang_35, mono, which,
+  xorg, xdg-user-dirs }:
+
+let
+  inherit (stdenv) lib;
+  deps = import ./cdn-deps.nix { inherit fetchurl; };
+  linkDeps = writeScript "link-deps.sh" (lib.concatMapStringsSep "\n" (hash:
+    let prefix = lib.concatStrings (lib.take 2 (lib.stringToCharacters hash));
+    in ''
+      mkdir -p .git/ue4-gitdeps/${prefix}
+      ln -s ${lib.getAttr hash deps} .git/ue4-gitdeps/${prefix}/${hash}
+    ''
+  ) (lib.attrNames deps));
+  libPath = stdenv.lib.makeLibraryPath [
+    xorg.libX11 xorg.libXScrnSaver xorg.libXau xorg.libXcursor xorg.libXext
+    xorg.libXfixes xorg.libXi xorg.libXrandr xorg.libXrender xorg.libXxf86vm
+    xorg.libxcb
+  ];
+in
+stdenv.mkDerivation rec {
+  name = "ue4-${version}";
+  version = "4.10.2";
+  sourceRoot = "UnrealEngine-${version}-release";
+  src = requireFile {
+    name = "${sourceRoot}.zip";
+    url = "https://github.com/EpicGames/UnrealEngine/releases/tag/${version}";
+    sha256 = "1rh6r2z00kjzq1i2235py65bg9i482az4rwr14kq9n4slr60wkk1";
+  };
+  unpackPhase = ''
+    ${unzip}/bin/unzip $src
+  '';
+  configurePhase = ''
+    ${linkDeps}
+
+    # Sometimes mono segfaults and things start downloading instead of being
+    # deterministic. Let's just fail in that case.
+    export http_proxy="nodownloads"
+
+    patchShebangs Setup.sh
+    patchShebangs Engine/Build/BatchFiles/Linux
+    ./Setup.sh
+    ./GenerateProjectFiles.sh
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/UnrealEngine
+
+    sharedir="$out/share/UnrealEngine"
+
+    cat << EOF > $out/bin/UE4Editor
+    #! $SHELL -e
+
+    sharedir="$sharedir"
+
+    # Can't include spaces, so can't piggy-back off the other Unreal directory.
+    workdir="\$HOME/.config/unreal-engine-nix-workdir"
+    if [ ! -e "\$workdir" ]; then
+      mkdir -p "\$workdir"
+      ${xorg.lndir}/bin/lndir "\$sharedir" "\$workdir"
+      unlink "\$workdir/Engine/Binaries/Linux/UE4Editor"
+      cp "\$sharedir/Engine/Binaries/Linux/UE4Editor" "\$workdir/Engine/Binaries/Linux/UE4Editor"
+    fi
+
+    cd "\$workdir/Engine/Binaries/Linux"
+    export PATH="${xdg-user-dirs}/bin\''${PATH:+:}\$PATH"
+    export LD_LIBRARY_PATH="${libPath}\''${LD_LIBRARY_PATH:+:}\$LD_LIBRARY_PATH"
+    exec ./UE4Editor "\$@"
+    EOF
+    chmod +x $out/bin/UE4Editor
+
+    cp -r . "$sharedir"
+  '';
+  buildInputs = [ clang_35 mono which xdg-user-dirs ];
+
+  meta = {
+    description = "A suite of integrated tools for game developers to design and build games, simulations, and visualizations";
+    homepage = https://www.unrealengine.com/what-is-unreal-engine-4;
+    license = stdenv.lib.licenses.unfree;
+    platforms = stdenv.lib.platforms.linux;
+    maintainers = [ stdenv.lib.maintainers.puffnfresh ];
+  };
+}