* Unreal Tournament 2004 Demo. Also a binary-only component.

An interesting complication is that we have to change the ELF type
  of the executable from `Linux' to `SVR4', otherwise the
  `ld-linux.so.2' trick to override the glibc used doesn't work
  (apparently `Linux' is not a recognised ELF type!).

  UT doesn't work with software Mesa, so right now we impurily use
  `/usr/lib/libGL.so'.  I cannot really test whether it works with
  hardware Mesa, since it barfs with an error about missing OpenGL
  extensions.  But that's probably because I'm testing this on an
  iBook over an SSH connection to a Linux machine.

svn path=/nixpkgs/trunk/; revision=1047
This commit is contained in:
Eelco Dolstra 2004-06-09 18:06:29 +00:00
parent ce53f3736e
commit 8e22f2f58b
6 changed files with 86 additions and 2 deletions

View File

@ -47,4 +47,19 @@ In file included from IntrinsicI.h:55,
from ActionHook.c:69:
include/X11/IntrinsicP.h:202:25: X11/ObjectP.h: No such file or directory
(moved to include/X11; should edit include/Makefile.am)
(moved to include/X11; should edit include/Makefile.am)
* Doesn't parse:
{stdenv, fetchurl /* pkgconfig, libX11 */ }:
stdenv.mkDerivation {
name = "libXi-6.0.1";
src = fetchurl {
url = http://freedesktop.org/~xlibs/release/libXi-6.0.1.tar.bz2;
md5 = "7e935a42428d63a387b3c048be0f2756";
};
/* buildInputs = [pkgconfig];
propagatedBuildInputs = [libX11]; */
}

View File

@ -14,3 +14,4 @@
* diffutils retains a dependency on coreutils/bin/pr; causes stdenv to
depend on 2 copies of coreutils (the first one impure in
stdenv-nix-linux!)

View File

@ -0,0 +1,22 @@
. $stdenv/setup
skip=7976
bunzip2 < $src | (dd bs=1 count=$skip of=/dev/null && dd bs=1M) | tar xvf - ut2004demo.tar
mkdir $out
(cd $out && tar xvf -) < ut2004demo.tar
# Patch the executable from ELF OS/ABI type `Linux' (3) to `SVR4' (0).
# This doesn't seem to matter to ld-linux.so.2 at all, except that it
# refuses to load `Linux' executables when invokes explicitly, that
# is, when we do `ld-linux.so.2 $out/System/ut2004-bin', which we need
# to override the hardcoded ELF interpreter with our own.
# This is a horrible hack, of course. A better solution would be to
# patch Glibc so it accepts the `Linux' ELF type as well (why doesn't
# it?); or to use FreeBSD's `brandelf' program to set to ELF type
# (which is a bit cleaner than patching using `dd' :-) ).
(cd $out/System && (echo -en "\000" | dd bs=1 seek=7 of=ut2004-bin conv=notrunc))

View File

@ -0,0 +1,26 @@
{stdenv, fetchurl, xlibs, mesa}:
assert stdenv.system == "i686-linux";
let {
raw = stdenv.mkDerivation {
name = "ut2004demo-3120";
src = fetchurl {
url = ftp://ftp.infogrames.net/demos/ut2004/ut2004-lnx-demo-3120.run.bz2;
md5 = "da200b043add9d083f6aa7581e6829f0";
};
builder = ./builder.sh;
};
body = stdenv.mkDerivation {
name = raw.name;
builder = ./make-wrapper.sh;
inherit raw mesa;
inherit (xlibs) libX11 libXext;
};
}
# http://mirror1.icculus.org/ut2004/ut2004-lnxpatch3204.tar.bz2
# 5f659552095b878a029b917d216d9664

View File

@ -0,0 +1,16 @@
. $stdenv/setup
mkdir $out
mkdir $out/bin
glibc=$(cat $NIX_GCC/nix-support/orig-glibc)
cat > $out/bin/ut2004demo <<EOF
#! $SHELL -e
cd $raw/System
LD_LIBRARY_PATH=$libX11/lib:$libXext/lib:/usr/lib:$mesa/lib $glibc/lib/ld-linux.so.2 ./ut2004-bin "\$@"
EOF
chmod +x $out/bin/ut2004demo

View File

@ -609,7 +609,11 @@ rec {
quake3demo = (import ../games/quake3demo) {
inherit fetchurl stdenv xlibs mesa;
}
};
ut2004demo = (import ../games/ut2004demo) {
inherit fetchurl stdenv xlibs mesa;
};
### MISC