From 1c1c7685d97440593afb9e7aa2c46ce6a746ac35 Mon Sep 17 00:00:00 2001 From: happysalada Date: Wed, 2 Jun 2021 13:25:56 +0900 Subject: [PATCH] stdenv.darwin: nixpkgs-fmt --- pkgs/stdenv/darwin/default.nix | 766 +++++++++++++++++++-------------- 1 file changed, 441 insertions(+), 325 deletions(-) diff --git a/pkgs/stdenv/darwin/default.nix b/pkgs/stdenv/darwin/default.nix index efa19d2783e..4ff512386e8 100644 --- a/pkgs/stdenv/darwin/default.nix +++ b/pkgs/stdenv/darwin/default.nix @@ -1,33 +1,38 @@ { lib -, localSystem, crossSystem, config, overlays, crossOverlays ? [] -# Allow passing in bootstrap files directly so we can test the stdenv bootstrap process when changing the bootstrap tools -, bootstrapFiles ? - if localSystem.isAarch64 then +, localSystem +, crossSystem +, config +, overlays +, crossOverlays ? [ ] + # Allow passing in bootstrap files directly so we can test the stdenv bootstrap process when changing the bootstrap tools +, bootstrapFiles ? if localSystem.isAarch64 then let fetch = { file, sha256, executable ? true }: import { url = "http://tarballs.nixos.org/stdenv-darwin/aarch64/20acd4c4f14040485f40e55c0a76c186aa8ca4f3/${file}"; inherit (localSystem) system; inherit sha256 executable; - }; in { - sh = fetch { file = "sh"; sha256 = "17m3xrlbl99j3vm7rzz3ghb47094dyddrbvs2a6jalczvmx7spnj"; }; - bzip2 = fetch { file = "bzip2"; sha256 = "1khs8s5klf76plhlvlc1ma838r8pc1qigk9f5bdycwgbn0nx240q"; }; - mkdir = fetch { file = "mkdir"; sha256 = "1m9nk90paazl93v43myv2ay68c1arz39pqr7lk5ddbgb177hgg8a"; }; - cpio = fetch { file = "cpio"; sha256 = "17pxq61yjjvyd738fy9f392hc9cfzkl612sdr9rxr3v0dgvm8y09"; }; - tarball = fetch { file = "bootstrap-tools.cpio.bz2"; sha256 = "1v2332k33akm6mrm4bj749rxnnmc2pkbgcslmd0bbkf76bz2ildy"; executable = false; }; - } + }; in + { + sh = fetch { file = "sh"; sha256 = "17m3xrlbl99j3vm7rzz3ghb47094dyddrbvs2a6jalczvmx7spnj"; }; + bzip2 = fetch { file = "bzip2"; sha256 = "1khs8s5klf76plhlvlc1ma838r8pc1qigk9f5bdycwgbn0nx240q"; }; + mkdir = fetch { file = "mkdir"; sha256 = "1m9nk90paazl93v43myv2ay68c1arz39pqr7lk5ddbgb177hgg8a"; }; + cpio = fetch { file = "cpio"; sha256 = "17pxq61yjjvyd738fy9f392hc9cfzkl612sdr9rxr3v0dgvm8y09"; }; + tarball = fetch { file = "bootstrap-tools.cpio.bz2"; sha256 = "1v2332k33akm6mrm4bj749rxnnmc2pkbgcslmd0bbkf76bz2ildy"; executable = false; }; + } else let fetch = { file, sha256, executable ? true }: import { url = "http://tarballs.nixos.org/stdenv-darwin/x86_64/5ab5783e4f46c373c6de84deac9ad59b608bb2e6/${file}"; inherit (localSystem) system; inherit sha256 executable; - }; in { - sh = fetch { file = "sh"; sha256 = "sha256-nbb4XEk3go7ttiWrQyKQMLzPr+qUnwnHkWMtVCZsMCs="; }; - bzip2 = fetch { file = "bzip2"; sha256 = "sha256-ybnA+JWrKhXSfn20+GVKXkHFTp2Zt79hat8hAVmsUOc="; }; - mkdir = fetch { file = "mkdir"; sha256 = "sha256-nmvMxmfcY41/60Z/E8L9u0vgePW5l30Dqw1z+Nr02Hk="; }; - cpio = fetch { file = "cpio"; sha256 = "sha256-cB36rN3NLj19Tk37Kc5bodMFMO+mCpEQkKKo0AEMkaU="; }; - tarball = fetch { file = "bootstrap-tools.cpio.bz2"; sha256 = "sha256-kh2vKmjCr/HvR06czZbxUxV5KDRxSF27M6nN3cyofRI="; executable = false; }; - } + }; in + { + sh = fetch { file = "sh"; sha256 = "sha256-nbb4XEk3go7ttiWrQyKQMLzPr+qUnwnHkWMtVCZsMCs="; }; + bzip2 = fetch { file = "bzip2"; sha256 = "sha256-ybnA+JWrKhXSfn20+GVKXkHFTp2Zt79hat8hAVmsUOc="; }; + mkdir = fetch { file = "mkdir"; sha256 = "sha256-nmvMxmfcY41/60Z/E8L9u0vgePW5l30Dqw1z+Nr02Hk="; }; + cpio = fetch { file = "cpio"; sha256 = "sha256-cB36rN3NLj19Tk37Kc5bodMFMO+mCpEQkKKo0AEMkaU="; }; + tarball = fetch { file = "bootstrap-tools.cpio.bz2"; sha256 = "sha256-kh2vKmjCr/HvR06czZbxUxV5KDRxSF27M6nN3cyofRI="; executable = false; }; + } }: assert crossSystem == localSystem; @@ -51,7 +56,8 @@ let "/usr/lib/system/libunc.dylib" # This dependency is "hidden", so our scanning code doesn't pick it up ]; -in rec { +in +rec { commonPreHook = '' export NIX_ENFORCE_NO_NATIVE=''${NIX_ENFORCE_NO_NATIVE-1} export NIX_ENFORCE_PURITY=''${NIX_ENFORCE_PURITY-1} @@ -67,9 +73,9 @@ in rec { bootstrapTools = derivation ({ inherit system; - name = "bootstrap-tools"; + 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 ]; + args = if localSystem.isAarch64 then [ ./unpack-bootstrap-tools-aarch64.sh ] else [ ./unpack-bootstrap-tools.sh ]; inherit (bootstrapFiles) mkdir bzip2 cpio tarball; @@ -80,13 +86,14 @@ in rec { outputHashMode = "recursive"; }); - stageFun = step: last: {shell ? "${bootstrapTools}/bin/bash", - overrides ? (self: super: {}), - extraPreHook ? "", - extraNativeBuildInputs, - extraBuildInputs, - libcxx, - allowedRequisites ? null}: + stageFun = step: last: { shell ? "${bootstrapTools}/bin/bash" + , overrides ? (self: super: { }) + , extraPreHook ? "" + , extraNativeBuildInputs + , extraBuildInputs + , libcxx + , allowedRequisites ? null + }: let name = "bootstrap-stage${toString step}"; @@ -110,17 +117,19 @@ in rec { inherit lib shell; inherit (last) stdenvNoCC; - nativeTools = false; - nativeLibc = false; + nativeTools = false; + nativeLibc = false; inherit buildPackages libcxx; inherit (last.pkgs) coreutils gnugrep; - bintools = last.pkgs.darwin.binutils; - libc = last.pkgs.darwin.Libsystem; - isClang = true; - cc = last.pkgs."${finalLlvmPackages}".clang-unwrapped; - }; in args // (overrides args)); + bintools = last.pkgs.darwin.binutils; + libc = last.pkgs.darwin.Libsystem; + isClang = true; + cc = last.pkgs."${finalLlvmPackages}".clang-unwrapped; + }; in args // (overrides args) + ); - cc = if last == null then "/dev/null" else mkCC ({ cc, ... }: { + cc = if last == null then "/dev/null" else + mkCC ({ cc, ... }: { extraPackages = [ last.pkgs."${finalLlvmPackages}".libcxxabi last.pkgs."${finalLlvmPackages}".compiler-rt @@ -128,7 +137,8 @@ in rec { extraBuildCommands = mkExtraBuildCommands cc; }); - ccNoLibcxx = if last == null then "/dev/null" else mkCC ({ cc, ... }: { + ccNoLibcxx = if last == null then "/dev/null" else + mkCC ({ cc, ... }: { libcxx = null; extraPackages = [ last.pkgs."${finalLlvmPackages}".compiler-rt @@ -146,13 +156,16 @@ in rec { inherit config shell extraBuildInputs; extraNativeBuildInputs = extraNativeBuildInputs ++ lib.optionals doUpdateAutoTools [ - last.pkgs.updateAutotoolsGnuConfigScriptsHook last.pkgs.gnu-config + last.pkgs.updateAutotoolsGnuConfigScriptsHook + last.pkgs.gnu-config ]; allowedRequisites = if allowedRequisites == null then null else allowedRequisites ++ [ - cc.expand-response-params cc.bintools + cc.expand-response-params + cc.bintools ] ++ lib.optionals doUpdateAutoTools [ - last.pkgs.updateAutotoolsGnuConfigScriptsHook last.pkgs.gnu-config + last.pkgs.updateAutotoolsGnuConfigScriptsHook + last.pkgs.gnu-config ] ++ lib.optionals doSign [ last.pkgs.darwin.postLinkSignHook last.pkgs.darwin.sigtool @@ -173,7 +186,7 @@ in rec { ${commonPreHook} ${extraPreHook} ''; - initialPath = [ bootstrapTools ]; + initialPath = [ bootstrapTools ]; fetchurlBoot = import ../../build-support/fetchurl { inherit lib; @@ -185,13 +198,14 @@ in rec { __stdenvImpureHostDeps = commonImpureHostDeps; __extraImpureHostDeps = commonImpureHostDeps; - overrides = self: super: (overrides self super) // { + overrides = self: super: (overrides self super) // { inherit ccNoLibcxx; fetchurl = thisStdenv.fetchurlBoot; }; }; - in { + in + { inherit config overlays; stdenv = thisStdenv; }; @@ -289,11 +303,11 @@ in rec { 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) { @@ -374,317 +388,419 @@ in rec { }; }; - extraNativeBuildInputs = []; - extraBuildInputs = []; + extraNativeBuildInputs = [ ]; + extraBuildInputs = [ ]; libcxx = null; }; - stage1 = prevStage: let - persistent = self: super: with prevStage; { - cmake = super.cmakeMinimal; + stage1 = prevStage: + let + persistent = self: super: with prevStage; { + cmake = super.cmakeMinimal; - inherit pbzx cpio; + inherit pbzx cpio; - python3 = super.python3Minimal; + python3 = super.python3Minimal; - ninja = super.ninja.override { buildDocs = false; }; + 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); + "${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; + 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; + signingUtils = darwin.signingUtils.override { + inherit (selfDarwin) sigtool; }; - 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; - }); + 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; }; - 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; + 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; - 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); + "${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 + ); - 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; + darwin = super.darwin.overrideScope (_: _: { + inherit (darwin) + binutils dyld Libsystem xnu configd ICU libdispatch libclosure + launchd CF objc4 darwin-stubs sigtool postLinkSignHook signingUtils; }); - in { inherit libraries; } // libraries); + }; + in + with prevStage; stageFun 2 prevStage { + extraPreHook = '' + export PATH_LOCALE=${pkgs.darwin.locale}/share/locale + ''; - darwin = super.darwin.overrideScope (_: _: { - inherit (darwin) - dyld Libsystem xnu configd libdispatch libclosure launchd libiconv - locale darwin-stubs sigtool; - }); + 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; }; - 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; + 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; - extraPreHook = '' - export PATH=${pkgs.bash}/bin:$PATH - export PATH_LOCALE=${pkgs.darwin.locale}/share/locale - ''; + # Avoid pulling in a full python and its extra dependencies for the llvm/clang builds. + libxml2 = super.libxml2.override { pythonSupport = false; }; - 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); + "${finalLlvmPackages}" = super."${finalLlvmPackages}" // ( + let + libraries = super."${finalLlvmPackages}".libraries.extend (_: _: { + inherit (pkgs."${finalLlvmPackages}") libcxx libcxxabi; + }); + in + { inherit libraries; } // libraries + ); - 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; }; + darwin = super.darwin.overrideScope (_: _: { + inherit (darwin) + dyld Libsystem xnu configd libdispatch libclosure launchd libiconv + locale darwin-stubs sigtool; }); - libraries = super."${finalLlvmPackages}".libraries.extend (llvmSelf: _: { - inherit (pkgs."${finalLlvmPackages}") libcxx libcxxabi compiler-rt; - }); - in { inherit tools libraries; } // tools // libraries); + }; + in + with prevStage; stageFun 3 prevStage { + shell = "${pkgs.bash}/bin/bash"; - darwin = super.darwin.overrideScope (_: superDarwin: { - inherit (darwin) dyld Libsystem libiconv locale darwin-stubs; + # 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; - # See useAppleSDKLibs in darwin-packages.nix - CF = if useAppleSDKLibs then super.darwin.CF else superDarwin.CF.override { - inherit libxml2; - python3 = prevStage.python3; - }; - }); + 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; }; - 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; - }; + 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; - 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; + # 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" + ]; + }); - darwin = super.darwin.overrideScope (_: _: { - inherit (darwin) dyld ICU Libsystem Csu libiconv rewrite-tbd; + "${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 (darwin) binutils binutils-unwrapped cctools; - }); - } // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) { - inherit llvm; + 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; + # 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; }; }); - 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; }); - } // lib.optionalAttrs (super.stdenv.targetPlatform == localSystem) { - clang = cc; - llvmPackages = super.llvmPackages // { clang = cc; }; - inherit cc; - }); - }; + }; stagesDarwin = [ ({}: stage0)