anchor.diff:            inherit lib;
             inherit (self) stdenvNoCC;
   
  -          nativeTools  = false;
  -          nativeLibc   = false;
  +          nativeTools = false;
  +          nativeLibc = false;
             inherit (self) buildPackages coreutils gnugrep;
  -          libc         = selfDarwin.Libsystem;
  -          bintools     = selfDarwin.binutils-unwrapped;
  +          libc = selfDarwin.Libsystem;
  +          bintools = selfDarwin.binutils-unwrapped;
             inherit (selfDarwin) postLinkSignHook signingUtils;
           };
         } // lib.optionalAttrs (! useAppleSDKLibs) {
  
positive.code:   bootstrapTools = derivation ({
      inherit system;
  
      name    = "bootstrap-tools";
      builder = bootstrapFiles.sh; # Not a filename! Attribute 'sh' on bootstrapFiles
      args    = if localSystem.isAarch64 then [ ./unpack-bootstrap-tools-aarch64.sh ] else [ ./unpack-bootstrap-tools.sh ];
  
      inherit (bootstrapFiles) mkdir bzip2 cpio tarball;
  
  
negative.code:       };
      };
  
      extraNativeBuildInputs = [ ];
      extraBuildInputs = [ ];
      libcxx = null;
    };
  
    stage1 = prevStage:
      let
        persistent = self: super: with prevStage; {
          cmake = super.cmakeMinimal;
  
          inherit pbzx cpio;
  
          python3 = super.python3Minimal;
  
          ninja = super.ninja.override { buildDocs = false; };
  
          "${finalLlvmPackages}" = super."${finalLlvmPackages}" // (
            let
              tools = super."${finalLlvmPackages}".tools.extend (_: _: {
                inherit (pkgs."${finalLlvmPackages}") clang-unwrapped;
              });
              libraries = super."${finalLlvmPackages}".libraries.extend (_: _: {
                inherit (pkgs."${finalLlvmPackages}") compiler-rt libcxx libcxxabi;
              });
            in
            { inherit tools libraries; } // tools // libraries
          );
  
          darwin = super.darwin.overrideScope (selfDarwin: _: {
            inherit (darwin) rewrite-tbd binutils-unwrapped;
  
            signingUtils = darwin.signingUtils.override {
              inherit (selfDarwin) sigtool;
            };
  
            binutils = darwin.binutils.override {
              coreutils = self.coreutils;
              libc = selfDarwin.Libsystem;
              inherit (selfDarwin) postLinkSignHook signingUtils;
            };
          });
        };
      in
      with prevStage; stageFun 1 prevStage {
        extraPreHook = "export NIX_CFLAGS_COMPILE+=\" -F${bootstrapTools}/Library/Frameworks\"";
        extraNativeBuildInputs = [ ];
        extraBuildInputs = [ pkgs.darwin.CF ];
        libcxx = pkgs."${finalLlvmPackages}".libcxx;
  
        allowedRequisites =
          [ bootstrapTools ] ++
          (with pkgs; [ coreutils gnugrep ]) ++
          (with pkgs."${finalLlvmPackages}"; [ libcxx libcxxabi compiler-rt clang-unwrapped ]) ++
          (with pkgs.darwin; [ Libsystem CF ] ++ lib.optional useAppleSDKLibs objc4);
  
        overrides = persistent;
      };
  
    stage2 = prevStage:
      let
        persistent = self: super: with prevStage; {
          inherit
            zlib patchutils m4 scons flex perl bison unifdef unzip openssl python3
            libxml2 gettext sharutils gmp libarchive ncurses pkg-config libedit groff
            openssh sqlite sed serf openldap db cyrus-sasl expat apr-util subversion xz
            findfreetype libssh curl cmake autoconf automake libtool ed cpio coreutils
            libssh2 nghttp2 libkrb5 ninja brotli;
  
          "${finalLlvmPackages}" = super."${finalLlvmPackages}" // (
            let
              tools = super."${finalLlvmPackages}".tools.extend (_: _: {
                inherit (pkgs."${finalLlvmPackages}") clang-unwrapped;
              });
              libraries = super."${finalLlvmPackages}".libraries.extend (_: libSuper: {
                inherit (pkgs."${finalLlvmPackages}") compiler-rt;
                libcxx = libSuper.libcxx.override {
                  stdenv = overrideCC self.stdenv self.ccNoLibcxx;
                };
                libcxxabi = libSuper.libcxxabi.override ({
                  stdenv = overrideCC self.stdenv self.ccNoLibcxx;
                } // lib.optionalAttrs (finalLlvmVersion == "7") {
                  # TODO: the bootstrapping of llvm packages isn't consistent.
                  # `standalone` may be redundant if darwin behaves like useLLVM (or
                  # has useLLVM = true).
                  standalone = true;
                });
              });
            in
            { inherit tools libraries; } // tools // libraries
          );
  
          darwin = super.darwin.overrideScope (_: _: {
            inherit (darwin)
              binutils dyld Libsystem xnu configd ICU libdispatch libclosure
              launchd CF objc4 darwin-stubs sigtool postLinkSignHook signingUtils;
          });
        };
      in
      with prevStage; stageFun 2 prevStage {
        extraPreHook = ''
          export PATH_LOCALE=${pkgs.darwin.locale}/share/locale
        '';
  
        extraNativeBuildInputs = [ pkgs.xz ];
        extraBuildInputs = [ pkgs.darwin.CF ];
        libcxx = pkgs."${finalLlvmPackages}".libcxx;
  
        allowedRequisites =
          [ bootstrapTools ] ++
          (with pkgs; [
            xz.bin
            xz.out
            zlib
            libxml2.out
            curl.out
            openssl.out
            libssh2.out
            nghttp2.lib
            coreutils
            gnugrep
            pcre.out
            gmp
            libiconv
            brotli.lib
          ] ++ lib.optional haveKRB5 libkrb5) ++
          (with pkgs."${finalLlvmPackages}"; [
            libcxx
            libcxxabi
            compiler-rt
            clang-unwrapped
          ]) ++
          (with pkgs.darwin; [ dyld Libsystem CF ICU locale ] ++ lib.optional useAppleSDKLibs objc4);
  
        overrides = persistent;
      };
  
    stage3 = prevStage:
      let
        persistent = self: super: with prevStage; {
          inherit
            patchutils m4 scons flex perl bison unifdef unzip openssl python3
            gettext sharutils libarchive pkg-config groff bash subversion
            openssh sqlite sed serf openldap db cyrus-sasl expat apr-util
            findfreetype libssh curl cmake autoconf automake libtool cpio
            libssh2 nghttp2 libkrb5 ninja;
  
          # Avoid pulling in a full python and its extra dependencies for the llvm/clang builds.
          libxml2 = super.libxml2.override { pythonSupport = false; };
  
          "${finalLlvmPackages}" = super."${finalLlvmPackages}" // (
            let
              libraries = super."${finalLlvmPackages}".libraries.extend (_: _: {
                inherit (pkgs."${finalLlvmPackages}") libcxx libcxxabi;
              });
            in
            { inherit libraries; } // libraries
          );
  
          darwin = super.darwin.overrideScope (_: _: {
            inherit (darwin)
              dyld Libsystem xnu configd libdispatch libclosure launchd libiconv
              locale darwin-stubs sigtool;
          });
        };
      in
      with prevStage; stageFun 3 prevStage {
        shell = "${pkgs.bash}/bin/bash";
  
        # We have a valid shell here (this one has no bootstrap-tools runtime deps) so stageFun
        # enables patchShebangs above. Unfortunately, patchShebangs ignores our $SHELL setting
        # and instead goes by $PATH, which happens to contain bootstrapTools. So it goes and
        # patches our shebangs back to point at bootstrapTools. This makes sure bash comes first.
        extraNativeBuildInputs = with pkgs; [ xz ];
        extraBuildInputs = [ pkgs.darwin.CF pkgs.bash ];
        libcxx = pkgs."${finalLlvmPackages}".libcxx;
  
        extraPreHook = ''
          export PATH=${pkgs.bash}/bin:$PATH
          export PATH_LOCALE=${pkgs.darwin.locale}/share/locale
        '';
  
        allowedRequisites =
          [ bootstrapTools ] ++
          (with pkgs; [
            xz.bin
            xz.out
            bash
            zlib
            libxml2.out
            curl.out
            openssl.out
            libssh2.out
            nghttp2.lib
            coreutils
            gnugrep
            pcre.out
            gmp
            libiconv
            brotli.lib
          ] ++ lib.optional haveKRB5 libkrb5) ++
          (with pkgs."${finalLlvmPackages}"; [
            libcxx
            libcxx.dev
            libcxxabi
            libcxxabi.dev
            compiler-rt
            clang-unwrapped
          ]) ++
          (with pkgs.darwin; [ dyld ICU Libsystem locale ] ++ lib.optional useAppleSDKLibs objc4);
  
        overrides = persistent;
      };
  
    stage4 = prevStage:
      let
        persistent = self: super: with prevStage; {
          inherit
            gnumake gzip gnused bzip2 gawk ed xz patch bash python3
            ncurses libffi zlib gmp pcre gnugrep cmake
            coreutils findutils diffutils patchutils ninja libxml2;
  
          # Hack to make sure we don't link ncurses in bootstrap tools. The proper
          # solution is to avoid passing -L/nix-store/...-bootstrap-tools/lib,
          # quite a sledgehammer just to get the C runtime.
          gettext = super.gettext.overrideAttrs (drv: {
            configureFlags = drv.configureFlags ++ [
              "--disable-curses"
            ];
          });
  
          "${finalLlvmPackages}" = super."${finalLlvmPackages}" // (
            let
              tools = super."${finalLlvmPackages}".tools.extend (llvmSelf: _: {
                clang-unwrapped-all-outputs = pkgs."${finalLlvmPackages}".clang-unwrapped-all-outputs.override { llvm = llvmSelf.llvm; };
                libllvm = pkgs."${finalLlvmPackages}".libllvm.override { inherit libxml2; };
              });
              libraries = super."${finalLlvmPackages}".libraries.extend (llvmSelf: _: {
                inherit (pkgs."${finalLlvmPackages}") libcxx libcxxabi compiler-rt;
              });
            in
            { inherit tools libraries; } // tools // libraries
          );
  
          darwin = super.darwin.overrideScope (_: superDarwin: {
            inherit (darwin) dyld Libsystem libiconv locale darwin-stubs;
  
            # See useAppleSDKLibs in darwin-packages.nix
            CF = if useAppleSDKLibs then super.darwin.CF else
            superDarwin.CF.override {
              inherit libxml2;
              python3 = prevStage.python3;
            };
          });
        };
      in
      with prevStage; stageFun 4 prevStage {
        shell = "${pkgs.bash}/bin/bash";
        extraNativeBuildInputs = with pkgs; [ xz ];
        extraBuildInputs = [ pkgs.darwin.CF pkgs.bash ];
        libcxx = pkgs."${finalLlvmPackages}".libcxx;
  
        extraPreHook = ''
          export PATH_LOCALE=${pkgs.darwin.locale}/share/locale
        '';
        overrides = persistent;
      };
  
    stdenvDarwin = prevStage:
      let
        doSign = localSystem.isAarch64;
        pkgs = prevStage;
        persistent = self: super: with prevStage; {
          inherit
            gnumake gzip gnused bzip2 gawk ed xz patch bash
            ncurses libffi zlib gmp pcre gnugrep
            coreutils findutils diffutils patchutils pbzx;
  
          darwin = super.darwin.overrideScope (_: _: {
            inherit (darwin) dyld ICU Libsystem Csu libiconv rewrite-tbd;
          } // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) {
            inherit (darwin) binutils binutils-unwrapped cctools;
          });
        } // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) {
          inherit llvm;
  
          # Need to get rid of these when cross-compiling.
          "${finalLlvmPackages}" = super."${finalLlvmPackages}" // (
            let
              tools = super."${finalLlvmPackages}".tools.extend (_: super: {
                inherit (pkgs."${finalLlvmPackages}") llvm clang-unwrapped;
              });
              libraries = super."${finalLlvmPackages}".libraries.extend (_: _: {
                inherit (pkgs."${finalLlvmPackages}") compiler-rt libcxx libcxxabi;
              });
            in
            { inherit tools libraries; } // tools // libraries
          );
  
          inherit binutils binutils-unwrapped;
        };
      in
      import ../generic rec {
        name = "stdenv-darwin";
  
        inherit config;
        inherit (pkgs.stdenv) fetchurlBoot;
  
        buildPlatform = localSystem;
        hostPlatform = localSystem;
        targetPlatform = localSystem;
  
        preHook = commonPreHook + ''
          export NIX_COREFOUNDATION_RPATH=${pkgs.darwin.CF}/Library/Frameworks
          export PATH_LOCALE=${pkgs.darwin.locale}/share/locale
        '';
  
        __stdenvImpureHostDeps = commonImpureHostDeps;
        __extraImpureHostDeps = commonImpureHostDeps;
  
        initialPath = import ../common-path.nix { inherit pkgs; };
        shell = "${pkgs.bash}/bin/bash";
  
        cc = pkgs."${finalLlvmPackages}".libcxxClang;
  
        extraNativeBuildInputs = lib.optionals localSystem.isAarch64 [
          pkgs.updateAutotoolsGnuConfigScriptsHook
        ];
  
        extraBuildInputs = [ pkgs.darwin.CF ];
  
        extraAttrs = {
          libc = pkgs.darwin.Libsystem;
          shellPackage = pkgs.bash;
          inherit bootstrapTools;
        };
  
        allowedRequisites = (with pkgs; [
          xz.out
          xz.bin
          gmp.out
          gnumake
          findutils
          bzip2.out
          bzip2.bin
          zlib.out
          zlib.dev
          libffi.out
          coreutils
          ed
          diffutils
          gnutar
          gzip
          ncurses.out
          ncurses.dev
          ncurses.man
          gnused
          bash
          gawk
          gnugrep
          patch
          pcre.out
          gettext
          binutils.bintools
          darwin.binutils
          darwin.binutils.bintools
          curl.out
          openssl.out
          libssh2.out
          nghttp2.lib
          brotli.lib
          cc.expand-response-params
          libxml2.out
        ] ++ lib.optional haveKRB5 libkrb5
        ++ lib.optionals localSystem.isAarch64 [
          pkgs.updateAutotoolsGnuConfigScriptsHook
          pkgs.gnu-config
        ])
        ++ (with pkgs."${finalLlvmPackages}"; [
          libcxx
          libcxx.dev
          libcxxabi
          libcxxabi.dev
          llvm
          llvm.lib
          compiler-rt
          compiler-rt.dev
          clang-unwrapped
          libclang.dev
          libclang.lib
        ])
        ++ (with pkgs.darwin; [
          dyld
          Libsystem
          CF
          cctools
          ICU
          libiconv
          locale
          libtapi
        ] ++ lib.optional useAppleSDKLibs objc4
        ++ lib.optionals doSign [ postLinkSignHook sigtool signingUtils ]);
  
        overrides = lib.composeExtensions persistent (self: super: {
          darwin = super.darwin.overrideScope (_: superDarwin: {
            inherit (prevStage.darwin) CF darwin-stubs;
            xnu = superDarwin.xnu.override { inherit (prevStage) python3; };
          });
        } // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) {
          clang = cc;
          llvmPackages = super.llvmPackages // { clang = cc; };
          inherit cc;
        });
      };
  
    stagesDarwin = [
      ({}: stage0)
  