* Quake 3 Arena Demo. The goal is to show that Nix can also be used

to deploy existing binary-only components.

  We use the `ld-linux.so.2 PROGRAM' trick to force the use of our own
  glibc, and set LD_LIBRARY_PATH to point to the required libraries
  (X11, Mesa).

  Since Mesa is software-only, Q3A is rather slow.  I'll have to
  figure out how to use the Mesa from XFree86 (X.Org), since it knows
  how to use DRI (or at least speak the GLX protocol).  Unfortunately
  the xlibs people haven't modularised that part of XFree86 yet.

  Also, the flag `+set s_initsound 0' has to be passed to Quake to
  disable sound, otherwise it segfaults on startup.  It doesn't do
  this with the normal glibc, which is strange.  Maybe it tries to
  dynamically load some sound library or something.

svn path=/nixpkgs/trunk/; revision=1046
This commit is contained in:
Eelco Dolstra 2004-06-09 17:59:46 +00:00
parent 7bbd1fd535
commit ce53f3736e
4 changed files with 53 additions and 0 deletions

View file

@ -0,0 +1,9 @@
. $stdenv/setup
skip=165
mkdir $out
cd $out
tail +165 $src | tar xvfz -

View file

@ -0,0 +1,23 @@
{stdenv, fetchurl, xlibs, mesa}:
assert stdenv.system == "i686-linux";
let {
raw = stdenv.mkDerivation {
name = "quake3demo-1.11-6";
src = fetchurl {
url = ftp://ftp.idsoftware.com/idstuff/quake3/linux/linuxq3ademo-1.11-6.x86.gz.sh;
md5 = "484610c1ce34272223a52ec331c99d5d";
};
builder = ./builder.sh;
};
body = stdenv.mkDerivation {
name = raw.name;
builder = ./make-wrapper.sh;
inherit raw mesa;
inherit (xlibs) libX11 libXext;
};
}

View file

@ -0,0 +1,17 @@
. $stdenv/setup
mkdir $out
mkdir $out/bin
mkdir $out/links
ln -s $raw/* $out/links
ln -s $out/links/bin/x86/glibc-2.1/q3demo $out/links/q3demo
glibc=$(cat $NIX_GCC/nix-support/orig-glibc)
cat > $out/bin/q3ademo <<EOF
#! $SHELL -e
LD_LIBRARY_PATH=$libX11/lib:$libXext/lib:$mesa/lib $glibc/lib/ld-linux.so.2 $out/links/q3demo "\$@" +set s_initsound 0
EOF
chmod +x $out/bin/q3ademo

View file

@ -607,6 +607,10 @@ rec {
inherit (xlibs) xlibs;
};
quake3demo = (import ../games/quake3demo) {
inherit fetchurl stdenv xlibs mesa;
}
### MISC