]> git.lizzy.rs Git - rust.git/blobdiff - crates/project_model/src/build_scripts.rs
internal: Show more project building errors to the user
[rust.git] / crates / project_model / src / build_scripts.rs
index d96c135ba5e359439b9a75771d1a54d934a4d994..5aa23331a13d6da026a4b907032fe92ca109d655 100644 (file)
@@ -7,11 +7,11 @@
 //! here, but it covers procedural macros as well.
 
 use std::{
+    io,
     path::PathBuf,
     process::{Command, Stdio},
 };
 
-use anyhow::Result;
 use cargo_metadata::{camino::Utf8Path, Message};
 use la_arena::ArenaMap;
 use paths::AbsPathBuf;
@@ -80,7 +80,7 @@ pub(crate) fn run(
         config: &CargoConfig,
         workspace: &CargoWorkspace,
         progress: &dyn Fn(String),
-    ) -> Result<WorkspaceBuildScripts> {
+    ) -> io::Result<WorkspaceBuildScripts> {
         let mut cmd = Self::build_command(config);
 
         if config.wrap_rustc_in_build_scripts {
@@ -107,12 +107,12 @@ pub(crate) fn run(
             by_id.insert(workspace[package].id.clone(), package);
         }
 
-        let mut callback_err = None;
+        let mut cfg_err = None;
         let mut stderr = String::new();
         let output = stdx::process::streaming_output(
             cmd,
             &mut |line| {
-                if callback_err.is_some() {
+                if cfg_err.is_some() {
                     return;
                 }
 
@@ -126,7 +126,7 @@ pub(crate) fn run(
                 match message {
                     Message::BuildScriptExecuted(message) => {
                         let package = match by_id.get(&message.package_id.repr) {
-                            Some(it) => *it,
+                            Some(&it) => it,
                             None => return,
                         };
                         let cfgs = {
@@ -135,7 +135,7 @@ pub(crate) fn run(
                                 match cfg.parse::<CfgFlag>() {
                                     Ok(it) => acc.push(it),
                                     Err(err) => {
-                                        callback_err = Some(anyhow::format_err!(
+                                        cfg_err = Some(format!(
                                             "invalid cfg from cargo-metadata: {}",
                                             err
                                         ));
@@ -191,6 +191,11 @@ pub(crate) fn run(
 
         for package in workspace.packages() {
             let package_build_data = &mut res.outputs[package];
+            tracing::info!(
+                "{} BuildScriptOutput: {:?}",
+                workspace[package].manifest.parent().display(),
+                package_build_data,
+            );
             // inject_cargo_env(package, package_build_data);
             if let Some(out_dir) = &package_build_data.out_dir {
                 // NOTE: cargo and rustc seem to hide non-UTF-8 strings from env! and option_env!()
@@ -200,6 +205,11 @@ pub(crate) fn run(
             }
         }
 
+        if let Some(cfg_err) = cfg_err {
+            stderr.push_str(&cfg_err);
+            stderr.push('\n');
+        }
+
         if !output.status.success() {
             if stderr.is_empty() {
                 stderr = "cargo check failed".to_string();