Skip to content

Commit

Permalink
Rollup merge of rust-lang#109162 - ozkanonur:extend_detect_src_and_ou…
Browse files Browse the repository at this point in the history
…t_test, r=jyn514

extend `detect_src_and_out` test

> I was thinking about the following cases when I wrote the comment in rust-lang#109055
>
> 1. Running bootstrap from the source root.
> 2. Running from a subdirectory of the source root.
> 3. Running from outside the source root.
> 4. Running on a different machine from where bootstrap was compiled (which will be important > for rust-lang#107812). You can mostly replicate this by renaming the source root so it no longer exists on disk.
> 5. Running with `--build-dir`.
> 6. Running with `$RUST_BOOTSTRAP_CONFIG` set in the environment and `build-dir` set in the file.

Tested all the topics mentioned above. All worked fine. The test is now also covers if build dir is manually specified in config.

r? ``@jyn514``

helps rust-lang#109120 partially
  • Loading branch information
matthiaskrgr authored Apr 6, 2023
2 parents ce3cb03 + 38b1741 commit 159b61e
Showing 1 changed file with 40 additions and 21 deletions.
61 changes: 40 additions & 21 deletions src/bootstrap/config/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,35 +33,54 @@ fn download_ci_llvm() {
));
}

// FIXME(ozkanonur): extend scope of the test
// refs:
// - https://github.com/rust-lang/rust/issues/109120
// - https://github.com/rust-lang/rust/pull/109162#issuecomment-1496782487
#[test]
fn detect_src_and_out() {
let cfg = parse("");
fn test(cfg: Config, build_dir: Option<&str>) {
// This will bring absolute form of `src/bootstrap` path
let current_dir = std::env::current_dir().unwrap();

// This will bring absolute form of `src/bootstrap` path
let current_dir = std::env::current_dir().unwrap();
// get `src` by moving into project root path
let expected_src = current_dir.ancestors().nth(2).unwrap();
assert_eq!(&cfg.src, expected_src);

// get `src` by moving into project root path
let expected_src = current_dir.ancestors().nth(2).unwrap();
// Sanity check for `src`
let manifest_dir = Path::new(env!("CARGO_MANIFEST_DIR"));
let expected_src = manifest_dir.ancestors().nth(2).unwrap();
assert_eq!(&cfg.src, expected_src);

assert_eq!(&cfg.src, expected_src);
// test if build-dir was manually given in config.toml
if let Some(custom_build_dir) = build_dir {
assert_eq!(&cfg.out, Path::new(custom_build_dir));
}
// test the native bootstrap way
else {
// This should bring output path of bootstrap in absolute form
let cargo_target_dir = env::var_os("CARGO_TARGET_DIR").expect(
"CARGO_TARGET_DIR must been provided for the test environment from bootstrap",
);

// This should bring output path of bootstrap in absolute form
let cargo_target_dir = env::var_os("CARGO_TARGET_DIR")
.expect("CARGO_TARGET_DIR must been provided for the test environment from bootstrap");
// Move to `build` from `build/bootstrap`
let expected_out = Path::new(&cargo_target_dir).parent().unwrap();
assert_eq!(&cfg.out, expected_out);

// Move to `build` from `build/bootstrap`
let expected_out = Path::new(&cargo_target_dir).parent().unwrap();
assert_eq!(&cfg.out, expected_out);
let args: Vec<String> = env::args().collect();

let args: Vec<String> = env::args().collect();
// Another test for `out` as a sanity check
//
// This will bring something similar to:
// `{build-dir}/bootstrap/debug/deps/bootstrap-c7ee91d5661e2804`
// `{build-dir}` can be anywhere, not just in the rust project directory.
let dep = Path::new(args.first().unwrap());
let expected_out = dep.ancestors().nth(4).unwrap();

// Another test for `out` as a sanity check
//
// This will bring something similar to:
// `{config_toml_place}/build/bootstrap/debug/deps/bootstrap-c7ee91d5661e2804`
// `{config_toml_place}` can be anywhere, not just in the rust project directory.
let dep = Path::new(args.first().unwrap());
let expected_out = dep.ancestors().nth(4).unwrap();
assert_eq!(&cfg.out, expected_out);
}
}

assert_eq!(&cfg.out, expected_out);
test(parse(""), None);
test(parse("build.build-dir = \"/tmp\""), Some("/tmp"));
}

0 comments on commit 159b61e

Please sign in to comment.