From 0198f43efbe15e98a23cd9f3e7eb2978aa38f68f Mon Sep 17 00:00:00 2001 From: sternenseemann Date: Sun, 14 Apr 2024 15:20:40 +0200 Subject: [PATCH 1/3] =?UTF-8?q?stdenv:=20consistently=20use=20`self:=20sup?= =?UTF-8?q?er:=20=E2=80=A6`=20for=20bootstrapping=20overlays?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As of late, `final: prev: …` for overlays has become more prevalent in newer code. This is also exhibited in some code (presumably added recently) in stdenv. This change is not about any merits or demerits of any naming convention, but rather aims to make the nomenclature in stdenv bootstrapping consistent to lessen confusion. I've chosen to stick to `self: super: …` convention because: 1. It is more common in the code as it stands. 2. Using `final: prev: …` makes the code more confusing, als it causes `prev` to be in scope alongside `prevStage`. `prevStage` actually bears no relation to `prev` even though their naming suggests it, making it easy to confuse them (the former is the (final) package set of the previous stage while the latter is just the `prev`/`super` of the overlay “chaining” on a completely fresh package set, i.e. `prev` doesn't even relate to the previous stage's `overrides` argument). This change also corrects a naming error in stdenv/native which had no effect, as the variables were unused. --- pkgs/stdenv/linux/default.nix | 8 ++++---- pkgs/stdenv/native/default.nix | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 9d13eb0b8e17..0e1852805cfd 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -328,12 +328,12 @@ in assert isBuiltByBootstrapFilesCompiler prevStage.patchelf; stageFun prevStage { name = "bootstrap-stage-xgcc"; - overrides = final: prev: { + overrides = self: super: { inherit (prevStage) ccWrapperStdenv coreutils gnugrep gettext bison texinfo zlib gnum4 perl patchelf; ${localSystem.libc} = getLibc prevStage; - gmp = prev.gmp.override { cxx = false; }; + gmp = super.gmp.override { cxx = false; }; gcc-unwrapped = - (prev.gcc-unwrapped.override (commonGccOverrides // { + (super.gcc-unwrapped.override (commonGccOverrides // { # The most logical name for this package would be something like # "gcc-stage1". Unfortunately "stage" is already reserved for the # layers of stdenv, so using "stage" in the name of this package @@ -376,7 +376,7 @@ in # configureFlags = (a.configureFlags or []) ++ [ "--with-native-system-header-dir=/include" - "--with-build-sysroot=${lib.getDev final.stdenv.cc.libc}" + "--with-build-sysroot=${lib.getDev self.stdenv.cc.libc}" ]; # This is a separate phase because gcc assembles its phase scripts diff --git a/pkgs/stdenv/native/default.nix b/pkgs/stdenv/native/default.nix index de447f4e7567..242bf9d1b3f9 100644 --- a/pkgs/stdenv/native/default.nix +++ b/pkgs/stdenv/native/default.nix @@ -152,7 +152,7 @@ in inherit config overlays; stdenv = makeStdenv { inherit (prevStage) cc fetchurl; - overrides = prev: final: { inherit (prevStage) fetchurl; }; + overrides = self: super: { inherit (prevStage) fetchurl; }; } // { inherit (prevStage) fetchurl; }; From 4aa9e4ecc6c3d1cf48379cb2e89aac32c0a6b4f7 Mon Sep 17 00:00:00 2001 From: sternenseemann Date: Sun, 14 Apr 2024 15:32:41 +0200 Subject: [PATCH 2/3] wrapCC, wrapBintools: don't alias stdenvNoCC to stdenv In delicate code like this, it seems unwise to pass something of as something it isn't for convenience's (?) sake. It causes a slight possibility for confusion with `buildPackages.stdenv`. However, it should be possible to eliminate the need for this in a separate change. --- .../bintools-wrapper/default.nix | 13 ++++---- pkgs/build-support/cc-wrapper/default.nix | 32 +++++++++---------- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/pkgs/build-support/bintools-wrapper/default.nix b/pkgs/build-support/bintools-wrapper/default.nix index b2545d0ad0e5..8baac3626892 100644 --- a/pkgs/build-support/bintools-wrapper/default.nix +++ b/pkgs/build-support/bintools-wrapper/default.nix @@ -83,8 +83,7 @@ let replaceStrings ; - stdenv = stdenvNoCC; - inherit (stdenv) hostPlatform targetPlatform; + inherit (stdenvNoCC) hostPlatform targetPlatform; # Prefix for binaries. Customarily ends with a dash separator. # @@ -138,7 +137,7 @@ let in -stdenv.mkDerivation { +stdenvNoCC.mkDerivation { pname = targetPrefix + (if name != "" then name else "${bintoolsName}-wrapper"); version = optionalString (bintools != null) bintoolsVersion; @@ -346,7 +345,7 @@ stdenv.mkDerivation { done '' - + optionalString stdenv.targetPlatform.isDarwin '' + + optionalString stdenvNoCC.targetPlatform.isDarwin '' echo "-arch ${targetPlatform.darwinArch}" >> $out/nix-support/libc-ldflags '' @@ -363,7 +362,7 @@ stdenv.mkDerivation { ### ### Remove certain timestamps from final binaries ### - + optionalString (stdenv.targetPlatform.isDarwin && !(bintools.isGNU or false)) '' + + optionalString (stdenvNoCC.targetPlatform.isDarwin && !(bintools.isGNU or false)) '' echo "export ZERO_AR_DATE=1" >> $out/nix-support/setup-hook '' @@ -380,9 +379,9 @@ stdenv.mkDerivation { ### ### Ensure consistent LC_VERSION_MIN_MACOSX ### - + optionalString stdenv.targetPlatform.isDarwin ( + + optionalString stdenvNoCC.targetPlatform.isDarwin ( let - inherit (stdenv.targetPlatform) + inherit (stdenvNoCC.targetPlatform) darwinPlatform darwinSdkVersion darwinMinVersion darwinMinVersionVariable; in '' diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index fa32108963f3..17029736faca 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -82,9 +82,7 @@ let versionAtLeast ; - inherit (stdenv) hostPlatform targetPlatform; - - stdenv = stdenvNoCC; + inherit (stdenvNoCC) hostPlatform targetPlatform; includeFortifyHeaders' = if includeFortifyHeaders != null then includeFortifyHeaders @@ -119,10 +117,10 @@ let useGccForLibs = useCcForLibs && libcxx == null - && !stdenv.targetPlatform.isDarwin - && !(stdenv.targetPlatform.useLLVM or false) - && !(stdenv.targetPlatform.useAndroidPrebuilt or false) - && !(stdenv.targetPlatform.isiOS or false) + && !stdenvNoCC.targetPlatform.isDarwin + && !(stdenvNoCC.targetPlatform.useLLVM or false) + && !(stdenvNoCC.targetPlatform.useAndroidPrebuilt or false) + && !(stdenvNoCC.targetPlatform.isiOS or false) && gccForLibs != null; gccForLibs_solib = getLib gccForLibs + optionalString (targetPlatform != hostPlatform) "/${targetPlatform.config}"; @@ -249,17 +247,17 @@ let then cc.hardeningUnsupportedFlagsByTargetPlatform targetPlatform else (cc.hardeningUnsupportedFlags or []); - darwinPlatformForCC = optionalString stdenv.targetPlatform.isDarwin ( + darwinPlatformForCC = optionalString stdenvNoCC.targetPlatform.isDarwin ( if (targetPlatform.darwinPlatform == "macos" && isGNU) then "macosx" else targetPlatform.darwinPlatform ); - darwinMinVersion = optionalString stdenv.targetPlatform.isDarwin ( - stdenv.targetPlatform.darwinMinVersion + darwinMinVersion = optionalString stdenvNoCC.targetPlatform.isDarwin ( + stdenvNoCC.targetPlatform.darwinMinVersion ); - darwinMinVersionVariable = optionalString stdenv.targetPlatform.isDarwin - stdenv.targetPlatform.darwinMinVersionVariable; + darwinMinVersionVariable = optionalString stdenvNoCC.targetPlatform.isDarwin + stdenvNoCC.targetPlatform.darwinMinVersionVariable; in assert includeFortifyHeaders' -> fortify-headers != null; @@ -272,7 +270,7 @@ assert nativeTools == bintools.nativeTools; assert nativeLibc == bintools.nativeLibc; assert nativePrefix == bintools.nativePrefix; -stdenv.mkDerivation { +stdenvNoCC.mkDerivation { pname = targetPrefix + (if name != "" then name else "${ccName}-wrapper"); version = optionalString (cc != null) ccVersion; @@ -426,7 +424,7 @@ stdenv.mkDerivation { ../setup-hooks/role.bash ] ++ optional (cc.langC or true) ./setup-hook.sh ++ optional (cc.langFortran or false) ./fortran-hook.sh - ++ optional (targetPlatform.isWindows) (stdenv.mkDerivation { + ++ optional (targetPlatform.isWindows) (stdenvNoCC.mkDerivation { name = "win-dll-hook.sh"; dontUnpack = true; installPhase = '' @@ -479,8 +477,8 @@ stdenv.mkDerivation { # break `useLLVM` into.) + optionalString (isClang && targetPlatform.isLinux - && !(stdenv.targetPlatform.useAndroidPrebuilt or false) - && !(stdenv.targetPlatform.useLLVM or false) + && !(stdenvNoCC.targetPlatform.useAndroidPrebuilt or false) + && !(stdenvNoCC.targetPlatform.useLLVM or false) && gccForLibs != null) ('' echo "--gcc-toolchain=${gccForLibs}" >> $out/nix-support/cc-cflags @@ -689,7 +687,7 @@ stdenv.mkDerivation { done '' - + optionalString stdenv.targetPlatform.isDarwin '' + + optionalString stdenvNoCC.targetPlatform.isDarwin '' echo "-arch ${targetPlatform.darwinArch}" >> $out/nix-support/cc-cflags '' From 63d21d13251584a3e947ec871d4e79ab4cfc580e Mon Sep 17 00:00:00 2001 From: sternenseemann Date: Sun, 14 Apr 2024 15:41:03 +0200 Subject: [PATCH 3/3] wrapCC, wrapBintools: remove unnecessary indexing into platform sets `targetPlatform` and `hostPlatform` are already in scope, so it is unnecessary to index into `stdenvNoCC`. --- .../bintools-wrapper/default.nix | 8 +++---- pkgs/build-support/cc-wrapper/default.nix | 24 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/pkgs/build-support/bintools-wrapper/default.nix b/pkgs/build-support/bintools-wrapper/default.nix index 8baac3626892..3c553f181f0d 100644 --- a/pkgs/build-support/bintools-wrapper/default.nix +++ b/pkgs/build-support/bintools-wrapper/default.nix @@ -345,7 +345,7 @@ stdenvNoCC.mkDerivation { done '' - + optionalString stdenvNoCC.targetPlatform.isDarwin '' + + optionalString targetPlatform.isDarwin '' echo "-arch ${targetPlatform.darwinArch}" >> $out/nix-support/libc-ldflags '' @@ -362,7 +362,7 @@ stdenvNoCC.mkDerivation { ### ### Remove certain timestamps from final binaries ### - + optionalString (stdenvNoCC.targetPlatform.isDarwin && !(bintools.isGNU or false)) '' + + optionalString (targetPlatform.isDarwin && !(bintools.isGNU or false)) '' echo "export ZERO_AR_DATE=1" >> $out/nix-support/setup-hook '' @@ -379,9 +379,9 @@ stdenvNoCC.mkDerivation { ### ### Ensure consistent LC_VERSION_MIN_MACOSX ### - + optionalString stdenvNoCC.targetPlatform.isDarwin ( + + optionalString targetPlatform.isDarwin ( let - inherit (stdenvNoCC.targetPlatform) + inherit (targetPlatform) darwinPlatform darwinSdkVersion darwinMinVersion darwinMinVersionVariable; in '' diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index 17029736faca..11ae9868ce01 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -117,10 +117,10 @@ let useGccForLibs = useCcForLibs && libcxx == null - && !stdenvNoCC.targetPlatform.isDarwin - && !(stdenvNoCC.targetPlatform.useLLVM or false) - && !(stdenvNoCC.targetPlatform.useAndroidPrebuilt or false) - && !(stdenvNoCC.targetPlatform.isiOS or false) + && !targetPlatform.isDarwin + && !(targetPlatform.useLLVM or false) + && !(targetPlatform.useAndroidPrebuilt or false) + && !(targetPlatform.isiOS or false) && gccForLibs != null; gccForLibs_solib = getLib gccForLibs + optionalString (targetPlatform != hostPlatform) "/${targetPlatform.config}"; @@ -247,17 +247,17 @@ let then cc.hardeningUnsupportedFlagsByTargetPlatform targetPlatform else (cc.hardeningUnsupportedFlags or []); - darwinPlatformForCC = optionalString stdenvNoCC.targetPlatform.isDarwin ( + darwinPlatformForCC = optionalString targetPlatform.isDarwin ( if (targetPlatform.darwinPlatform == "macos" && isGNU) then "macosx" else targetPlatform.darwinPlatform ); - darwinMinVersion = optionalString stdenvNoCC.targetPlatform.isDarwin ( - stdenvNoCC.targetPlatform.darwinMinVersion + darwinMinVersion = optionalString targetPlatform.isDarwin ( + targetPlatform.darwinMinVersion ); - darwinMinVersionVariable = optionalString stdenvNoCC.targetPlatform.isDarwin - stdenvNoCC.targetPlatform.darwinMinVersionVariable; + darwinMinVersionVariable = optionalString targetPlatform.isDarwin + targetPlatform.darwinMinVersionVariable; in assert includeFortifyHeaders' -> fortify-headers != null; @@ -477,8 +477,8 @@ stdenvNoCC.mkDerivation { # break `useLLVM` into.) + optionalString (isClang && targetPlatform.isLinux - && !(stdenvNoCC.targetPlatform.useAndroidPrebuilt or false) - && !(stdenvNoCC.targetPlatform.useLLVM or false) + && !(targetPlatform.useAndroidPrebuilt or false) + && !(targetPlatform.useLLVM or false) && gccForLibs != null) ('' echo "--gcc-toolchain=${gccForLibs}" >> $out/nix-support/cc-cflags @@ -687,7 +687,7 @@ stdenvNoCC.mkDerivation { done '' - + optionalString stdenvNoCC.targetPlatform.isDarwin '' + + optionalString targetPlatform.isDarwin '' echo "-arch ${targetPlatform.darwinArch}" >> $out/nix-support/cc-cflags ''