Skip to content

Commit

Permalink
Re-try build script building with --keep-going
Browse files Browse the repository at this point in the history
  • Loading branch information
Veykril committed Aug 10, 2022
1 parent 950de7c commit 25d4fbe
Showing 1 changed file with 23 additions and 10 deletions.
33 changes: 23 additions & 10 deletions crates/project-model/src/build_scripts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ pub(crate) struct BuildScriptOutput {
}

impl WorkspaceBuildScripts {
fn build_command(config: &CargoConfig, toolchain: &Option<Version>) -> Command {
fn build_command(config: &CargoConfig) -> Command {
if let Some([program, args @ ..]) = config.run_build_script_command.as_deref() {
let mut cmd = Command::new(program);
cmd.args(args);
Expand Down Expand Up @@ -71,26 +71,39 @@ impl WorkspaceBuildScripts {
}
}

cmd
}

pub(crate) fn run(
config: &CargoConfig,
workspace: &CargoWorkspace,
progress: &dyn Fn(String),
toolchain: &Option<Version>,
) -> io::Result<WorkspaceBuildScripts> {
const RUST_1_62: Version = Version::new(1, 62, 0);

match toolchain {
Some(v) if v >= &RUST_1_62 => {
match Self::run_(Self::build_command(config), config, workspace, progress) {
Ok(WorkspaceBuildScripts { error: Some(error), .. })
if toolchain.as_ref().map_or(false, |it| *it >= RUST_1_62) =>
{
// building build scripts failed, attempt to build with --keep-going so
// that we potentially get more build data
let mut cmd = Self::build_command(config);
cmd.args(&["-Z", "unstable-options", "--keep-going"]).env("RUSTC_BOOTSTRAP", "1");
let mut res = Self::run_(cmd, config, workspace, progress)?;
res.error = Some(error);
Ok(res)
}
_ => (),
res => res,
}

cmd
}

pub(crate) fn run(
fn run_(
mut cmd: Command,
config: &CargoConfig,
workspace: &CargoWorkspace,
progress: &dyn Fn(String),
toolchain: &Option<Version>,
) -> io::Result<WorkspaceBuildScripts> {
let mut cmd = Self::build_command(config, toolchain);

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
Expand Down

0 comments on commit 25d4fbe

Please sign in to comment.