do default-feature unification in nix

Some of the features affect nix dependencies, so we need to have a
full feature list available when constructing the nix derivation. This
incidentally fixes the bug where we weren't enabling jemalloc on rocksdb
in CI/devshells, because jemalloc is now a default feature. It does not
fix the more general class of that issue, where CI is performing an
`--all-features` build in a nix devshell built for default-features.

I am now passing `--no-default-features` to cargo, and having it use our
unified feature list rather than duplicating the unification inside cargo.
This commit is contained in:
Benjamin Lee 2024-05-23 15:11:06 -07:00 committed by June 🍓🦴
parent a7fe434086
commit 188dea13e0

View file

@ -16,7 +16,19 @@
}: }:
let let
featureEnabled = feature : builtins.elem feature features; # We perform default-feature unification in nix, because some of the dependencies
# on the nix side depend on feature values.
workspaceMembers = builtins.map (member: "${inputs.self}/src/${member}")
(builtins.attrNames (builtins.readDir "${inputs.self}/src"));
crateDefaultFeatures = path:
(lib.importTOML "${path}/Cargo.toml").features.default;
allDefaultFeatures = lib.unique
(lib.flatten (builtins.map crateDefaultFeatures workspaceMembers));
features' = lib.unique
(features ++
lib.optionals default_features allDefaultFeatures);
featureEnabled = feature : builtins.elem feature features';
# This derivation will set the JEMALLOC_OVERRIDE variable, causing the # This derivation will set the JEMALLOC_OVERRIDE variable, causing the
# tikv-jemalloc-sys crate to use the nixpkgs jemalloc instead of building it's # tikv-jemalloc-sys crate to use the nixpkgs jemalloc instead of building it's
@ -102,13 +114,10 @@ craneLib.buildPackage ( commonAttrs // {
env = buildDepsOnlyEnv; env = buildDepsOnlyEnv;
}); });
cargoExtraArgs = "" cargoExtraArgs = "--no-default-features "
+ lib.optionalString + lib.optionalString
(!default_features) (features' != [])
"--no-default-features " "--features " + (builtins.concatStringsSep "," features');
+ lib.optionalString
(features != [])
"--features " + (builtins.concatStringsSep "," features);
# This is redundant with CI # This is redundant with CI
cargoTestCommand = ""; cargoTestCommand = "";