Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/project-model/src/build_dependencies.rs')
-rw-r--r--crates/project-model/src/build_dependencies.rs34
1 files changed, 22 insertions, 12 deletions
diff --git a/crates/project-model/src/build_dependencies.rs b/crates/project-model/src/build_dependencies.rs
index fedc6944f5..aff5391697 100644
--- a/crates/project-model/src/build_dependencies.rs
+++ b/crates/project-model/src/build_dependencies.rs
@@ -22,8 +22,9 @@ use triomphe::Arc;
use crate::{
CargoConfig, CargoFeatures, CargoWorkspace, InvocationStrategy, ManifestPath, Package, Sysroot,
- TargetKind, cargo_config_file::make_lockfile_copy,
- cargo_workspace::MINIMUM_TOOLCHAIN_VERSION_SUPPORTING_LOCKFILE_PATH, utf8_stdout,
+ TargetKind,
+ cargo_config_file::{LockfileCopy, LockfileUsage, make_lockfile_copy},
+ utf8_stdout,
};
/// Output of the build script and proc-macro building steps for a workspace.
@@ -436,7 +437,7 @@ impl WorkspaceBuildScripts {
current_dir: &AbsPath,
sysroot: &Sysroot,
toolchain: Option<&semver::Version>,
- ) -> io::Result<(Option<temp_dir::TempDir>, Command)> {
+ ) -> io::Result<(Option<LockfileCopy>, Command)> {
match config.run_build_script_command.as_deref() {
Some([program, args @ ..]) => {
let mut cmd = toolchain::command(program, current_dir, &config.extra_env);
@@ -461,17 +462,26 @@ impl WorkspaceBuildScripts {
if let Some(target) = &config.target {
cmd.args(["--target", target]);
}
- let mut temp_dir_guard = None;
- if toolchain
- .is_some_and(|v| *v >= MINIMUM_TOOLCHAIN_VERSION_SUPPORTING_LOCKFILE_PATH)
- {
+ let mut lockfile_copy = None;
+ if let Some(toolchain) = toolchain {
let lockfile_path =
<_ as AsRef<Utf8Path>>::as_ref(manifest_path).with_extension("lock");
- if let Some((temp_dir, target_lockfile)) = make_lockfile_copy(&lockfile_path) {
+ lockfile_copy = make_lockfile_copy(toolchain, &lockfile_path);
+ if let Some(lockfile_copy) = &lockfile_copy {
requires_unstable_options = true;
- temp_dir_guard = Some(temp_dir);
- cmd.arg("--lockfile-path");
- cmd.arg(target_lockfile.as_str());
+ match lockfile_copy.usage {
+ LockfileUsage::WithFlag => {
+ cmd.arg("--lockfile-path");
+ cmd.arg(lockfile_copy.path.as_str());
+ }
+ LockfileUsage::WithEnvVar => {
+ cmd.arg("-Zlockfile-path");
+ cmd.env(
+ "CARGO_RESOLVER_LOCKFILE_PATH",
+ lockfile_copy.path.as_os_str(),
+ );
+ }
+ }
}
}
match &config.features {
@@ -542,7 +552,7 @@ impl WorkspaceBuildScripts {
cmd.env("__CARGO_TEST_CHANNEL_OVERRIDE_DO_NOT_USE_THIS", "nightly");
cmd.arg("-Zunstable-options");
}
- Ok((temp_dir_guard, cmd))
+ Ok((lockfile_copy, cmd))
}
}
}