From e27bcfed1cc83863bde59068a0565a09955fbeb3 Mon Sep 17 00:00:00 2001 From: Philip Taron Date: Tue, 12 Mar 2024 00:34:58 -0700 Subject: [PATCH] Avoid top-level `with` in pkgs/build-support/cc-wrapper/default.nix (#295213) --- pkgs/build-support/cc-wrapper/default.nix | 73 ++++++++++++++--------- 1 file changed, 44 insertions(+), 29 deletions(-) diff --git a/pkgs/build-support/cc-wrapper/default.nix b/pkgs/build-support/cc-wrapper/default.nix index caa3545083dd..49bd90794a94 100644 --- a/pkgs/build-support/cc-wrapper/default.nix +++ b/pkgs/build-support/cc-wrapper/default.nix @@ -55,31 +55,48 @@ , includeFortifyHeaders ? null }: -with lib; - assert nativeTools -> !propagateDoc && nativePrefix != ""; -assert !nativeTools -> - cc != null && coreutils != null && gnugrep != null; +assert !nativeTools -> cc != null && coreutils != null && gnugrep != null; assert !(nativeLibc && noLibc); assert (noLibc || nativeLibc) == (libc == null); let - stdenv = stdenvNoCC; + inherit (lib) + attrByPath + concatMapStrings + concatStringsSep + escapeShellArg + getBin + getDev + getLib + getName + getVersion + mapAttrsToList + optional + optionalAttrs + optionals + optionalString + removePrefix + replaceStrings + toList + versionAtLeast + ; + inherit (stdenv) hostPlatform targetPlatform; + stdenv = stdenvNoCC; + includeFortifyHeaders' = if includeFortifyHeaders != null then includeFortifyHeaders else (targetPlatform.libc == "musl" && isGNU); # Prefix for binaries. Customarily ends with a dash separator. # - # TODO(@Ericson2314) Make unconditional, or optional but always true by - # default. - targetPrefix = lib.optionalString (targetPlatform != hostPlatform) - (targetPlatform.config + "-"); + # TODO(@Ericson2314) Make unconditional, or optional but always true by default. + targetPrefix = optionalString (targetPlatform != hostPlatform) (targetPlatform.config + "-"); - ccVersion = lib.getVersion cc; - ccName = lib.removePrefix targetPrefix (lib.getName cc); + ccVersion = getVersion cc; + ccName = removePrefix targetPrefix (getName cc); libc_bin = optionalString (libc != null) (getBin libc); libc_dev = optionalString (libc != null) (getDev libc); @@ -98,7 +115,7 @@ let suffixSalt = replaceStrings ["-" "."] ["_" "_"] targetPlatform.config; expand-response-params = - lib.optionalString ((buildPackages.stdenv.hasCC or false) && buildPackages.stdenv.cc != "/dev/null") (import ../expand-response-params { inherit (buildPackages) stdenv; }); + optionalString ((buildPackages.stdenv.hasCC or false) && buildPackages.stdenv.cc != "/dev/null") (import ../expand-response-params { inherit (buildPackages) stdenv; }); useGccForLibs = useCcForLibs && libcxx == null @@ -111,7 +128,7 @@ let + optionalString (targetPlatform != hostPlatform) "/${targetPlatform.config}"; # Analogously to cc_solib and gccForLibs_solib - libcxx_solib = "${lib.getLib libcxx}/lib"; + libcxx_solib = "${getLib libcxx}/lib"; # The following two functions, `isGccArchSupported` and # `isGccTuneSupported`, only handle those situations where a flag @@ -407,9 +424,9 @@ stdenv.mkDerivation { setupHooks = [ ../setup-hooks/role.bash - ] ++ lib.optional (cc.langC or true) ./setup-hook.sh - ++ lib.optional (cc.langFortran or false) ./fortran-hook.sh - ++ lib.optional (targetPlatform.isWindows) (stdenv.mkDerivation { + ] ++ optional (cc.langC or true) ./setup-hook.sh + ++ optional (cc.langFortran or false) ./fortran-hook.sh + ++ optional (targetPlatform.isWindows) (stdenv.mkDerivation { name = "win-dll-hook.sh"; dontUnpack = true; installPhase = '' @@ -476,7 +493,7 @@ stdenv.mkDerivation { # when building e.g. firefox), lld is able to find libgcc_s.so + concatMapStrings (libgcc: '' echo "-L${libgcc}/lib" >> $out/nix-support/cc-ldflags - '') (lib.toList (gccForLibs.libgcc or []))) + '') (toList (gccForLibs.libgcc or []))) ## ## General libc support @@ -542,7 +559,7 @@ stdenv.mkDerivation { done '' + optionalString (libcxx.isLLVM or false) '' - echo "-isystem ${lib.getDev libcxx}/include/c++/v1" >> $out/nix-support/libcxx-cxxflags + echo "-isystem ${getDev libcxx}/include/c++/v1" >> $out/nix-support/libcxx-cxxflags echo "-stdlib=libc++" >> $out/nix-support/libcxx-ldflags '' # can remove once LLVM9 and LLVM11 are dropped from nixpkgs @@ -596,7 +613,7 @@ stdenv.mkDerivation { ## Hardening support ## + '' - export hardening_unsupported_flags="${builtins.concatStringsSep " " ccHardeningUnsupportedFlags}" + export hardening_unsupported_flags="${concatStringsSep " " ccHardeningUnsupportedFlags}" '' # Machine flags. These are necessary to support @@ -701,9 +718,9 @@ stdenv.mkDerivation { ## + optionalString isClang '' # Escape twice: once for this script, once for the one it gets substituted into. - export march=${lib.escapeShellArg - (lib.optionalString (targetPlatform ? gcc.arch) - (lib.escapeShellArg "-march=${targetPlatform.gcc.arch}"))} + export march=${escapeShellArg + (optionalString (targetPlatform ? gcc.arch) + (escapeShellArg "-march=${targetPlatform.gcc.arch}"))} export defaultTarget=${targetPlatform.config} substituteAll ${./add-clang-cc-cflags-before.sh} $out/nix-support/add-local-cc-cflags-before.sh '' @@ -712,8 +729,8 @@ stdenv.mkDerivation { ## Extra custom steps ## + extraBuildCommands - + lib.strings.concatStringsSep "; " - (lib.attrsets.mapAttrsToList + + concatStringsSep "; " + (mapAttrsToList (name: value: "echo ${toString value} >> $out/nix-support/${name}") nixSupport); @@ -736,11 +753,9 @@ stdenv.mkDerivation { }; meta = - let cc_ = lib.optionalAttrs (cc != null) cc; in - (lib.optionalAttrs (cc_ ? meta) (removeAttrs cc.meta ["priority"])) // - { description = - lib.attrByPath ["meta" "description"] "System C compiler" cc_ - + " (wrapper script)"; + let cc_ = optionalAttrs (cc != null) cc; in + (optionalAttrs (cc_ ? meta) (removeAttrs cc.meta ["priority"])) // + { description = attrByPath ["meta" "description"] "System C compiler" cc_ + " (wrapper script)"; priority = 10; mainProgram = if name != "" then name else ccName; };