diff --git a/doc/stdenv.xml b/doc/stdenv.xml
index 7154a576def..3a7b23baaa7 100644
--- a/doc/stdenv.xml
+++ b/doc/stdenv.xml
@@ -995,13 +995,14 @@ but only if the doCheck variable is enabled.
doCheck
- If set to a non-empty string, the check phase is
- executed, otherwise it is skipped (default). Thus you should set
-
-
-doCheck = true;
-
- in the derivation to enable checks.
+
+ Controls whether the check phase is executed.
+ By default it is skipped, but if doCheck is set to true, the check phase is usually executed.
+ Thus you should set doCheck = true; in the derivation to enable checks.
+ The exception is cross compilation.
+ Cross compiled builds never run tests, no matter how doCheck is set,
+ as the newly-built program won't run on the platform used to build it.
+
@@ -1280,12 +1281,14 @@ installcheck.
doInstallCheck
- If set to a non-empty string, the installCheck phase is
- executed, otherwise it is skipped (default). Thus you should set
-
- doInstallCheck = true;
-
- in the derivation to enable install checks.
+
+ Controls whether the installCheck phase is executed.
+ By default it is skipped, but if doInstallCheck is set to true, the installCheck phase is usually executed.
+ Thus you should set doInstallCheck = true; in the derivation to enable install checks.
+ The exception is cross compilation.
+ Cross compiled builds never run tests, no matter how doInstallCheck is set,
+ as the newly-built program won't run on the platform used to build it.
+
diff --git a/pkgs/stdenv/generic/make-derivation.nix b/pkgs/stdenv/generic/make-derivation.nix
index 2d702ab389e..3ffa7cfe35f 100644
--- a/pkgs/stdenv/generic/make-derivation.nix
+++ b/pkgs/stdenv/generic/make-derivation.nix
@@ -36,6 +36,7 @@ rec {
, depsTargetTarget ? [] # 1 -> 1
, depsTargetTargetPropagated ? [] # 1 -> 1
+ # Configure Phase
, configureFlags ? []
, # Target is not included by default because most programs don't care.
# Including it then would cause needless mass rebuilds.
@@ -44,6 +45,13 @@ rec {
configurePlatforms ? lib.optionals
(stdenv.hostPlatform != stdenv.buildPlatform)
[ "build" "host" ]
+
+ # Check phase
+ , doCheck ? false
+
+ # InstallCheck phase
+ , doInstallCheck ? false
+
, crossConfig ? null
, meta ? {}
, passthru ? {}
@@ -60,6 +68,7 @@ rec {
, hardeningEnable ? []
, hardeningDisable ? []
+
, ... } @ attrs:
# TODO(@Ericson2314): Make this more modular, and not O(n^2).
@@ -178,9 +187,15 @@ rec {
"/bin/sh"
];
__propagatedImpureHostDeps = computedPropagatedImpureHostDeps ++ __propagatedImpureHostDeps;
- } // (if outputs' != [ "out" ] then {
+ } // lib.optionalAttrs (outputs' != [ "out" ]) {
outputs = outputs';
- } else { }));
+ } // lib.optionalAttrs (attrs ? doCheck) {
+ # TODO(@Ericson2314): Make unconditional / resolve #33599
+ doCheck = doCheck && (stdenv.hostPlatform == stdenv.targetPlatform);
+ } // lib.optionalAttrs (attrs ? doInstallCheck) {
+ # TODO(@Ericson2314): Make unconditional / resolve #33599
+ doInstallCheck = doInstallCheck && (stdenv.hostPlatform == stdenv.targetPlatform);
+ });
# The meta attribute is passed in the resulting attribute set,
# but it's not part of the actual derivation, i.e., it's not