mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-22 06:53:01 +00:00
default-crate-overrides: proc-macro-crate assumes env::var("CARGO")
Since version 2.0.0, proc-macro-crate has assumed it can exec() `env::var("CARGO")` in order to run `cargo locate-project`. This commit adds a crate override to proc-macro-crate which simply writes the path to buildPlatform.cargo into the proc-macro-crate sources. This way we don't need to set `env.CARGO` for every build that depends on proc-macro-crate -- if we do that, the $CARGO environment variable would be visible to the entire build. This could potentially lead to incredibly hard-to-troubleshoot heisenbugs if there is some other crate that expects `env::var("CARGO")` to exist -- that other crate would mysteriously work only in projects that use proc-macro-crate but not anywhere else!
This commit is contained in:
parent
ab682c47b2
commit
bbb42450c5
@ -43,6 +43,7 @@
|
||||
, udev
|
||||
, webkitgtk_4_1
|
||||
, zlib
|
||||
, buildPackages
|
||||
, ...
|
||||
}:
|
||||
|
||||
@ -357,4 +358,15 @@ in
|
||||
buildInputs = [ atk ];
|
||||
};
|
||||
|
||||
# Assumes it can run Command::new(env::var("CARGO")).arg("locate-project")
|
||||
# https://github.com/bkchr/proc-macro-crate/blame/master/src/lib.rs#L244
|
||||
proc-macro-crate = attrs: lib.optionalAttrs (lib.versionAtLeast attrs.version "2.0") {
|
||||
prePatch = (attrs.prePatch or "") + ''
|
||||
substituteInPlace \
|
||||
src/lib.rs \
|
||||
--replace-fail \
|
||||
'env::var("CARGO").map_err(|_| Error::CargoEnvVariableNotSet)?' \
|
||||
'"${lib.getBin buildPackages.cargo}/bin/cargo"'
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user