about summary refs log tree commit diff
path: root/pkgs/build-support
diff options
context:
space:
mode:
authormarius david <marius@mariusdavid.fr>2022-08-23 13:09:33 +0200
committermarius david <marius@mariusdavid.fr>2022-08-23 13:09:33 +0200
commit3291bda7b6aca51b1e2644e1adc7824c89530dc0 (patch)
tree8c3064bcc006b9b1d29f25133a5d780995ce3c0f /pkgs/build-support
parentc83b87fecd1a86d6a1861667664e6f45eb76d763 (diff)
buildRustCrate: Do not compile binaries if all the requiredFeatures aren't enabled.
Diffstat (limited to 'pkgs/build-support')
-rw-r--r--pkgs/build-support/rust/build-rust-crate/build-crate.nix12
1 files changed, 11 insertions, 1 deletions
diff --git a/pkgs/build-support/rust/build-rust-crate/build-crate.nix b/pkgs/build-support/rust/build-rust-crate/build-crate.nix
index b24398665a10b..37bf3ec26f770 100644
--- a/pkgs/build-support/rust/build-rust-crate/build-crate.nix
+++ b/pkgs/build-support/rust/build-rust-crate/build-crate.nix
@@ -69,7 +69,15 @@
 
 
 
-    ${lib.optionalString (lib.length crateBin > 0) (lib.concatMapStringsSep "\n" (bin: ''
+    ${lib.optionalString (lib.length crateBin > 0) (lib.concatMapStringsSep "\n" (bin:
+    let
+      haveRequiredFeature = if bin ? requiredFeatures then
+        # Check that all element in requiredFeatures are also present in crateFeatures
+        lib.intersectLists bin.requiredFeatures crateFeatures == bin.requiredFeatures
+      else
+        true;
+    in
+    if haveRequiredFeature then ''
       mkdir -p target/bin
       BIN_NAME='${bin.name or crateName}'
       ${if !bin ? path then ''
@@ -79,6 +87,8 @@
         BIN_PATH='${bin.path}'
       ''}
         ${build_bin} "$BIN_NAME" "$BIN_PATH"
+    '' else ''
+      echo Binary ${bin.name or crateName} not compiled due to not having all of the required features -- ${lib.escapeShellArg (builtins.toJSON bin.requiredFeatures)} -- enabled.
     '') crateBin)}
 
     ${lib.optionalString buildTests ''