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.rs | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/crates/project-model/src/build_dependencies.rs b/crates/project-model/src/build_dependencies.rs index b0939229f9..e0c38ccf33 100644 --- a/crates/project-model/src/build_dependencies.rs +++ b/crates/project-model/src/build_dependencies.rs @@ -9,7 +9,7 @@ use std::{cell::RefCell, io, mem, process::Command}; use base_db::Env; -use cargo_metadata::{camino::Utf8Path, Message}; +use cargo_metadata::{Message, camino::Utf8Path}; use cfg::CfgAtom; use itertools::Itertools; use la_arena::ArenaMap; @@ -19,8 +19,8 @@ use serde::Deserialize as _; use toolchain::Tool; use crate::{ - utf8_stdout, CargoConfig, CargoFeatures, CargoWorkspace, InvocationStrategy, ManifestPath, - Package, Sysroot, TargetKind, + CargoConfig, CargoFeatures, CargoWorkspace, InvocationStrategy, ManifestPath, Package, Sysroot, + TargetKind, utf8_stdout, }; /// Output of the build script and proc-macro building steps for a workspace. @@ -163,7 +163,7 @@ impl WorkspaceBuildScripts { pub(crate) fn rustc_crates( rustc: &CargoWorkspace, current_dir: &AbsPath, - extra_env: &FxHashMap<String, String>, + extra_env: &FxHashMap<String, Option<String>>, sysroot: &Sysroot, ) -> Self { let mut bs = WorkspaceBuildScripts::default(); @@ -172,16 +172,14 @@ impl WorkspaceBuildScripts { } let res = (|| { let target_libdir = (|| { - let mut cargo_config = sysroot.tool(Tool::Cargo, current_dir); - cargo_config.envs(extra_env); + let mut cargo_config = sysroot.tool(Tool::Cargo, current_dir, extra_env); cargo_config .args(["rustc", "-Z", "unstable-options", "--print", "target-libdir"]) .env("RUSTC_BOOTSTRAP", "1"); if let Ok(it) = utf8_stdout(&mut cargo_config) { return Ok(it); } - let mut cmd = sysroot.tool(Tool::Rustc, current_dir); - cmd.envs(extra_env); + let mut cmd = sysroot.tool(Tool::Rustc, current_dir, extra_env); cmd.args(["--print", "target-libdir"]); utf8_stdout(&mut cmd) })()?; @@ -343,7 +341,8 @@ impl WorkspaceBuildScripts { Message::CompilerArtifact(message) => { with_output_for(&message.package_id.repr, &mut |name, data| { progress(format!("building proc-macros: {name}")); - if message.target.kind.iter().any(|k| k == "proc-macro") { + if message.target.kind.contains(&cargo_metadata::TargetKind::ProcMacro) + { // Skip rmeta file if let Some(filename) = message.filenames.iter().find(|file| is_dylib(file)) @@ -389,12 +388,12 @@ impl WorkspaceBuildScripts { ) -> io::Result<Command> { let mut cmd = match config.run_build_script_command.as_deref() { Some([program, args @ ..]) => { - let mut cmd = toolchain::command(program, current_dir); + let mut cmd = toolchain::command(program, current_dir, &config.extra_env); cmd.args(args); cmd } _ => { - let mut cmd = sysroot.tool(Tool::Cargo, current_dir); + let mut cmd = sysroot.tool(Tool::Cargo, current_dir, &config.extra_env); cmd.args(["check", "--quiet", "--workspace", "--message-format=json"]); cmd.args(&config.extra_args); @@ -447,7 +446,6 @@ impl WorkspaceBuildScripts { } }; - cmd.envs(&config.extra_env); if config.wrap_rustc_in_build_scripts { // Setup RUSTC_WRAPPER to point to `rust-analyzer` binary itself. We use // that to compile only proc macros and build scripts during the initial |