stdenv: make inputDerivation never require system features (#463746)

This commit is contained in:
Philip Taron
2026-02-12 19:59:16 +00:00
committed by GitHub
3 changed files with 46 additions and 0 deletions
+3
View File
@@ -214,6 +214,9 @@ let
shellDryRun = "${stdenv.shell} -n -O extglob";
tests = {
inputDerivationRequiredSystemFeatures = import ../tests/inputDerivationRequiredSystemFeatures.nix {
inherit lib stdenv;
};
succeedOnFailure = import ../tests/succeedOnFailure.nix { inherit stdenv; };
};
passthru.tests = lib.warn "Use `stdenv.tests` instead. `passthru` is a `mkDerivation` detail." stdenv.tests;
+3
View File
@@ -888,6 +888,9 @@ let
name = "inputDerivation" + lib.optionalString (derivationArg ? name) "-${derivationArg.name}";
# This always only has one output
outputs = [ "out" ];
# This doesnt require any system features even if the original
# derivation did.
requiredSystemFeatures = [ ];
# Propagate the original builder and arguments, since we override
# them and they might contain references to build inputs
@@ -0,0 +1,40 @@
{ lib, stdenv }:
let
impossibleToBuildPackage = stdenv.mkDerivation {
name = "impossible-to-build-package";
# According to the Nix manual, the "apple-virt" system feature is
# Darwin-only and the "kvm" system feature is Linux-only [1].
#
# [1]: <https://nix.dev/manual/nix/2.32/command-ref/conf-file.html#conf-system-features>
requiredSystemFeatures = if stdenv.buildPlatform.isLinux then "apple-virt" else "kvm";
buildCommand = ''
echo ERROR: Its supposed to be impossible to start building this package. >&2
exit 1
'';
};
in
stdenv.mkDerivation {
name = "stdenv-test-inputDerivationRequiredSystemFeatures";
impossibleToBuildPackageInputDerivation = impossibleToBuildPackage.inputDerivation;
buildCommand = ''
ln --symbolic "$impossibleToBuildPackageInputDerivation" "$out"
'';
meta = {
longDescription = ''
In previous versions of Nixpkgs,
`<originalDerivation>.inputDerivation.requiredSystemFeatures` would
always be the same as `<originalDerivation>.requiredSystemFeatures`. This
meant that if a builder wasnt able to build `<originalDerivation>` due
to a lack of system features, then that builder would also not be able to
build `<originalDerivation>.inputDerivation`.
That was an aribtrary (and probably accidental) limitation. Building
input derivations never requires any system features. This test checks to
make sure that that limitation no longer exists.
'';
maintainers = [ lib.maintainers.jayman2000 ];
};
}