From 4e53640b17fd65765abe0adca34c7d5eedf241c6 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Fri, 20 Sep 2024 15:47:36 -0700 Subject: [PATCH] Pass the current cargo to `run-make` tests A couple tests were using `BOOTSTRAP_CARGO` with `-Zbuild-std`, but that stage0 cargo might not always be in sync with in-tree changes. In particular, those tests started failing on the beta branch because the older cargo couldn't find the library `Cargo.lock`, and then couldn't build the latest version of `compiler_builtins` that had nightly changes. --- src/bootstrap/src/core/build_steps/test.rs | 5 +++++ src/tools/compiletest/src/common.rs | 3 +++ src/tools/compiletest/src/lib.rs | 3 +++ src/tools/compiletest/src/runtest/run_make.rs | 8 ++++++++ tests/run-make/compiler-builtins/rmake.rs | 4 ++-- tests/run-make/thumb-none-cortex-m/rmake.rs | 6 +++--- 6 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/bootstrap/src/core/build_steps/test.rs b/src/bootstrap/src/core/build_steps/test.rs index a7e9352bb1c4c..2047345d78a74 100644 --- a/src/bootstrap/src/core/build_steps/test.rs +++ b/src/bootstrap/src/core/build_steps/test.rs @@ -1733,6 +1733,11 @@ NOTE: if you're sure you want to do this, please open an issue as to why. In the let is_rustdoc = suite.ends_with("rustdoc-ui") || suite.ends_with("rustdoc-js"); + if mode == "run-make" { + let cargo = builder.ensure(tool::Cargo { compiler, target: compiler.host }); + cmd.arg("--cargo-path").arg(cargo); + } + // Avoid depending on rustdoc when we don't need it. if mode == "rustdoc" || mode == "run-make" diff --git a/src/tools/compiletest/src/common.rs b/src/tools/compiletest/src/common.rs index 5c18179b6fe2f..414f9f3a7f13a 100644 --- a/src/tools/compiletest/src/common.rs +++ b/src/tools/compiletest/src/common.rs @@ -183,6 +183,9 @@ pub struct Config { /// The rustc executable. pub rustc_path: PathBuf, + /// The cargo executable. + pub cargo_path: Option, + /// The rustdoc executable. pub rustdoc_path: Option, diff --git a/src/tools/compiletest/src/lib.rs b/src/tools/compiletest/src/lib.rs index 250b5084d1362..3339116d542bc 100644 --- a/src/tools/compiletest/src/lib.rs +++ b/src/tools/compiletest/src/lib.rs @@ -47,6 +47,7 @@ pub fn parse_config(args: Vec) -> Config { opts.reqopt("", "compile-lib-path", "path to host shared libraries", "PATH") .reqopt("", "run-lib-path", "path to target shared libraries", "PATH") .reqopt("", "rustc-path", "path to rustc to use for compiling", "PATH") + .optopt("", "cargo-path", "path to cargo to use for compiling", "PATH") .optopt("", "rustdoc-path", "path to rustdoc to use for compiling", "PATH") .optopt("", "coverage-dump-path", "path to coverage-dump to use in tests", "PATH") .reqopt("", "python", "path to python to use for doc tests", "PATH") @@ -260,6 +261,7 @@ pub fn parse_config(args: Vec) -> Config { compile_lib_path: make_absolute(opt_path(matches, "compile-lib-path")), run_lib_path: make_absolute(opt_path(matches, "run-lib-path")), rustc_path: opt_path(matches, "rustc-path"), + cargo_path: matches.opt_str("cargo-path").map(PathBuf::from), rustdoc_path: matches.opt_str("rustdoc-path").map(PathBuf::from), coverage_dump_path: matches.opt_str("coverage-dump-path").map(PathBuf::from), python: matches.opt_str("python").unwrap(), @@ -364,6 +366,7 @@ pub fn log_config(config: &Config) { logv(c, format!("compile_lib_path: {:?}", config.compile_lib_path)); logv(c, format!("run_lib_path: {:?}", config.run_lib_path)); logv(c, format!("rustc_path: {:?}", config.rustc_path.display())); + logv(c, format!("cargo_path: {:?}", config.cargo_path)); logv(c, format!("rustdoc_path: {:?}", config.rustdoc_path)); logv(c, format!("src_base: {:?}", config.src_base.display())); logv(c, format!("build_base: {:?}", config.build_base.display())); diff --git a/src/tools/compiletest/src/runtest/run_make.rs b/src/tools/compiletest/src/runtest/run_make.rs index 852568ae92536..75fe6a6baafa1 100644 --- a/src/tools/compiletest/src/runtest/run_make.rs +++ b/src/tools/compiletest/src/runtest/run_make.rs @@ -61,6 +61,10 @@ impl TestCx<'_> { .env_remove("MFLAGS") .env_remove("CARGO_MAKEFLAGS"); + if let Some(ref cargo) = self.config.cargo_path { + cmd.env("CARGO", cwd.join(cargo)); + } + if let Some(ref rustdoc) = self.config.rustdoc_path { cmd.env("RUSTDOC", cwd.join(rustdoc)); } @@ -409,6 +413,10 @@ impl TestCx<'_> { // through a specific CI runner). .env("LLVM_COMPONENTS", &self.config.llvm_components); + if let Some(ref cargo) = self.config.cargo_path { + cmd.env("CARGO", source_root.join(cargo)); + } + if let Some(ref rustdoc) = self.config.rustdoc_path { cmd.env("RUSTDOC", source_root.join(rustdoc)); } diff --git a/tests/run-make/compiler-builtins/rmake.rs b/tests/run-make/compiler-builtins/rmake.rs index 42ed07d9dafae..3b05fe2055c34 100644 --- a/tests/run-make/compiler-builtins/rmake.rs +++ b/tests/run-make/compiler-builtins/rmake.rs @@ -33,8 +33,8 @@ fn main() { let path = env_var("PATH"); let rustc = env_var("RUSTC"); - let bootstrap_cargo = env_var("BOOTSTRAP_CARGO"); - let mut cmd = cmd(bootstrap_cargo); + let cargo = env_var("CARGO"); + let mut cmd = cmd(cargo); cmd.args(&[ "build", "--manifest-path", diff --git a/tests/run-make/thumb-none-cortex-m/rmake.rs b/tests/run-make/thumb-none-cortex-m/rmake.rs index 0ddb91d378fb7..9112646290f20 100644 --- a/tests/run-make/thumb-none-cortex-m/rmake.rs +++ b/tests/run-make/thumb-none-cortex-m/rmake.rs @@ -36,10 +36,10 @@ fn main() { let path = env_var("PATH"); let rustc = env_var("RUSTC"); - let bootstrap_cargo = env_var("BOOTSTRAP_CARGO"); - // FIXME: extract bootstrap cargo invocations to a proper command + let cargo = env_var("CARGO"); + // FIXME: extract cargo invocations to a proper command // https://github.com/rust-lang/rust/issues/128734 - let mut cmd = cmd(bootstrap_cargo); + let mut cmd = cmd(cargo); cmd.args(&[ "build", "--manifest-path",