Add a shortcut helper function command
for creating commands
This is simply a quality-of-life improvement to make command creation in bootstrap a bit shorter and more discoverable.
This commit is contained in:
parent
73660649cd
commit
f933d789b7
18 changed files with 94 additions and 111 deletions
|
@ -27,7 +27,7 @@ use crate::core::builder::crate_description;
|
||||||
use crate::core::builder::Cargo;
|
use crate::core::builder::Cargo;
|
||||||
use crate::core::builder::{Builder, Kind, PathSet, RunConfig, ShouldRun, Step, TaskPath};
|
use crate::core::builder::{Builder, Kind, PathSet, RunConfig, ShouldRun, Step, TaskPath};
|
||||||
use crate::core::config::{DebuginfoLevel, LlvmLibunwind, RustcLto, TargetSelection};
|
use crate::core::config::{DebuginfoLevel, LlvmLibunwind, RustcLto, TargetSelection};
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::command;
|
||||||
use crate::utils::helpers::{
|
use crate::utils::helpers::{
|
||||||
exe, get_clang_cl_resource_dir, is_debug_info, is_dylib, symlink_dir, t, up_to_date,
|
exe, get_clang_cl_resource_dir, is_debug_info, is_dylib, symlink_dir, t, up_to_date,
|
||||||
};
|
};
|
||||||
|
@ -773,7 +773,7 @@ impl Step for StartupObjects {
|
||||||
let src_file = &src_dir.join(file.to_string() + ".rs");
|
let src_file = &src_dir.join(file.to_string() + ".rs");
|
||||||
let dst_file = &dst_dir.join(file.to_string() + ".o");
|
let dst_file = &dst_dir.join(file.to_string() + ".o");
|
||||||
if !up_to_date(src_file, dst_file) {
|
if !up_to_date(src_file, dst_file) {
|
||||||
let mut cmd = BootstrapCommand::new(&builder.initial_rustc);
|
let mut cmd = command(&builder.initial_rustc);
|
||||||
cmd.env("RUSTC_BOOTSTRAP", "1");
|
cmd.env("RUSTC_BOOTSTRAP", "1");
|
||||||
if !builder.local_rebuild {
|
if !builder.local_rebuild {
|
||||||
// a local_rebuild compiler already has stage1 features
|
// a local_rebuild compiler already has stage1 features
|
||||||
|
@ -1487,7 +1487,7 @@ pub fn compiler_file(
|
||||||
if builder.config.dry_run() {
|
if builder.config.dry_run() {
|
||||||
return PathBuf::new();
|
return PathBuf::new();
|
||||||
}
|
}
|
||||||
let mut cmd = BootstrapCommand::new(compiler);
|
let mut cmd = command(compiler);
|
||||||
cmd.args(builder.cflags(target, GitRepo::Rustc, c));
|
cmd.args(builder.cflags(target, GitRepo::Rustc, c));
|
||||||
cmd.arg(format!("-print-file-name={file}"));
|
cmd.arg(format!("-print-file-name={file}"));
|
||||||
let out = cmd.capture_stdout().run(builder).stdout();
|
let out = cmd.capture_stdout().run(builder).stdout();
|
||||||
|
@ -1835,11 +1835,8 @@ impl Step for Assemble {
|
||||||
let llvm::LlvmResult { llvm_config, .. } =
|
let llvm::LlvmResult { llvm_config, .. } =
|
||||||
builder.ensure(llvm::Llvm { target: target_compiler.host });
|
builder.ensure(llvm::Llvm { target: target_compiler.host });
|
||||||
if !builder.config.dry_run() && builder.config.llvm_tools_enabled {
|
if !builder.config.dry_run() && builder.config.llvm_tools_enabled {
|
||||||
let llvm_bin_dir = BootstrapCommand::new(llvm_config)
|
let llvm_bin_dir =
|
||||||
.capture_stdout()
|
command(llvm_config).capture_stdout().arg("--bindir").run(builder).stdout();
|
||||||
.arg("--bindir")
|
|
||||||
.run(builder)
|
|
||||||
.stdout();
|
|
||||||
let llvm_bin_dir = Path::new(llvm_bin_dir.trim());
|
let llvm_bin_dir = Path::new(llvm_bin_dir.trim());
|
||||||
|
|
||||||
// Since we've already built the LLVM tools, install them to the sysroot.
|
// Since we've already built the LLVM tools, install them to the sysroot.
|
||||||
|
@ -2164,7 +2161,7 @@ pub fn strip_debug(builder: &Builder<'_>, target: TargetSelection, path: &Path)
|
||||||
}
|
}
|
||||||
|
|
||||||
let previous_mtime = FileTime::from_last_modification_time(&path.metadata().unwrap());
|
let previous_mtime = FileTime::from_last_modification_time(&path.metadata().unwrap());
|
||||||
BootstrapCommand::new("strip").capture().arg("--strip-debug").arg(path).run(builder);
|
command("strip").capture().arg("--strip-debug").arg(path).run(builder);
|
||||||
|
|
||||||
// After running `strip`, we have to set the file modification time to what it was before,
|
// After running `strip`, we have to set the file modification time to what it was before,
|
||||||
// otherwise we risk Cargo invalidating its fingerprint and rebuilding the world next time
|
// otherwise we risk Cargo invalidating its fingerprint and rebuilding the world next time
|
||||||
|
|
|
@ -25,7 +25,7 @@ use crate::core::build_steps::tool::{self, Tool};
|
||||||
use crate::core::builder::{Builder, Kind, RunConfig, ShouldRun, Step};
|
use crate::core::builder::{Builder, Kind, RunConfig, ShouldRun, Step};
|
||||||
use crate::core::config::TargetSelection;
|
use crate::core::config::TargetSelection;
|
||||||
use crate::utils::channel::{self, Info};
|
use crate::utils::channel::{self, Info};
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::{command, BootstrapCommand};
|
||||||
use crate::utils::helpers::{
|
use crate::utils::helpers::{
|
||||||
exe, is_dylib, move_file, t, target_supports_cranelift_backend, timeit,
|
exe, is_dylib, move_file, t, target_supports_cranelift_backend, timeit,
|
||||||
};
|
};
|
||||||
|
@ -180,7 +180,7 @@ fn make_win_dist(
|
||||||
}
|
}
|
||||||
|
|
||||||
//Ask gcc where it keeps its stuff
|
//Ask gcc where it keeps its stuff
|
||||||
let mut cmd = BootstrapCommand::new(builder.cc(target));
|
let mut cmd = command(builder.cc(target));
|
||||||
cmd.arg("-print-search-dirs");
|
cmd.arg("-print-search-dirs");
|
||||||
let gcc_out = cmd.capture_stdout().run(builder).stdout();
|
let gcc_out = cmd.capture_stdout().run(builder).stdout();
|
||||||
|
|
||||||
|
@ -1023,7 +1023,7 @@ impl Step for PlainSourceTarball {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vendor all Cargo dependencies
|
// Vendor all Cargo dependencies
|
||||||
let mut cmd = BootstrapCommand::new(&builder.initial_cargo);
|
let mut cmd = command(&builder.initial_cargo);
|
||||||
cmd.arg("vendor")
|
cmd.arg("vendor")
|
||||||
.arg("--versioned-dirs")
|
.arg("--versioned-dirs")
|
||||||
.arg("--sync")
|
.arg("--sync")
|
||||||
|
@ -1599,7 +1599,7 @@ impl Step for Extended {
|
||||||
let _ = fs::remove_dir_all(&pkg);
|
let _ = fs::remove_dir_all(&pkg);
|
||||||
|
|
||||||
let pkgbuild = |component: &str| {
|
let pkgbuild = |component: &str| {
|
||||||
let mut cmd = BootstrapCommand::new("pkgbuild");
|
let mut cmd = command("pkgbuild");
|
||||||
cmd.arg("--identifier")
|
cmd.arg("--identifier")
|
||||||
.arg(format!("org.rust-lang.{}", component))
|
.arg(format!("org.rust-lang.{}", component))
|
||||||
.arg("--scripts")
|
.arg("--scripts")
|
||||||
|
@ -1636,7 +1636,7 @@ impl Step for Extended {
|
||||||
builder.create_dir(&pkg.join("res"));
|
builder.create_dir(&pkg.join("res"));
|
||||||
builder.create(&pkg.join("res/LICENSE.txt"), &license);
|
builder.create(&pkg.join("res/LICENSE.txt"), &license);
|
||||||
builder.install(&etc.join("gfx/rust-logo.png"), &pkg.join("res"), 0o644);
|
builder.install(&etc.join("gfx/rust-logo.png"), &pkg.join("res"), 0o644);
|
||||||
let mut cmd = BootstrapCommand::new("productbuild");
|
let mut cmd = command("productbuild");
|
||||||
cmd.arg("--distribution")
|
cmd.arg("--distribution")
|
||||||
.arg(xform(&etc.join("pkg/Distribution.xml")))
|
.arg(xform(&etc.join("pkg/Distribution.xml")))
|
||||||
.arg("--resources")
|
.arg("--resources")
|
||||||
|
@ -1703,7 +1703,7 @@ impl Step for Extended {
|
||||||
let light = wix.join("bin/light.exe");
|
let light = wix.join("bin/light.exe");
|
||||||
|
|
||||||
let heat_flags = ["-nologo", "-gg", "-sfrag", "-srd", "-sreg"];
|
let heat_flags = ["-nologo", "-gg", "-sfrag", "-srd", "-sreg"];
|
||||||
BootstrapCommand::new(&heat)
|
command(&heat)
|
||||||
.current_dir(&exe)
|
.current_dir(&exe)
|
||||||
.arg("dir")
|
.arg("dir")
|
||||||
.arg("rustc")
|
.arg("rustc")
|
||||||
|
@ -1718,7 +1718,7 @@ impl Step for Extended {
|
||||||
.arg(exe.join("RustcGroup.wxs"))
|
.arg(exe.join("RustcGroup.wxs"))
|
||||||
.run(builder);
|
.run(builder);
|
||||||
if built_tools.contains("rust-docs") {
|
if built_tools.contains("rust-docs") {
|
||||||
BootstrapCommand::new(&heat)
|
command(&heat)
|
||||||
.current_dir(&exe)
|
.current_dir(&exe)
|
||||||
.arg("dir")
|
.arg("dir")
|
||||||
.arg("rust-docs")
|
.arg("rust-docs")
|
||||||
|
@ -1735,7 +1735,7 @@ impl Step for Extended {
|
||||||
.arg(etc.join("msi/squash-components.xsl"))
|
.arg(etc.join("msi/squash-components.xsl"))
|
||||||
.run(builder);
|
.run(builder);
|
||||||
}
|
}
|
||||||
BootstrapCommand::new(&heat)
|
command(&heat)
|
||||||
.current_dir(&exe)
|
.current_dir(&exe)
|
||||||
.arg("dir")
|
.arg("dir")
|
||||||
.arg("cargo")
|
.arg("cargo")
|
||||||
|
@ -1751,7 +1751,7 @@ impl Step for Extended {
|
||||||
.arg("-t")
|
.arg("-t")
|
||||||
.arg(etc.join("msi/remove-duplicates.xsl"))
|
.arg(etc.join("msi/remove-duplicates.xsl"))
|
||||||
.run(builder);
|
.run(builder);
|
||||||
BootstrapCommand::new(&heat)
|
command(&heat)
|
||||||
.current_dir(&exe)
|
.current_dir(&exe)
|
||||||
.arg("dir")
|
.arg("dir")
|
||||||
.arg("rust-std")
|
.arg("rust-std")
|
||||||
|
@ -1766,7 +1766,7 @@ impl Step for Extended {
|
||||||
.arg(exe.join("StdGroup.wxs"))
|
.arg(exe.join("StdGroup.wxs"))
|
||||||
.run(builder);
|
.run(builder);
|
||||||
if built_tools.contains("rust-analyzer") {
|
if built_tools.contains("rust-analyzer") {
|
||||||
BootstrapCommand::new(&heat)
|
command(&heat)
|
||||||
.current_dir(&exe)
|
.current_dir(&exe)
|
||||||
.arg("dir")
|
.arg("dir")
|
||||||
.arg("rust-analyzer")
|
.arg("rust-analyzer")
|
||||||
|
@ -1784,7 +1784,7 @@ impl Step for Extended {
|
||||||
.run(builder);
|
.run(builder);
|
||||||
}
|
}
|
||||||
if built_tools.contains("clippy") {
|
if built_tools.contains("clippy") {
|
||||||
BootstrapCommand::new(&heat)
|
command(&heat)
|
||||||
.current_dir(&exe)
|
.current_dir(&exe)
|
||||||
.arg("dir")
|
.arg("dir")
|
||||||
.arg("clippy")
|
.arg("clippy")
|
||||||
|
@ -1802,7 +1802,7 @@ impl Step for Extended {
|
||||||
.run(builder);
|
.run(builder);
|
||||||
}
|
}
|
||||||
if built_tools.contains("miri") {
|
if built_tools.contains("miri") {
|
||||||
BootstrapCommand::new(&heat)
|
command(&heat)
|
||||||
.current_dir(&exe)
|
.current_dir(&exe)
|
||||||
.arg("dir")
|
.arg("dir")
|
||||||
.arg("miri")
|
.arg("miri")
|
||||||
|
@ -1819,7 +1819,7 @@ impl Step for Extended {
|
||||||
.arg(etc.join("msi/remove-duplicates.xsl"))
|
.arg(etc.join("msi/remove-duplicates.xsl"))
|
||||||
.run(builder);
|
.run(builder);
|
||||||
}
|
}
|
||||||
BootstrapCommand::new(&heat)
|
command(&heat)
|
||||||
.current_dir(&exe)
|
.current_dir(&exe)
|
||||||
.arg("dir")
|
.arg("dir")
|
||||||
.arg("rust-analysis")
|
.arg("rust-analysis")
|
||||||
|
@ -1836,7 +1836,7 @@ impl Step for Extended {
|
||||||
.arg(etc.join("msi/remove-duplicates.xsl"))
|
.arg(etc.join("msi/remove-duplicates.xsl"))
|
||||||
.run(builder);
|
.run(builder);
|
||||||
if target.ends_with("windows-gnu") {
|
if target.ends_with("windows-gnu") {
|
||||||
BootstrapCommand::new(&heat)
|
command(&heat)
|
||||||
.current_dir(&exe)
|
.current_dir(&exe)
|
||||||
.arg("dir")
|
.arg("dir")
|
||||||
.arg("rust-mingw")
|
.arg("rust-mingw")
|
||||||
|
@ -1855,7 +1855,7 @@ impl Step for Extended {
|
||||||
let candle = |input: &Path| {
|
let candle = |input: &Path| {
|
||||||
let output = exe.join(input.file_stem().unwrap()).with_extension("wixobj");
|
let output = exe.join(input.file_stem().unwrap()).with_extension("wixobj");
|
||||||
let arch = if target.contains("x86_64") { "x64" } else { "x86" };
|
let arch = if target.contains("x86_64") { "x64" } else { "x86" };
|
||||||
let mut cmd = BootstrapCommand::new(&candle);
|
let mut cmd = command(&candle);
|
||||||
cmd.current_dir(&exe)
|
cmd.current_dir(&exe)
|
||||||
.arg("-nologo")
|
.arg("-nologo")
|
||||||
.arg("-dRustcDir=rustc")
|
.arg("-dRustcDir=rustc")
|
||||||
|
@ -1916,7 +1916,7 @@ impl Step for Extended {
|
||||||
|
|
||||||
builder.info(&format!("building `msi` installer with {light:?}"));
|
builder.info(&format!("building `msi` installer with {light:?}"));
|
||||||
let filename = format!("{}-{}.msi", pkgname(builder, "rust"), target.triple);
|
let filename = format!("{}-{}.msi", pkgname(builder, "rust"), target.triple);
|
||||||
let mut cmd = BootstrapCommand::new(&light);
|
let mut cmd = command(&light);
|
||||||
cmd.arg("-nologo")
|
cmd.arg("-nologo")
|
||||||
.arg("-ext")
|
.arg("-ext")
|
||||||
.arg("WixUIExtension")
|
.arg("WixUIExtension")
|
||||||
|
@ -2069,7 +2069,7 @@ fn maybe_install_llvm(
|
||||||
} else if let llvm::LlvmBuildStatus::AlreadyBuilt(llvm::LlvmResult { llvm_config, .. }) =
|
} else if let llvm::LlvmBuildStatus::AlreadyBuilt(llvm::LlvmResult { llvm_config, .. }) =
|
||||||
llvm::prebuilt_llvm_config(builder, target)
|
llvm::prebuilt_llvm_config(builder, target)
|
||||||
{
|
{
|
||||||
let mut cmd = BootstrapCommand::new(llvm_config);
|
let mut cmd = command(llvm_config);
|
||||||
cmd.arg("--libfiles");
|
cmd.arg("--libfiles");
|
||||||
builder.verbose(|| println!("running {cmd:?}"));
|
builder.verbose(|| println!("running {cmd:?}"));
|
||||||
let files = if builder.config.dry_run() {
|
let files = if builder.config.dry_run() {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//! Runs rustfmt on the repository.
|
//! Runs rustfmt on the repository.
|
||||||
|
|
||||||
use crate::core::builder::Builder;
|
use crate::core::builder::Builder;
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::command;
|
||||||
use crate::utils::helpers::{self, program_out_of_date, t};
|
use crate::utils::helpers::{self, program_out_of_date, t};
|
||||||
use build_helper::ci::CiEnv;
|
use build_helper::ci::CiEnv;
|
||||||
use build_helper::git::get_git_modified_files;
|
use build_helper::git::get_git_modified_files;
|
||||||
|
@ -54,7 +54,7 @@ fn rustfmt(src: &Path, rustfmt: &Path, paths: &[PathBuf], check: bool) -> impl F
|
||||||
fn get_rustfmt_version(build: &Builder<'_>) -> Option<(String, PathBuf)> {
|
fn get_rustfmt_version(build: &Builder<'_>) -> Option<(String, PathBuf)> {
|
||||||
let stamp_file = build.out.join("rustfmt.stamp");
|
let stamp_file = build.out.join("rustfmt.stamp");
|
||||||
|
|
||||||
let mut cmd = BootstrapCommand::new(match build.initial_rustfmt() {
|
let mut cmd = command(match build.initial_rustfmt() {
|
||||||
Some(p) => p,
|
Some(p) => p,
|
||||||
None => return None,
|
None => return None,
|
||||||
});
|
});
|
||||||
|
|
|
@ -10,7 +10,7 @@ use std::path::{Component, Path, PathBuf};
|
||||||
use crate::core::build_steps::dist;
|
use crate::core::build_steps::dist;
|
||||||
use crate::core::builder::{Builder, RunConfig, ShouldRun, Step};
|
use crate::core::builder::{Builder, RunConfig, ShouldRun, Step};
|
||||||
use crate::core::config::{Config, TargetSelection};
|
use crate::core::config::{Config, TargetSelection};
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::command;
|
||||||
use crate::utils::helpers::t;
|
use crate::utils::helpers::t;
|
||||||
use crate::utils::tarball::GeneratedTarball;
|
use crate::utils::tarball::GeneratedTarball;
|
||||||
use crate::{Compiler, Kind};
|
use crate::{Compiler, Kind};
|
||||||
|
@ -102,7 +102,7 @@ fn install_sh(
|
||||||
let empty_dir = builder.out.join("tmp/empty_dir");
|
let empty_dir = builder.out.join("tmp/empty_dir");
|
||||||
t!(fs::create_dir_all(&empty_dir));
|
t!(fs::create_dir_all(&empty_dir));
|
||||||
|
|
||||||
let mut cmd = BootstrapCommand::new(SHELL);
|
let mut cmd = command(SHELL);
|
||||||
cmd.current_dir(&empty_dir)
|
cmd.current_dir(&empty_dir)
|
||||||
.arg(sanitize_sh(&tarball.decompressed_output().join("install.sh")))
|
.arg(sanitize_sh(&tarball.decompressed_output().join("install.sh")))
|
||||||
.arg(format!("--prefix={}", prepare_dir(&destdir_env, prefix)))
|
.arg(format!("--prefix={}", prepare_dir(&destdir_env, prefix)))
|
||||||
|
|
|
@ -24,7 +24,7 @@ use crate::utils::helpers::{
|
||||||
};
|
};
|
||||||
use crate::{generate_smart_stamp_hash, CLang, GitRepo, Kind};
|
use crate::{generate_smart_stamp_hash, CLang, GitRepo, Kind};
|
||||||
|
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::command;
|
||||||
use build_helper::ci::CiEnv;
|
use build_helper::ci::CiEnv;
|
||||||
use build_helper::git::get_git_merge_base;
|
use build_helper::git::get_git_merge_base;
|
||||||
|
|
||||||
|
@ -478,11 +478,8 @@ impl Step for Llvm {
|
||||||
let LlvmResult { llvm_config, .. } =
|
let LlvmResult { llvm_config, .. } =
|
||||||
builder.ensure(Llvm { target: builder.config.build });
|
builder.ensure(Llvm { target: builder.config.build });
|
||||||
if !builder.config.dry_run() {
|
if !builder.config.dry_run() {
|
||||||
let llvm_bindir = BootstrapCommand::new(&llvm_config)
|
let llvm_bindir =
|
||||||
.capture_stdout()
|
command(&llvm_config).capture_stdout().arg("--bindir").run(builder).stdout();
|
||||||
.arg("--bindir")
|
|
||||||
.run(builder)
|
|
||||||
.stdout();
|
|
||||||
let host_bin = Path::new(llvm_bindir.trim());
|
let host_bin = Path::new(llvm_bindir.trim());
|
||||||
cfg.define(
|
cfg.define(
|
||||||
"LLVM_TABLEGEN",
|
"LLVM_TABLEGEN",
|
||||||
|
@ -532,11 +529,8 @@ impl Step for Llvm {
|
||||||
|
|
||||||
// Helper to find the name of LLVM's shared library on darwin and linux.
|
// Helper to find the name of LLVM's shared library on darwin and linux.
|
||||||
let find_llvm_lib_name = |extension| {
|
let find_llvm_lib_name = |extension| {
|
||||||
let version = BootstrapCommand::new(&res.llvm_config)
|
let version =
|
||||||
.capture_stdout()
|
command(&res.llvm_config).capture_stdout().arg("--version").run(builder).stdout();
|
||||||
.arg("--version")
|
|
||||||
.run(builder)
|
|
||||||
.stdout();
|
|
||||||
let major = version.split('.').next().unwrap();
|
let major = version.split('.').next().unwrap();
|
||||||
|
|
||||||
match &llvm_version_suffix {
|
match &llvm_version_suffix {
|
||||||
|
@ -592,8 +586,7 @@ fn check_llvm_version(builder: &Builder<'_>, llvm_config: &Path) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let version =
|
let version = command(llvm_config).capture_stdout().arg("--version").run(builder).stdout();
|
||||||
BootstrapCommand::new(llvm_config).capture_stdout().arg("--version").run(builder).stdout();
|
|
||||||
let mut parts = version.split('.').take(2).filter_map(|s| s.parse::<u32>().ok());
|
let mut parts = version.split('.').take(2).filter_map(|s| s.parse::<u32>().ok());
|
||||||
if let (Some(major), Some(_minor)) = (parts.next(), parts.next()) {
|
if let (Some(major), Some(_minor)) = (parts.next(), parts.next()) {
|
||||||
if major >= 17 {
|
if major >= 17 {
|
||||||
|
|
|
@ -11,7 +11,7 @@ use crate::core::build_steps::tool::{self, SourceType, Tool};
|
||||||
use crate::core::builder::{Builder, RunConfig, ShouldRun, Step};
|
use crate::core::builder::{Builder, RunConfig, ShouldRun, Step};
|
||||||
use crate::core::config::flags::get_completion;
|
use crate::core::config::flags::get_completion;
|
||||||
use crate::core::config::TargetSelection;
|
use crate::core::config::TargetSelection;
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::command;
|
||||||
use crate::Mode;
|
use crate::Mode;
|
||||||
|
|
||||||
#[derive(Debug, PartialOrd, Ord, Clone, Hash, PartialEq, Eq)]
|
#[derive(Debug, PartialOrd, Ord, Clone, Hash, PartialEq, Eq)]
|
||||||
|
@ -40,8 +40,7 @@ impl Step for BuildManifest {
|
||||||
panic!("\n\nfailed to specify `dist.upload-addr` in `config.toml`\n\n")
|
panic!("\n\nfailed to specify `dist.upload-addr` in `config.toml`\n\n")
|
||||||
});
|
});
|
||||||
|
|
||||||
let today =
|
let today = command("date").capture_stdout().arg("+%Y-%m-%d").run(builder).stdout();
|
||||||
BootstrapCommand::new("date").capture_stdout().arg("+%Y-%m-%d").run(builder).stdout();
|
|
||||||
|
|
||||||
cmd.arg(sign);
|
cmd.arg(sign);
|
||||||
cmd.arg(distdir(builder));
|
cmd.arg(distdir(builder));
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
use crate::core::builder::{Builder, ShouldRun, Step};
|
use crate::core::builder::{Builder, ShouldRun, Step};
|
||||||
use crate::core::config::TargetSelection;
|
use crate::core::config::TargetSelection;
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::command;
|
||||||
use crate::Compiler;
|
use crate::Compiler;
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
|
@ -56,7 +56,7 @@ fn create_synthetic_target(
|
||||||
return TargetSelection::create_synthetic(&name, path.to_str().unwrap());
|
return TargetSelection::create_synthetic(&name, path.to_str().unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut cmd = BootstrapCommand::new(builder.rustc(compiler));
|
let mut cmd = command(builder.rustc(compiler));
|
||||||
cmd.arg("--target").arg(base.rustc_target_arg());
|
cmd.arg("--target").arg(base.rustc_target_arg());
|
||||||
cmd.args(["-Zunstable-options", "--print", "target-spec-json"]);
|
cmd.args(["-Zunstable-options", "--print", "target-spec-json"]);
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ use crate::core::builder::{Builder, Compiler, Kind, RunConfig, ShouldRun, Step};
|
||||||
use crate::core::config::flags::get_completion;
|
use crate::core::config::flags::get_completion;
|
||||||
use crate::core::config::flags::Subcommand;
|
use crate::core::config::flags::Subcommand;
|
||||||
use crate::core::config::TargetSelection;
|
use crate::core::config::TargetSelection;
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::{command, BootstrapCommand};
|
||||||
use crate::utils::helpers::{
|
use crate::utils::helpers::{
|
||||||
self, add_link_lib_path, add_rustdoc_cargo_linker_args, dylib_path, dylib_path_var,
|
self, add_link_lib_path, add_rustdoc_cargo_linker_args, dylib_path, dylib_path_var,
|
||||||
linker_args, linker_flags, t, target_supports_cranelift_backend, up_to_date, LldThreads,
|
linker_args, linker_flags, t, target_supports_cranelift_backend, up_to_date, LldThreads,
|
||||||
|
@ -834,7 +834,7 @@ impl Step for RustdocJSStd {
|
||||||
fn run(self, builder: &Builder<'_>) {
|
fn run(self, builder: &Builder<'_>) {
|
||||||
let nodejs =
|
let nodejs =
|
||||||
builder.config.nodejs.as_ref().expect("need nodejs to run rustdoc-js-std tests");
|
builder.config.nodejs.as_ref().expect("need nodejs to run rustdoc-js-std tests");
|
||||||
let mut command = BootstrapCommand::new(nodejs);
|
let mut command = command(nodejs);
|
||||||
command
|
command
|
||||||
.arg(builder.src.join("src/tools/rustdoc-js/tester.js"))
|
.arg(builder.src.join("src/tools/rustdoc-js/tester.js"))
|
||||||
.arg("--crate-name")
|
.arg("--crate-name")
|
||||||
|
@ -910,7 +910,7 @@ fn get_browser_ui_test_version_inner(
|
||||||
npm: &Path,
|
npm: &Path,
|
||||||
global: bool,
|
global: bool,
|
||||||
) -> Option<String> {
|
) -> Option<String> {
|
||||||
let mut command = BootstrapCommand::new(npm).capture();
|
let mut command = command(npm).capture();
|
||||||
command.arg("list").arg("--parseable").arg("--long").arg("--depth=0");
|
command.arg("list").arg("--parseable").arg("--long").arg("--depth=0");
|
||||||
if global {
|
if global {
|
||||||
command.arg("--global");
|
command.arg("--global");
|
||||||
|
@ -1806,7 +1806,7 @@ NOTE: if you're sure you want to do this, please open an issue as to why. In the
|
||||||
}
|
}
|
||||||
|
|
||||||
let lldb_exe = builder.config.lldb.clone().unwrap_or_else(|| PathBuf::from("lldb"));
|
let lldb_exe = builder.config.lldb.clone().unwrap_or_else(|| PathBuf::from("lldb"));
|
||||||
let lldb_version = BootstrapCommand::new(&lldb_exe)
|
let lldb_version = command(&lldb_exe)
|
||||||
.capture()
|
.capture()
|
||||||
.allow_failure()
|
.allow_failure()
|
||||||
.arg("--version")
|
.arg("--version")
|
||||||
|
@ -1815,7 +1815,7 @@ NOTE: if you're sure you want to do this, please open an issue as to why. In the
|
||||||
.and_then(|v| if v.trim().is_empty() { None } else { Some(v) });
|
.and_then(|v| if v.trim().is_empty() { None } else { Some(v) });
|
||||||
if let Some(ref vers) = lldb_version {
|
if let Some(ref vers) = lldb_version {
|
||||||
cmd.arg("--lldb-version").arg(vers);
|
cmd.arg("--lldb-version").arg(vers);
|
||||||
let lldb_python_dir = BootstrapCommand::new(&lldb_exe)
|
let lldb_python_dir = command(&lldb_exe)
|
||||||
.allow_failure()
|
.allow_failure()
|
||||||
.capture_stdout()
|
.capture_stdout()
|
||||||
.arg("-P")
|
.arg("-P")
|
||||||
|
@ -1877,11 +1877,10 @@ NOTE: if you're sure you want to do this, please open an issue as to why. In the
|
||||||
let llvm::LlvmResult { llvm_config, .. } =
|
let llvm::LlvmResult { llvm_config, .. } =
|
||||||
builder.ensure(llvm::Llvm { target: builder.config.build });
|
builder.ensure(llvm::Llvm { target: builder.config.build });
|
||||||
if !builder.config.dry_run() {
|
if !builder.config.dry_run() {
|
||||||
let llvm_version = builder
|
let llvm_version =
|
||||||
.run(BootstrapCommand::new(&llvm_config).capture_stdout().arg("--version"))
|
builder.run(command(&llvm_config).capture_stdout().arg("--version")).stdout();
|
||||||
.stdout();
|
|
||||||
let llvm_components = builder
|
let llvm_components = builder
|
||||||
.run(BootstrapCommand::new(&llvm_config).capture_stdout().arg("--components"))
|
.run(command(&llvm_config).capture_stdout().arg("--components"))
|
||||||
.stdout();
|
.stdout();
|
||||||
// Remove trailing newline from llvm-config output.
|
// Remove trailing newline from llvm-config output.
|
||||||
cmd.arg("--llvm-version")
|
cmd.arg("--llvm-version")
|
||||||
|
@ -1901,9 +1900,8 @@ NOTE: if you're sure you want to do this, please open an issue as to why. In the
|
||||||
// separate compilations. We can add LLVM's library path to the
|
// separate compilations. We can add LLVM's library path to the
|
||||||
// platform-specific environment variable as a workaround.
|
// platform-specific environment variable as a workaround.
|
||||||
if !builder.config.dry_run() && suite.ends_with("fulldeps") {
|
if !builder.config.dry_run() && suite.ends_with("fulldeps") {
|
||||||
let llvm_libdir = builder
|
let llvm_libdir =
|
||||||
.run(BootstrapCommand::new(&llvm_config).capture_stdout().arg("--libdir"))
|
builder.run(command(&llvm_config).capture_stdout().arg("--libdir")).stdout();
|
||||||
.stdout();
|
|
||||||
add_link_lib_path(vec![llvm_libdir.trim().into()], &mut cmd);
|
add_link_lib_path(vec![llvm_libdir.trim().into()], &mut cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2873,7 +2871,7 @@ impl Step for RemoteCopyLibs {
|
||||||
|
|
||||||
// Spawn the emulator and wait for it to come online
|
// Spawn the emulator and wait for it to come online
|
||||||
let tool = builder.tool_exe(Tool::RemoteTestClient);
|
let tool = builder.tool_exe(Tool::RemoteTestClient);
|
||||||
let mut cmd = BootstrapCommand::new(&tool);
|
let mut cmd = command(&tool);
|
||||||
cmd.arg("spawn-emulator").arg(target.triple).arg(&server).arg(builder.tempdir());
|
cmd.arg("spawn-emulator").arg(target.triple).arg(&server).arg(builder.tempdir());
|
||||||
if let Some(rootfs) = builder.qemu_rootfs(target) {
|
if let Some(rootfs) = builder.qemu_rootfs(target) {
|
||||||
cmd.arg(rootfs);
|
cmd.arg(rootfs);
|
||||||
|
@ -2885,7 +2883,7 @@ impl Step for RemoteCopyLibs {
|
||||||
let f = t!(f);
|
let f = t!(f);
|
||||||
let name = f.file_name().into_string().unwrap();
|
let name = f.file_name().into_string().unwrap();
|
||||||
if helpers::is_dylib(&name) {
|
if helpers::is_dylib(&name) {
|
||||||
builder.run(BootstrapCommand::new(&tool).arg("push").arg(f.path()));
|
builder.run(command(&tool).arg("push").arg(f.path()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2916,22 +2914,20 @@ impl Step for Distcheck {
|
||||||
builder.ensure(dist::PlainSourceTarball);
|
builder.ensure(dist::PlainSourceTarball);
|
||||||
builder.ensure(dist::Src);
|
builder.ensure(dist::Src);
|
||||||
|
|
||||||
let mut cmd = BootstrapCommand::new("tar");
|
let mut cmd = command("tar");
|
||||||
cmd.arg("-xf")
|
cmd.arg("-xf")
|
||||||
.arg(builder.ensure(dist::PlainSourceTarball).tarball())
|
.arg(builder.ensure(dist::PlainSourceTarball).tarball())
|
||||||
.arg("--strip-components=1")
|
.arg("--strip-components=1")
|
||||||
.current_dir(&dir);
|
.current_dir(&dir);
|
||||||
cmd.run(builder);
|
cmd.run(builder);
|
||||||
builder.run(
|
builder.run(
|
||||||
BootstrapCommand::new("./configure")
|
command("./configure")
|
||||||
.args(&builder.config.configure_args)
|
.args(&builder.config.configure_args)
|
||||||
.arg("--enable-vendor")
|
.arg("--enable-vendor")
|
||||||
.current_dir(&dir),
|
.current_dir(&dir),
|
||||||
);
|
);
|
||||||
builder.run(
|
builder.run(
|
||||||
BootstrapCommand::new(helpers::make(&builder.config.build.triple))
|
command(helpers::make(&builder.config.build.triple)).arg("check").current_dir(&dir),
|
||||||
.arg("check")
|
|
||||||
.current_dir(&dir),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Now make sure that rust-src has all of libstd's dependencies
|
// Now make sure that rust-src has all of libstd's dependencies
|
||||||
|
@ -2940,7 +2936,7 @@ impl Step for Distcheck {
|
||||||
let _ = fs::remove_dir_all(&dir);
|
let _ = fs::remove_dir_all(&dir);
|
||||||
t!(fs::create_dir_all(&dir));
|
t!(fs::create_dir_all(&dir));
|
||||||
|
|
||||||
let mut cmd = BootstrapCommand::new("tar");
|
let mut cmd = command("tar");
|
||||||
cmd.arg("-xf")
|
cmd.arg("-xf")
|
||||||
.arg(builder.ensure(dist::Src).tarball())
|
.arg(builder.ensure(dist::Src).tarball())
|
||||||
.arg("--strip-components=1")
|
.arg("--strip-components=1")
|
||||||
|
@ -2949,7 +2945,7 @@ impl Step for Distcheck {
|
||||||
|
|
||||||
let toml = dir.join("rust-src/lib/rustlib/src/rust/library/std/Cargo.toml");
|
let toml = dir.join("rust-src/lib/rustlib/src/rust/library/std/Cargo.toml");
|
||||||
builder.run(
|
builder.run(
|
||||||
BootstrapCommand::new(&builder.initial_cargo)
|
command(&builder.initial_cargo)
|
||||||
// Will read the libstd Cargo.toml
|
// Will read the libstd Cargo.toml
|
||||||
// which uses the unstable `public-dependency` feature.
|
// which uses the unstable `public-dependency` feature.
|
||||||
.env("RUSTC_BOOTSTRAP", "1")
|
.env("RUSTC_BOOTSTRAP", "1")
|
||||||
|
@ -2978,7 +2974,7 @@ impl Step for Bootstrap {
|
||||||
// Some tests require cargo submodule to be present.
|
// Some tests require cargo submodule to be present.
|
||||||
builder.build.update_submodule(Path::new("src/tools/cargo"));
|
builder.build.update_submodule(Path::new("src/tools/cargo"));
|
||||||
|
|
||||||
let mut check_bootstrap = BootstrapCommand::new(builder.python());
|
let mut check_bootstrap = command(builder.python());
|
||||||
check_bootstrap
|
check_bootstrap
|
||||||
.args(["-m", "unittest", "bootstrap_test.py"])
|
.args(["-m", "unittest", "bootstrap_test.py"])
|
||||||
.env("BUILD_DIR", &builder.out)
|
.env("BUILD_DIR", &builder.out)
|
||||||
|
@ -2988,7 +2984,7 @@ impl Step for Bootstrap {
|
||||||
// Use `python -m unittest` manually if you want to pass arguments.
|
// Use `python -m unittest` manually if you want to pass arguments.
|
||||||
check_bootstrap.delay_failure().run(builder);
|
check_bootstrap.delay_failure().run(builder);
|
||||||
|
|
||||||
let mut cmd = BootstrapCommand::new(&builder.initial_cargo);
|
let mut cmd = command(&builder.initial_cargo);
|
||||||
cmd.arg("test")
|
cmd.arg("test")
|
||||||
.args(["--features", "bootstrap-self-test"])
|
.args(["--features", "bootstrap-self-test"])
|
||||||
.current_dir(builder.src.join("src/bootstrap"))
|
.current_dir(builder.src.join("src/bootstrap"))
|
||||||
|
@ -3139,7 +3135,7 @@ impl Step for RustInstaller {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut cmd = BootstrapCommand::new(builder.src.join("src/tools/rust-installer/test.sh"));
|
let mut cmd = command(builder.src.join("src/tools/rust-installer/test.sh"));
|
||||||
let tmpdir = testdir(builder, compiler.host).join("rust-installer");
|
let tmpdir = testdir(builder, compiler.host).join("rust-installer");
|
||||||
let _ = std::fs::remove_dir_all(&tmpdir);
|
let _ = std::fs::remove_dir_all(&tmpdir);
|
||||||
let _ = std::fs::create_dir_all(&tmpdir);
|
let _ = std::fs::create_dir_all(&tmpdir);
|
||||||
|
|
|
@ -8,7 +8,7 @@ use crate::core::builder;
|
||||||
use crate::core::builder::{Builder, Cargo as CargoCommand, RunConfig, ShouldRun, Step};
|
use crate::core::builder::{Builder, Cargo as CargoCommand, RunConfig, ShouldRun, Step};
|
||||||
use crate::core::config::TargetSelection;
|
use crate::core::config::TargetSelection;
|
||||||
use crate::utils::channel::GitInfo;
|
use crate::utils::channel::GitInfo;
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::{command, BootstrapCommand};
|
||||||
use crate::utils::helpers::{add_dylib_path, exe, t};
|
use crate::utils::helpers::{add_dylib_path, exe, t};
|
||||||
use crate::Compiler;
|
use crate::Compiler;
|
||||||
use crate::Mode;
|
use crate::Mode;
|
||||||
|
@ -438,7 +438,7 @@ impl ErrorIndex {
|
||||||
// for rustc_private and libLLVM.so, and `sysroot_lib` for libstd, etc.
|
// for rustc_private and libLLVM.so, and `sysroot_lib` for libstd, etc.
|
||||||
let host = builder.config.build;
|
let host = builder.config.build;
|
||||||
let compiler = builder.compiler_for(builder.top_stage, host, host);
|
let compiler = builder.compiler_for(builder.top_stage, host, host);
|
||||||
let mut cmd = BootstrapCommand::new(builder.ensure(ErrorIndex { compiler }));
|
let mut cmd = command(builder.ensure(ErrorIndex { compiler }));
|
||||||
let mut dylib_paths = builder.rustc_lib_paths(compiler);
|
let mut dylib_paths = builder.rustc_lib_paths(compiler);
|
||||||
dylib_paths.push(PathBuf::from(&builder.sysroot_libdir(compiler, compiler.host)));
|
dylib_paths.push(PathBuf::from(&builder.sysroot_libdir(compiler, compiler.host)));
|
||||||
add_dylib_path(dylib_paths, &mut cmd);
|
add_dylib_path(dylib_paths, &mut cmd);
|
||||||
|
@ -912,7 +912,7 @@ impl Step for LibcxxVersionTool {
|
||||||
}
|
}
|
||||||
|
|
||||||
let compiler = builder.cxx(self.target).unwrap();
|
let compiler = builder.cxx(self.target).unwrap();
|
||||||
let mut cmd = BootstrapCommand::new(compiler);
|
let mut cmd = command(compiler);
|
||||||
|
|
||||||
cmd.arg("-o")
|
cmd.arg("-o")
|
||||||
.arg(&executable)
|
.arg(&executable)
|
||||||
|
@ -925,8 +925,7 @@ impl Step for LibcxxVersionTool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let version_output =
|
let version_output = command(executable).capture_stdout().run(builder).stdout();
|
||||||
BootstrapCommand::new(executable).capture_stdout().run(builder).stdout();
|
|
||||||
|
|
||||||
let version_str = version_output.split_once("version:").unwrap().1;
|
let version_str = version_output.split_once("version:").unwrap().1;
|
||||||
let version = version_str.trim().parse::<usize>().unwrap();
|
let version = version_str.trim().parse::<usize>().unwrap();
|
||||||
|
@ -1050,7 +1049,7 @@ impl<'a> Builder<'a> {
|
||||||
/// Gets a `BootstrapCommand` which is ready to run `tool` in `stage` built for
|
/// Gets a `BootstrapCommand` which is ready to run `tool` in `stage` built for
|
||||||
/// `host`.
|
/// `host`.
|
||||||
pub fn tool_cmd(&self, tool: Tool) -> BootstrapCommand {
|
pub fn tool_cmd(&self, tool: Tool) -> BootstrapCommand {
|
||||||
let mut cmd = BootstrapCommand::new(self.tool_exe(tool));
|
let mut cmd = command(self.tool_exe(tool));
|
||||||
let compiler = self.compiler(0, self.config.build);
|
let compiler = self.compiler(0, self.config.build);
|
||||||
let host = &compiler.host;
|
let host = &compiler.host;
|
||||||
// Prepares the `cmd` provided to be able to run the `compiler` provided.
|
// Prepares the `cmd` provided to be able to run the `compiler` provided.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use crate::core::builder::{Builder, RunConfig, ShouldRun, Step};
|
use crate::core::builder::{Builder, RunConfig, ShouldRun, Step};
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::command;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
|
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
|
||||||
|
@ -27,7 +27,7 @@ impl Step for Vendor {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn run(self, builder: &Builder<'_>) -> Self::Output {
|
fn run(self, builder: &Builder<'_>) -> Self::Output {
|
||||||
let mut cmd = BootstrapCommand::new(&builder.initial_cargo);
|
let mut cmd = command(&builder.initial_cargo);
|
||||||
cmd.arg("vendor");
|
cmd.arg("vendor");
|
||||||
|
|
||||||
if self.versioned_dirs {
|
if self.versioned_dirs {
|
||||||
|
|
|
@ -23,7 +23,7 @@ use crate::utils::helpers::{check_cfg_arg, libdir, linker_flags, t, LldThreads};
|
||||||
use crate::EXTRA_CHECK_CFGS;
|
use crate::EXTRA_CHECK_CFGS;
|
||||||
use crate::{Build, CLang, Crate, DocTests, GitRepo, Mode};
|
use crate::{Build, CLang, Crate, DocTests, GitRepo, Mode};
|
||||||
|
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::{command, BootstrapCommand};
|
||||||
pub use crate::Compiler;
|
pub use crate::Compiler;
|
||||||
|
|
||||||
use clap::ValueEnum;
|
use clap::ValueEnum;
|
||||||
|
@ -1254,7 +1254,7 @@ impl<'a> Builder<'a> {
|
||||||
if run_compiler.stage == 0 {
|
if run_compiler.stage == 0 {
|
||||||
// `ensure(Clippy { stage: 0 })` *builds* clippy with stage0, it doesn't use the beta clippy.
|
// `ensure(Clippy { stage: 0 })` *builds* clippy with stage0, it doesn't use the beta clippy.
|
||||||
let cargo_clippy = self.build.config.download_clippy();
|
let cargo_clippy = self.build.config.download_clippy();
|
||||||
let mut cmd = BootstrapCommand::new(cargo_clippy);
|
let mut cmd = command(cargo_clippy);
|
||||||
cmd.env("CARGO", &self.initial_cargo);
|
cmd.env("CARGO", &self.initial_cargo);
|
||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
|
@ -1273,7 +1273,7 @@ impl<'a> Builder<'a> {
|
||||||
let mut dylib_path = helpers::dylib_path();
|
let mut dylib_path = helpers::dylib_path();
|
||||||
dylib_path.insert(0, self.sysroot(run_compiler).join("lib"));
|
dylib_path.insert(0, self.sysroot(run_compiler).join("lib"));
|
||||||
|
|
||||||
let mut cmd = BootstrapCommand::new(cargo_clippy);
|
let mut cmd = command(cargo_clippy);
|
||||||
cmd.env(helpers::dylib_path_var(), env::join_paths(&dylib_path).unwrap());
|
cmd.env(helpers::dylib_path_var(), env::join_paths(&dylib_path).unwrap());
|
||||||
cmd.env("CARGO", &self.initial_cargo);
|
cmd.env("CARGO", &self.initial_cargo);
|
||||||
cmd
|
cmd
|
||||||
|
@ -1295,7 +1295,7 @@ impl<'a> Builder<'a> {
|
||||||
extra_features: Vec::new(),
|
extra_features: Vec::new(),
|
||||||
});
|
});
|
||||||
// Invoke cargo-miri, make sure it can find miri and cargo.
|
// Invoke cargo-miri, make sure it can find miri and cargo.
|
||||||
let mut cmd = BootstrapCommand::new(cargo_miri);
|
let mut cmd = command(cargo_miri);
|
||||||
cmd.env("MIRI", &miri);
|
cmd.env("MIRI", &miri);
|
||||||
cmd.env("CARGO", &self.initial_cargo);
|
cmd.env("CARGO", &self.initial_cargo);
|
||||||
// Need to add the `run_compiler` libs. Those are the libs produces *by* `build_compiler`,
|
// Need to add the `run_compiler` libs. Those are the libs produces *by* `build_compiler`,
|
||||||
|
@ -1311,7 +1311,7 @@ impl<'a> Builder<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn rustdoc_cmd(&self, compiler: Compiler) -> BootstrapCommand {
|
pub fn rustdoc_cmd(&self, compiler: Compiler) -> BootstrapCommand {
|
||||||
let mut cmd = BootstrapCommand::new(self.bootstrap_out.join("rustdoc"));
|
let mut cmd = command(self.bootstrap_out.join("rustdoc"));
|
||||||
cmd.env("RUSTC_STAGE", compiler.stage.to_string())
|
cmd.env("RUSTC_STAGE", compiler.stage.to_string())
|
||||||
.env("RUSTC_SYSROOT", self.sysroot(compiler))
|
.env("RUSTC_SYSROOT", self.sysroot(compiler))
|
||||||
// Note that this is *not* the sysroot_libdir because rustdoc must be linked
|
// Note that this is *not* the sysroot_libdir because rustdoc must be linked
|
||||||
|
@ -1365,7 +1365,7 @@ impl<'a> Builder<'a> {
|
||||||
cargo = self.cargo_miri_cmd(compiler);
|
cargo = self.cargo_miri_cmd(compiler);
|
||||||
cargo.arg("miri").arg(subcmd);
|
cargo.arg("miri").arg(subcmd);
|
||||||
} else {
|
} else {
|
||||||
cargo = BootstrapCommand::new(&self.initial_cargo);
|
cargo = command(&self.initial_cargo);
|
||||||
cargo.arg(cmd);
|
cargo.arg(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1918,11 +1918,8 @@ impl<'a> Builder<'a> {
|
||||||
// platform-specific environment variable as a workaround.
|
// platform-specific environment variable as a workaround.
|
||||||
if mode == Mode::ToolRustc || mode == Mode::Codegen {
|
if mode == Mode::ToolRustc || mode == Mode::Codegen {
|
||||||
if let Some(llvm_config) = self.llvm_config(target) {
|
if let Some(llvm_config) = self.llvm_config(target) {
|
||||||
let llvm_libdir = BootstrapCommand::new(llvm_config)
|
let llvm_libdir =
|
||||||
.capture_stdout()
|
command(llvm_config).capture_stdout().arg("--libdir").run(self).stdout();
|
||||||
.arg("--libdir")
|
|
||||||
.run(self)
|
|
||||||
.stdout();
|
|
||||||
add_link_lib_path(vec![llvm_libdir.trim().into()], &mut cargo);
|
add_link_lib_path(vec![llvm_libdir.trim().into()], &mut cargo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ use std::{
|
||||||
use build_helper::ci::CiEnv;
|
use build_helper::ci::CiEnv;
|
||||||
use xz2::bufread::XzDecoder;
|
use xz2::bufread::XzDecoder;
|
||||||
|
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::{command, BootstrapCommand};
|
||||||
use crate::utils::helpers::hex_encode;
|
use crate::utils::helpers::hex_encode;
|
||||||
use crate::utils::helpers::{check_run, exe, move_file, program_out_of_date};
|
use crate::utils::helpers::{check_run, exe, move_file, program_out_of_date};
|
||||||
use crate::{t, Config};
|
use crate::{t, Config};
|
||||||
|
@ -212,7 +212,7 @@ impl Config {
|
||||||
fn download_http_with_retries(&self, tempfile: &Path, url: &str, help_on_error: &str) {
|
fn download_http_with_retries(&self, tempfile: &Path, url: &str, help_on_error: &str) {
|
||||||
println!("downloading {url}");
|
println!("downloading {url}");
|
||||||
// Try curl. If that fails and we are on windows, fallback to PowerShell.
|
// Try curl. If that fails and we are on windows, fallback to PowerShell.
|
||||||
let mut curl = BootstrapCommand::new("curl");
|
let mut curl = command("curl");
|
||||||
curl.args([
|
curl.args([
|
||||||
"-y",
|
"-y",
|
||||||
"30",
|
"30",
|
||||||
|
|
|
@ -2,7 +2,7 @@ use std::path::PathBuf;
|
||||||
|
|
||||||
use serde_derive::Deserialize;
|
use serde_derive::Deserialize;
|
||||||
|
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::command;
|
||||||
use crate::{t, Build, Crate};
|
use crate::{t, Build, Crate};
|
||||||
|
|
||||||
/// For more information, see the output of
|
/// For more information, see the output of
|
||||||
|
@ -70,7 +70,7 @@ pub fn build(build: &mut Build) {
|
||||||
/// particular crate (e.g., `x build sysroot` to build library/sysroot).
|
/// particular crate (e.g., `x build sysroot` to build library/sysroot).
|
||||||
fn workspace_members(build: &Build) -> Vec<Package> {
|
fn workspace_members(build: &Build) -> Vec<Package> {
|
||||||
let collect_metadata = |manifest_path| {
|
let collect_metadata = |manifest_path| {
|
||||||
let mut cargo = BootstrapCommand::new(&build.initial_cargo);
|
let mut cargo = command(&build.initial_cargo);
|
||||||
cargo
|
cargo
|
||||||
// Will read the libstd Cargo.toml
|
// Will read the libstd Cargo.toml
|
||||||
// which uses the unstable `public-dependency` feature.
|
// which uses the unstable `public-dependency` feature.
|
||||||
|
|
|
@ -23,7 +23,7 @@ use std::collections::HashSet;
|
||||||
|
|
||||||
use crate::builder::Kind;
|
use crate::builder::Kind;
|
||||||
use crate::core::config::Target;
|
use crate::core::config::Target;
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::command;
|
||||||
use crate::Build;
|
use crate::Build;
|
||||||
|
|
||||||
pub struct Finder {
|
pub struct Finder {
|
||||||
|
@ -209,9 +209,7 @@ than building it.
|
||||||
|
|
||||||
#[cfg(not(feature = "bootstrap-self-test"))]
|
#[cfg(not(feature = "bootstrap-self-test"))]
|
||||||
let stage0_supported_target_list: HashSet<String> = crate::utils::helpers::output(
|
let stage0_supported_target_list: HashSet<String> = crate::utils::helpers::output(
|
||||||
&mut BootstrapCommand::new(&build.config.initial_rustc)
|
&mut command(&build.config.initial_rustc).args(["--print", "target-list"]).command,
|
||||||
.args(["--print", "target-list"])
|
|
||||||
.command,
|
|
||||||
)
|
)
|
||||||
.lines()
|
.lines()
|
||||||
.map(|s| s.to_string())
|
.map(|s| s.to_string())
|
||||||
|
@ -354,8 +352,7 @@ than building it.
|
||||||
// There are three builds of cmake on windows: MSVC, MinGW, and
|
// There are three builds of cmake on windows: MSVC, MinGW, and
|
||||||
// Cygwin. The Cygwin build does not have generators for Visual
|
// Cygwin. The Cygwin build does not have generators for Visual
|
||||||
// Studio, so detect that here and error.
|
// Studio, so detect that here and error.
|
||||||
let out =
|
let out = command("cmake").capture_stdout().arg("--help").run(build).stdout();
|
||||||
BootstrapCommand::new("cmake").capture_stdout().arg("--help").run(build).stdout();
|
|
||||||
if !out.contains("Visual Studio") {
|
if !out.contains("Visual Studio") {
|
||||||
panic!(
|
panic!(
|
||||||
"
|
"
|
||||||
|
|
|
@ -41,7 +41,7 @@ use crate::core::builder::Kind;
|
||||||
use crate::core::config::{flags, LldMode};
|
use crate::core::config::{flags, LldMode};
|
||||||
use crate::core::config::{DryRun, Target};
|
use crate::core::config::{DryRun, Target};
|
||||||
use crate::core::config::{LlvmLibunwind, TargetSelection};
|
use crate::core::config::{LlvmLibunwind, TargetSelection};
|
||||||
use crate::utils::exec::{BehaviorOnFailure, BootstrapCommand, CommandOutput};
|
use crate::utils::exec::{command, BehaviorOnFailure, BootstrapCommand, CommandOutput};
|
||||||
use crate::utils::helpers::{self, dir_is_empty, exe, libdir, mtime, output, symlink_dir};
|
use crate::utils::helpers::{self, dir_is_empty, exe, libdir, mtime, output, symlink_dir};
|
||||||
|
|
||||||
mod core;
|
mod core;
|
||||||
|
@ -861,16 +861,14 @@ impl Build {
|
||||||
if let Some(s) = target_config.and_then(|c| c.llvm_filecheck.as_ref()) {
|
if let Some(s) = target_config.and_then(|c| c.llvm_filecheck.as_ref()) {
|
||||||
s.to_path_buf()
|
s.to_path_buf()
|
||||||
} else if let Some(s) = target_config.and_then(|c| c.llvm_config.as_ref()) {
|
} else if let Some(s) = target_config.and_then(|c| c.llvm_config.as_ref()) {
|
||||||
let llvm_bindir =
|
let llvm_bindir = command(s).capture_stdout().arg("--bindir").run(self).stdout();
|
||||||
BootstrapCommand::new(s).capture_stdout().arg("--bindir").run(self).stdout();
|
|
||||||
let filecheck = Path::new(llvm_bindir.trim()).join(exe("FileCheck", target));
|
let filecheck = Path::new(llvm_bindir.trim()).join(exe("FileCheck", target));
|
||||||
if filecheck.exists() {
|
if filecheck.exists() {
|
||||||
filecheck
|
filecheck
|
||||||
} else {
|
} else {
|
||||||
// On Fedora the system LLVM installs FileCheck in the
|
// On Fedora the system LLVM installs FileCheck in the
|
||||||
// llvm subdirectory of the libdir.
|
// llvm subdirectory of the libdir.
|
||||||
let llvm_libdir =
|
let llvm_libdir = command(s).capture_stdout().arg("--libdir").run(self).stdout();
|
||||||
BootstrapCommand::new(s).capture_stdout().arg("--libdir").run(self).stdout();
|
|
||||||
let lib_filecheck =
|
let lib_filecheck =
|
||||||
Path::new(llvm_libdir.trim()).join("llvm").join(exe("FileCheck", target));
|
Path::new(llvm_libdir.trim()).join("llvm").join(exe("FileCheck", target));
|
||||||
if lib_filecheck.exists() {
|
if lib_filecheck.exists() {
|
||||||
|
|
|
@ -26,7 +26,7 @@ use std::path::{Path, PathBuf};
|
||||||
use std::{env, iter};
|
use std::{env, iter};
|
||||||
|
|
||||||
use crate::core::config::TargetSelection;
|
use crate::core::config::TargetSelection;
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::{command, BootstrapCommand};
|
||||||
use crate::{Build, CLang, GitRepo};
|
use crate::{Build, CLang, GitRepo};
|
||||||
|
|
||||||
// The `cc` crate doesn't provide a way to obtain a path to the detected archiver,
|
// The `cc` crate doesn't provide a way to obtain a path to the detected archiver,
|
||||||
|
@ -190,7 +190,7 @@ fn default_compiler(
|
||||||
_ => return None,
|
_ => return None,
|
||||||
}
|
}
|
||||||
let alternative = format!("e{gnu_compiler}");
|
let alternative = format!("e{gnu_compiler}");
|
||||||
if BootstrapCommand::new(&alternative).capture().run(build).is_success() {
|
if command(&alternative).capture().run(build).is_success() {
|
||||||
Some(PathBuf::from(alternative))
|
Some(PathBuf::from(alternative))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
|
|
|
@ -162,6 +162,13 @@ enum CommandStatus {
|
||||||
DidNotStart,
|
DidNotStart,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a new BootstrapCommand. This is a helper function to make command creation
|
||||||
|
/// shorter than `BootstrapCommand::new`.
|
||||||
|
#[must_use]
|
||||||
|
pub fn command<S: AsRef<OsStr>>(program: S) -> BootstrapCommand {
|
||||||
|
BootstrapCommand::new(program)
|
||||||
|
}
|
||||||
|
|
||||||
/// Represents the output of an executed process.
|
/// Represents the output of an executed process.
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
pub struct CommandOutput {
|
pub struct CommandOutput {
|
||||||
|
|
|
@ -47,7 +47,7 @@ macro_rules! t {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
use crate::utils::exec::BootstrapCommand;
|
use crate::utils::exec::{command, BootstrapCommand};
|
||||||
pub use t;
|
pub use t;
|
||||||
|
|
||||||
pub fn exe(name: &str, target: TargetSelection) -> String {
|
pub fn exe(name: &str, target: TargetSelection) -> String {
|
||||||
|
@ -369,7 +369,7 @@ fn lld_flag_no_threads(builder: &Builder<'_>, lld_mode: LldMode, is_windows: boo
|
||||||
let (windows_flag, other_flag) = LLD_NO_THREADS.get_or_init(|| {
|
let (windows_flag, other_flag) = LLD_NO_THREADS.get_or_init(|| {
|
||||||
let newer_version = match lld_mode {
|
let newer_version = match lld_mode {
|
||||||
LldMode::External => {
|
LldMode::External => {
|
||||||
let mut cmd = BootstrapCommand::new("lld").capture_stdout();
|
let mut cmd = command("lld").capture_stdout();
|
||||||
cmd.arg("-flavor").arg("ld").arg("--version");
|
cmd.arg("-flavor").arg("ld").arg("--version");
|
||||||
let out = cmd.run(builder).stdout();
|
let out = cmd.run(builder).stdout();
|
||||||
match (out.find(char::is_numeric), out.find('.')) {
|
match (out.find(char::is_numeric), out.find('.')) {
|
||||||
|
@ -502,7 +502,7 @@ pub fn check_cfg_arg(name: &str, values: Option<&[&str]>) -> String {
|
||||||
/// `BootstrapCommand::new("git")`, which is painful to ensure that the required change is applied
|
/// `BootstrapCommand::new("git")`, which is painful to ensure that the required change is applied
|
||||||
/// on each one of them correctly.
|
/// on each one of them correctly.
|
||||||
pub fn git(source_dir: Option<&Path>) -> BootstrapCommand {
|
pub fn git(source_dir: Option<&Path>) -> BootstrapCommand {
|
||||||
let mut git = BootstrapCommand::new("git");
|
let mut git = command("git");
|
||||||
|
|
||||||
if let Some(source_dir) = source_dir {
|
if let Some(source_dir) = source_dir {
|
||||||
git.current_dir(source_dir);
|
git.current_dir(source_dir);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue