anchor.diff:  { stdenv, fetchurl
   , bzip2, curl, expat, libarchive, xz, zlib
  -, useNcurses ? false, ncurses, useQt4 ? false, qt4
  -, wantPS ? false, ps ? null
  +, useNcurses ? true, ncurses
   }:
   
   with stdenv.lib;
  
positive.code: in
  
  stdenv.mkDerivation rec {
    name = "cmake-${os useNcurses "cursesUI-"}${os useQt4 "qt4UI-"}${version}";
  
    inherit majorVersion;
  
  
negative.code:   patches =
      # Don't search in non-Nix locations such as /usr, but do search in
      # Nixpkgs' Glibc.
      optional (stdenv ? libc) ./search-path-3.2.patch;
  
    buildInputs = [ bzip2 curl expat libarchive xz zlib ]
      ++ optional useNcurses ncurses;
  
    propagatedBuildInputs = optional wantPS ps;
  
    CMAKE_PREFIX_PATH = stdenv.lib.concatStringsSep ":" buildInputs;
  
    configureFlags = [
      "--docdir=/share/doc/${name}"
      "--mandir=/share/man"
      "--no-system-jsoncpp"
    ] ++ ["--"]
      ++ optional (!useNcurses) "-DBUILD_CursesDialog=OFF";
  
    setupHook = ./setup-hook.sh;
  
    dontUseCmakeConfigure = true;
  
    preConfigure = optionalString (stdenv ? libc) ''
      source $setupHook
      fixCmakeFiles .
      substituteInPlace Modules/Platform/UnixPaths.cmake \
        --subst-var-by libc ${stdenv.libc}
    '';
  
    meta = {
      homepage = http://www.cmake.org/;
      description = "Cross-Platform Makefile Generator";
      platforms = stdenv.lib.platforms.all;
      maintainers = with stdenv.lib.maintainers; [ urkud mornfall ttuegel ];
    };
  }
  