x@{builderDefsPackage
  , mesa, SDL, scons, SDL_ttf, SDL_image, zlib, SDL_net, speex, libvorbis
  , libogg, boost, fribidi, bsdiff
  , ...}:
builderDefsPackage
(a :  
let 
  helperArgNames = ["stdenv" "fetchurl" "builderDefsPackage"] ++ 
    [];

  buildInputs = [ boost.lib ]
    ++ map (n: builtins.getAttr n x)
     (builtins.attrNames (builtins.removeAttrs x helperArgNames));
  sourceInfo = rec {
   baseName="glob2";
    version="0.9.4";
    patchlevel="4";
    name="${baseName}-${version}.${patchlevel}";
    url="mirror://savannah/glob2/${version}/${name}.tar.gz";
    hash="1f0l2cqp2g3llhr9jl6jj15k0wb5q8n29vqj99xy4p5hqs78jk8g";
  };
in
rec {
  src = a.fetchurl {
    url = sourceInfo.url;
    sha256 = sourceInfo.hash;
  };

  tutorial4patch = a.fetchurl {
    url = "http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=34;filename=tutorial-part4.map.bspatch;att=1;bug=595448";
    name = "globulation2-tutorial4-map-patch-debian.bspatch";
    sha256 = "d3511ac0f822d512c42abd34b3122f2990862d3d0af6ce464ff372f5bd7f35e9";
  };

  inherit (sourceInfo) name version;
  inherit buildInputs;

  /* doConfigure should be removed if not needed */
  phaseNames = ["doUnpack" "doPatch" "doBspatch" "workaroundScons" "doScons"];

  patches = [./header-order.patch];

  doBspatch = a.fullDepEntry ''
    cp campaigns/tutorial-part4.map{,.orig}
    bspatch  campaigns/tutorial-part4.map{.orig,} ${tutorial4patch}
  '' ["minInit" "doUnpack" "addInputs"];

  # FIXME
  # I officially fail to understand what goes on, but that seems to work
  # too well not to use. Yes, it is ugly, I know...
  workaroundScons = a.fullDepEntry ''
    echo '#! ${a.stdenv.shell}' >> o
    echo 'g++ -o "$@"' >> o
    chmod a+x o
    export PATH="$PATH:$PWD"
  '' ["minInit"];

  sconsFlags = [
    "DATADIR=$out/share/globulation2/glob2"
    "BINDIR=$out/bin"
    "INSTALLDIR=$out/share/globulation2"
  ];
      
  meta = {
    description = "RTS without micromanagement";
    maintainers = with a.lib.maintainers;
    [
      raskin
    ];
    platforms = with a.lib.platforms;
      linux;
    license = a.lib.licenses.gpl3;
  };
  passthru = {
    updateInfo = {
      downloadPage = "http://globulation2.org/wiki/Download_and_Install";
    };
  };
}) x

