anchor.diff:    # determine the version number, there might be different ones per architecture
     version = {
       x86_64-linux = "19.3.0.0.0";
  -    x86_64-darwin = "18.1.0.0.0";
  +    x86_64-darwin = "19.3.0.0.0";
     }.${stdenv.hostPlatform.system} or throwSystem;
   
     # hashes per component and architecture
  
positive.code:       odbc    = "1g1z6pdn76dp440fh49pm8ijfgjazx4cvxdi665fsr62h62xkvch";
      };
      x86_64-darwin = {
        basic   = "fac3cdaaee7526f6c50ff167edb4ba7ab68efb763de24f65f63fb48cc1ba44c0";
        sdk     = "98e6d797f1ce11e59b042b232f62380cec29ec7d5387b88a9e074b741c13e63a";
        sqlplus = "02e66dc52398fced75e7efcb6b4372afcf617f7d88344fb7f0f4bb2bed371f3b";
        odbc    = "5d0cdd7f9dd2e27affbc9b36ef9fc48e329713ecd36905fdd089366e365ae8a2";
      };
    }.${stdenv.hostPlatform.system} or throwSystem;
  
    # rels per component and architecture, optional
    rels = {
      x86_64-darwin = {
        sdk = "2";
      };
    }.${stdenv.hostPlatform.system} or {};
  
    # convert platform to oracle architecture names
  
negative.code:     x86_64-darwin = "macos.x64";
    }.${stdenv.hostPlatform.system} or throwSystem;
  
    shortArch = {
      x86_64-linux = "linux";
      x86_64-darwin = "macos";
    }.${stdenv.hostPlatform.system} or throwSystem;
  
    # calculate the filename of a single zip file
    srcFilename = component: arch: version: rel:
      "instantclient-${component}-${arch}-${version}" +
      (optionalString (rel != "") "-${rel}") +
      (optionalString (arch == "linux.x64" || arch == "macos.x64") "dbru") + # ¯\_(ツ)_/¯
      ".zip";
  
    # fetcher for the non clickthrough artifacts
    fetcher = srcFilename: hash: fetchurl {
      url = "https://download.oracle.com/otn_software/${shortArch}/instantclient/193000/${srcFilename}";
      sha256 = hash;
    };
  
    # assemble srcs
    srcs = map (component:
  