about summary refs log tree commit diff
path: root/pkgs/games/humblebundle/bastion.nix
blob: b4acda6b75a0ef51541cc233b9882ef1b4bc34f4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
{ stdenv, fetchHumbleBundle, lzma, xorg, libpulseaudio}:

let
  arch = {
    "i686-linux" = "x86";
    "x86_64-linux" = "x86_64";
  }.${stdenv.system};
in stdenv.mkDerivation rec {
  name = "bastion-1.4";

  src = fetchHumbleBundle {
    name = "Bastion-HIB-2012-06-20.sh";
    machineName = "bastion_linux";
    downloadName = ".sh";
    md5 = "aa6ccaead3b4b8a5fbd156f4019e8c8b";
  };

  dontStrip = true;
  phases = ["installPhase"];

  installPhase = let
    rpath = stdenv.lib.makeLibraryPath [
      "$dest"
      xorg.libX11
      xorg.libXi
      stdenv.cc.cc
      libpulseaudio
    ];
   in ''
    dest="$out/opt/games/bastion"
    libdir="$dest/lib" #${stdenv.lib.optionalString (arch=="x86_64") "64"}"

    # Unpack binaries and data into $dest
    mkdir -p "$dest"
    sh "$src" --tar xf ./instarchive_all -O           | ${lzma}/bin/lzcat | tar x -C "$dest"
    sh "$src" --tar xf ./instarchive_linux_${arch} -O | ${lzma}/bin/lzcat | tar x -C "$dest"

    # Ensure that $dest is a valid library path.
    mv $dest/lib64 $libdir || true

    # Patch heavily :-)
    patchelf \
      --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
      --set-rpath "${rpath}" "$dest/Bastion.bin.${arch}"
    patchelf --set-rpath "${rpath}" "$libdir/libmono-2.0.so.1"
    patchelf --set-rpath "${rpath}" "$libdir/libfmodex.so"
    patchelf --set-rpath "${rpath}" "$libdir/libSDL-1.2.so.0"

    # Fixup permissions, just to be sure.
    find "$dest" -type f -exec chmod 644 "{}" +
    chmod 755 "$dest/Bastion.bin.${arch}"

    # Taken from ArchLinux; might be useful to actually implement
    #install -Dm644 "''${pkgname}".desktop "''${pkgdir}"/usr/share/applications/"''${pkgname}".desktop
    #install -Dm755 "mesa''${pkgname}" "''${pkgdir}"/usr/bin/"''${pkgname}"mesa
    #install -Dm644 "''${pkgdir}"/opt/games/Bastion/Bastion.png "''${pkgdir}"/usr/share/icons/"''${pkgname}".png

    # XXX: Make wrapper instead of symlink ? See ArchLinux's bastionmesa above.
    mkdir -p "$out/bin"
    ln -s "$dest/Bastion.bin.${arch}" "$out/bin/bastion"
  '';
}