anchor.diff: -{ mkDerivation, lib, fetchFromGitHub, cmake, ninja, flex, bison, proj, geos, xlibsWrapper, sqlite, gsl
  -, qwt, fcgi, python3Packages, libspatialindex, libspatialite, postgresql
  -, txt2tags, openssl, libzip, hdf5, netcdf, exiv2
  -, qtbase, qtsensors, qca-qt5, qtkeychain, qscintilla, qtserialport, qtxmlpatterns
  -, withGrass ? true, grass
  -, withWebKit ? true, qtwebkit
  -}:
  +{ mkDerivation, lib, fetchFromGitHub, cmake, ninja, flex, bison, proj, geos
  +, xlibsWrapper, sqlite, gsl, qwt, fcgi, python3Packages, libspatialindex
  +, libspatialite, postgresql, txt2tags, openssl, libzip, hdf5, netcdf, exiv2
  +, protobuf, qtbase, qtsensors, qca-qt5, qtkeychain, qscintilla, qtserialport
  +, qtxmlpatterns, withGrass ? true, grass, withWebKit ? true, qtwebkit }:
   with lib;
   let
  -  pythonBuildInputs = with python3Packages;
  -    [ qscintilla-qt5 gdal jinja2 numpy psycopg2
  -      chardet dateutil pyyaml pytz requests urllib3 pygments pyqt5 sip owslib six ];
  +  pythonBuildInputs = with python3Packages; [
  +    qscintilla-qt5
  +    gdal
  +    jinja2
  +    numpy
  +    psycopg2
  +    chardet
  +    dateutil
  +    pyyaml
  +    pytz
  +    requests
  +    urllib3
  +    pygments
  +    pyqt5
  +    sip
  +    owslib
  +    six
  +  ];
   in mkDerivation rec {
  -  version = "3.10.13";
  +  version = "3.16.5";
     pname = "qgis";
     name = "${pname}-unwrapped-${version}";
   
     src = fetchFromGitHub {
       owner = "qgis";
       repo = "QGIS";
  -    rev = "final-${lib.replaceStrings ["."] ["_"] version}";
  -    sha256 = "0za77znk1phrxzy2cgxpwrld3d0pi0xvhsg78rg4wkb23vaqv6zb";
  +    rev = "final-${lib.replaceStrings [ "." ] [ "_" ] version}";
  +    sha256 = "1xkvgj1v2jgp107jyh9xmk1dzbbqxwkqy69z56vsaa8lf9gwgn5h";
     };
   
     passthru = {
  
positive.code:     inherit python3Packages;
    };
  
    buildInputs = [ openssl proj geos xlibsWrapper sqlite gsl qwt exiv2
      fcgi libspatialindex libspatialite postgresql txt2tags libzip hdf5 netcdf
      qtbase qtsensors qca-qt5 qtkeychain qscintilla qtserialport qtxmlpatterns ]
      ++ lib.optional withGrass grass
      ++ lib.optional withWebKit qtwebkit
      ++ pythonBuildInputs;
  
  
negative.code:   # TODO: Correct PyQt5 to provide the expected directory and fix
    # build to use PYQT5_SIP_DIR consistently.
    postPatch = ''
      substituteInPlace cmake/FindPyQt5.py \
        --replace 'sip_dir = cfg.default_sip_dir' 'sip_dir = "${python3Packages.pyqt5}/share/sip/PyQt5"'
    '';
  
    cmakeFlags = [
      "-DCMAKE_SKIP_BUILD_RPATH=OFF"
      "-DPYQT5_SIP_DIR=${python3Packages.pyqt5}/share/sip/PyQt5"
      "-DQSCI_SIP_DIR=${python3Packages.qscintilla-qt5}/share/sip/PyQt5"
    ] ++ lib.optional (!withWebKit) "-DWITH_QTWEBKIT=OFF"
      ++ lib.optional withGrass "-DGRASS_PREFIX7=${grass}/${grass.name}";
  
    meta = {
      description = "A Free and Open Source Geographic Information System";
  