From fa48c48d525060e212bd9a6cc52d4d6125ebe64a Mon Sep 17 00:00:00 2001 From: Benjamin Lee Date: Thu, 30 May 2024 00:44:30 -0700 Subject: [PATCH] add all-features devshell Because the nix rocksdb build depends on the jemalloc feature, you need to use a different devshell when passing --all-features to cargo than the default. --- flake.nix | 8 ++++++++ nix/pkgs/default/default.nix | 14 +++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/flake.nix b/flake.nix index 69e6194d..1d45525b 100644 --- a/flake.nix +++ b/flake.nix @@ -23,6 +23,11 @@ oci-image = self.callPackage ./nix/pkgs/oci-image {}; + # Return a new scope with overrides applied to the 'default' package + overrideDefaultPackage = args: self.overrideScope (final: prev: { + default = prev.default.override args; + }); + shell = self.callPackage ./nix/shell.nix {}; # The Rust toolchain to use @@ -84,6 +89,9 @@ ); devShells.default = (mkScope pkgs).shell; + devShells.all-features = ((mkScope pkgs).overrideDefaultPackage { + all-features = true; + }).shell; } ) // diff --git a/nix/pkgs/default/default.nix b/nix/pkgs/default/default.nix index 4313ea6e..6689e86c 100644 --- a/nix/pkgs/default/default.nix +++ b/nix/pkgs/default/default.nix @@ -11,6 +11,7 @@ # Options (keep sorted) , default-features ? true +, all-features ? false , features ? [] , profile ? "release" }: @@ -18,10 +19,17 @@ let # We perform default-feature unification in nix, because some of the dependencies # on the nix side depend on feature values. - allDefaultFeatures = - (lib.importTOML "${inputs.self}/Cargo.toml").features.default; + cargoManifest = lib.importTOML "${inputs.self}/Cargo.toml"; + allDefaultFeatures = cargoManifest.features.default; + allFeatures = lib.unique ( + lib.remove "default" (lib.attrNames cargoManifest.features) ++ + lib.attrNames + (lib.filterAttrs (_: dependency: dependency.optional or false) + cargoManifest.dependencies)); features' = lib.unique - (features ++ lib.optionals default-features allDefaultFeatures); + (features ++ + lib.optionals default-features allDefaultFeatures ++ + lib.optionals all-features allFeatures); featureEnabled = feature : builtins.elem feature features';