Merge pull request #33589 from dtzWill/fix/fixed-output-cross-name

make-derivation: Don't add host-suffix to fixed-output derivations names

Changed files
+13 -9
pkgs
stdenv
top-level
+11 -2
pkgs/stdenv/generic/make-derivation.nix
···
, ... } @ attrs:
-
# TODO(@Ericson2314): Make this more modular, and not O(n^2).
let
supportedHardeningFlags = [ "fortify" "stackprotector" "pie" "pic" "strictoverflow" "format" "relro" "bindnow" ];
defaultHardeningFlags = lib.remove "pie" supportedHardeningFlags;
enabledHardeningOptions =
···
# A hack to make `nix-env -qa` and `nix search` ignore broken packages.
# TODO(@oxij): remove this assert when something like NixOS/nix#1771 gets merged into nix.
name = assert validity.handled; name + lib.optionalString
-
(stdenv.hostPlatform != stdenv.buildPlatform)
("-" + stdenv.hostPlatform.config);
builder = attrs.realBuilder or stdenv.shell;
···
, ... } @ attrs:
let
+
fixedOutputDrv = attrs ? outputHash;
+
noNonNativeDeps = builtins.length (depsBuildTarget ++ depsBuildTargetPropagated
+
++ depsHostHost ++ depsHostHostPropagated
+
++ buildInputs ++ propagatedBuildInputs
+
++ depsTargetTarget ++ depsTargetTargetPropagated) == 0;
+
runtimeSensativeIfFixedOutput = fixedOutputDrv -> !noNonNativeDeps;
supportedHardeningFlags = [ "fortify" "stackprotector" "pie" "pic" "strictoverflow" "format" "relro" "bindnow" ];
defaultHardeningFlags = lib.remove "pie" supportedHardeningFlags;
enabledHardeningOptions =
···
# A hack to make `nix-env -qa` and `nix search` ignore broken packages.
# TODO(@oxij): remove this assert when something like NixOS/nix#1771 gets merged into nix.
name = assert validity.handled; name + lib.optionalString
+
# Fixed-output derivations like source tarballs shouldn't get a host
+
# suffix. But we have some weird ones with run-time deps that are
+
# just used for their side-affects. Those might as well since the
+
# hash can't be the same. See #32986.
+
(stdenv.hostPlatform != stdenv.buildPlatform && runtimeSensativeIfFixedOutput)
("-" + stdenv.hostPlatform.config);
builder = attrs.realBuilder or stdenv.shell;
+2 -7
pkgs/top-level/splice.nix
···
then defaultBuildHostScope
else assert pkgs.hostPlatform == pkgs.buildPlatform; defaultHostTargetScope;
defaultHostHostScope = {}; # unimplemented
-
# TODO(@Ericson2314): we shouldn't preclude run-time fetching by removing
-
# these attributes. We should have a more general solution for selecting
-
# whether `nativeDrv` or `crossDrv` is the default in `defaultScope`.
-
pkgsWithoutFetchers = lib.filterAttrs (n: _: !lib.hasPrefix "fetch" n) pkgs;
-
targetPkgsWithoutFetchers = lib.filterAttrs (n: _: !lib.hasPrefix "fetch" n) pkgs.targetPackages;
-
defaultHostTargetScope = pkgsWithoutFetchers // pkgs.xorg;
-
defaultTargetTargetScope = targetPkgsWithoutFetchers // targetPkgsWithoutFetchers.xorg or {};
splicer = pkgsBuildBuild: pkgsBuildHost: pkgsBuildTarget:
pkgsHostHost: pkgsHostTarget:
···
then defaultBuildHostScope
else assert pkgs.hostPlatform == pkgs.buildPlatform; defaultHostTargetScope;
defaultHostHostScope = {}; # unimplemented
+
defaultHostTargetScope = pkgs // pkgs.xorg;
+
defaultTargetTargetScope = pkgs.targetPackages // pkgs.targetPackages.xorg or {};
splicer = pkgsBuildBuild: pkgsBuildHost: pkgsBuildTarget:
pkgsHostHost: pkgsHostTarget: