about summary refs log tree commit diff
path: root/nixpkgs/pkgs/games/arena/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/games/arena/default.nix')
-rw-r--r--nixpkgs/pkgs/games/arena/default.nix75
1 files changed, 75 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/games/arena/default.nix b/nixpkgs/pkgs/games/arena/default.nix
new file mode 100644
index 000000000000..16553a5f8ea6
--- /dev/null
+++ b/nixpkgs/pkgs/games/arena/default.nix
@@ -0,0 +1,75 @@
+{ lib, stdenv, fetchurl, gtk2-x11, glib, pango, cairo, atk, gdk-pixbuf, libX11 }:
+
+# Arena is free software in the sense of "free beer" but not as in "free
+# speech". We can install it as we please, but we cannot re-distribute it in
+# any way other than the original release tarball, so we cannot include its NAR
+# into the Nixpkgs channel.
+
+let
+
+  inherit (lib) makeLibraryPath;
+  libDir = "lib64";
+
+in
+stdenv.mkDerivation rec {
+  pname = "arena";
+  version = "3.10-beta";
+
+  src = fetchurl {
+    url = "http://www.playwitharena.de/downloads/arenalinux_64bit_${lib.replaceStrings ["-"] [""] version}.tar.gz";
+    sha256 = "1pzb9sg4lzbbi4gbldvlb85p8xyl9xnplxwyb9pkk2mwzvvxkf0d";
+  };
+
+  # stdenv.cc.cc.lib is in that list to pick up libstdc++.so. Is there a better way?
+  buildInputs = [gtk2-x11 glib pango cairo atk gdk-pixbuf libX11 stdenv.cc.cc.lib];
+
+  unpackPhase = ''
+    # This is is a tar bomb, i.e. it extract a dozen files and directories to
+    # the top-level, so we must create a sub-directory first.
+    mkdir -p $out/lib/${pname}-${version}
+    tar -C $out/lib/${pname}-${version} -xf ${src}
+
+    # Remove executable bits from data files. This matters for the find command
+    # we'll use below to find all bundled engines.
+    chmod -x $out/lib/${pname}-${version}/Engines/*/*.{txt,bin,bmp,zip}
+  '';
+
+  buildPhase = ''
+    # Arena has (at least) two executables plus a couple of bundled chess
+    # engines that we need to patch.
+    exes=( $(find $out -name '*x86_64_linux')
+           $(find $out/lib/${pname}-${version}/Engines -type f -perm /u+x)
+         )
+    for i in "''${exes[@]}"; do
+      # Arminius is statically linked.
+      if [[ $i =~ "Arminius_2017-01-01" ]]; then echo yo $i; continue; fi
+      echo Fixing interpreter and rpath paths in $i ...
+      patchelf                                                                                   \
+        --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)"                                \
+        --set-rpath ${makeLibraryPath buildInputs}:$(cat $NIX_CC/nix-support/orig-cc)/${libDir}  \
+        $i
+    done
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    ln -s $out/lib/${pname}-${version}/Arena_x86_64_linux $out/bin/arena
+  '';
+
+  dontStrip = true;
+
+  meta = {
+    description = "Chess GUI for analyzing with and playing against various engines";
+    longDescription = ''
+      A free Graphical User Interface (GUI) for chess. Arena assists you in
+      analyzing and playing games as well as in testing chess engines. It runs
+      on Linux or Windows. Arena is compatible to Winboard protocol I, II and
+      UCI protocol I, II. Furthermore, compatible to Chess960, DGT electronic
+      chess board & DGT clocks and much more.
+    '';
+    license = lib.licenses.unfree;
+    platforms = ["x86_64-linux"];
+    hydraPlatforms = lib.platforms.none;
+  };
+
+}