anchor.diff:    isGNU =
         stdenv.system == "i686-gnu"
         || (stdenv ? cross && stdenv.cross.config == "i586-pc-gnu");
  +
   in
   
   assert isGNU -> mig != null && hurd != null;
  
positive.code: { fetchurl, fetchgit, stdenv, ncurses, readline, gmp, mpfr, expat, texinfo
  , dejagnu, python, target ? null
  
  # Set it to true to fetch the latest release/branchpoint from git.
  , bleedingEdgeVersion ? false
  
  # Additional dependencies for GNU/Hurd.
  , mig ? null, hurd ? null
  
  # needed for the git version
  , flex, bison }:
  
  let
    basename =
      if bleedingEdgeVersion
      then "gdb-7.3.20110726"
      else "gdb-7.4.1";
  
    # Whether (cross-)building for GNU/Hurd.  This is an approximation since
    # having `stdenv ? cross' doesn't tell us if we're building `hostDrv' and
  
negative.code:   name = basename + stdenv.lib.optionalString (target != null)
        ("-" + target.config);
  
    src = fetchurl {
      url = "mirror://gnu/gdb/${basename}.tar.bz2";
      md5 = "8854d34691087ec127d934692639855f";
    };
  
    # I think python is not a native input, but I leave it
    # here while I will not need it cross building
    buildNativeInputs = [ texinfo python ]
      ++ stdenv.lib.optional isGNU mig;
  
    buildInputs = [ ncurses readline gmp mpfr expat ]
      ++ stdenv.lib.optional isGNU hurd
      ++ stdenv.lib.optional doCheck dejagnu;
  
    enableParallelBuilding = true;
  
    configureFlags = with stdenv.lib;
      '' --with-gmp=${gmp} --with-mpfr=${mpfr} --with-system-readline
         --with-expat --with-libexpat-prefix=${expat}
      ''
      + optionalString (target != null) " --target=${target.config}"
      + optionalString (elem stdenv.system platforms.cygwin) "  --without-python";
  
    crossAttrs = {
      # Do not add --with-python here to avoid cross building it.
  