Skip to content

Commit 5e8e7ce

Browse files
committed
Fix mixing-formats run-make test
1 parent 044da46 commit 5e8e7ce

File tree

3 files changed

+36
-20
lines changed

3 files changed

+36
-20
lines changed

src/tools/run-make-support/src/lib.rs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ pub fn set_host_rpath(cmd: &mut Command) {
227227
let ld_lib_path_envvar = env_var("LD_LIB_PATH_ENVVAR");
228228
cmd.env(&ld_lib_path_envvar, {
229229
let mut paths = vec![];
230-
paths.push(PathBuf::from(env_var("TMPDIR")));
230+
paths.push(env::current_dir().unwrap());
231231
paths.push(PathBuf::from(env_var("HOST_RPATH_DIR")));
232232
for p in env::split_paths(&env_var(&ld_lib_path_envvar)) {
233233
paths.push(p.to_path_buf());
@@ -315,6 +315,28 @@ pub fn assert_not_contains(haystack: &str, needle: &str) {
315315
}
316316
}
317317

318+
/// This function is designed for running commands in a temporary directory
319+
/// that is cleared after the function ends.
320+
///
321+
/// What this function does:
322+
/// 1) Creates a temporary directory (`tmpdir`)
323+
/// 2) Copies all files from the current directory to `tmpdir`
324+
/// 3) Changes the current working directory to `tmpdir`
325+
/// 4) Calls `callback`
326+
/// 5) Switches working directory back to the original one
327+
/// 6) Removes `tmpdir`
328+
/// Switch current working directory to a temporary directory
329+
pub fn run_in_tmpdir<F: FnOnce()>(callback: F) {
330+
let original_dir = env::current_dir().unwrap();
331+
let tmpdir = original_dir.join("../temporary-directory");
332+
copy_dir_all(".", &tmpdir);
333+
334+
env::set_current_dir(&tmpdir).unwrap();
335+
callback();
336+
env::set_current_dir(original_dir).unwrap();
337+
fs::remove_dir_all(tmpdir).unwrap();
338+
}
339+
318340
/// Implement common helpers for command wrappers. This assumes that the command wrapper is a struct
319341
/// containing a `cmd: Command` field and a `output` function. The provided helpers are:
320342
///

src/tools/run-make-support/src/rustc.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
use std::env;
12
use std::ffi::{OsStr, OsString};
23
use std::io::Write;
34
use std::path::Path;
45
use std::process::{Command, Output, Stdio};
56

6-
use crate::{env_var, handle_failed_output, set_host_rpath, tmp_dir};
7+
use crate::{env_var, handle_failed_output, set_host_rpath};
78

89
/// Construct a new `rustc` invocation.
910
pub fn rustc() -> Rustc {
@@ -28,7 +29,7 @@ fn setup_common() -> Command {
2829
let rustc = env_var("RUSTC");
2930
let mut cmd = Command::new(rustc);
3031
set_host_rpath(&mut cmd);
31-
cmd.arg("--out-dir").arg(tmp_dir()).arg("-L").arg(tmp_dir());
32+
cmd.arg("-L").arg(env::current_dir().unwrap());
3233
cmd
3334
}
3435

tests/run-make/mixing-formats/rmake.rs

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,74 +12,67 @@
1212

1313
//@ ignore-cross-compile
1414

15-
use run_make_support::{rustc, tmp_dir};
15+
use run_make_support::{rustc, tmp_dir, run_in_tmpdir};
1616
use std::fs;
1717

18-
fn test_with_teardown(rustc_calls: impl Fn()) {
19-
rustc_calls();
20-
//FIXME(Oneirical): This should be replaced with the run-make-support fs wrappers.
21-
fs::remove_dir_all(tmp_dir()).unwrap();
22-
fs::create_dir(tmp_dir()).unwrap();
23-
}
24-
2518
fn main() {
26-
test_with_teardown(|| {
19+
run_in_tmpdir(|| {
2720
// Building just baz
2821
rustc().crate_type("rlib").input("foo.rs").run();
2922
rustc().crate_type("dylib").input("bar1.rs").arg("-Cprefer-dynamic").run();
3023
rustc().crate_type("dylib,rlib").input("baz.rs").arg("-Cprefer-dynamic").run();
3124
rustc().crate_type("bin").input("baz.rs").run();
3225
});
33-
test_with_teardown(|| {
26+
run_in_tmpdir(|| {
3427
rustc().crate_type("dylib").input("foo.rs").arg("-Cprefer-dynamic").run();
3528
rustc().crate_type("rlib").input("bar1.rs").run();
3629
rustc().crate_type("dylib,rlib").input("baz.rs").arg("-Cprefer-dynamic").run();
3730
rustc().crate_type("bin").input("baz.rs").run();
3831
});
39-
test_with_teardown(|| {
32+
run_in_tmpdir(|| {
4033
// Building baz2
4134
rustc().crate_type("rlib").input("foo.rs").run();
4235
rustc().crate_type("dylib").input("bar1.rs").arg("-Cprefer-dynamic").run();
4336
rustc().crate_type("dylib").input("bar2.rs").arg("-Cprefer-dynamic").run();
4437
rustc().crate_type("dylib").input("baz2.rs").run_fail_assert_exit_code(1);
4538
rustc().crate_type("bin").input("baz2.rs").run_fail_assert_exit_code(1);
4639
});
47-
test_with_teardown(|| {
40+
run_in_tmpdir(|| {
4841
rustc().crate_type("rlib").input("foo.rs").run();
4942
rustc().crate_type("rlib").input("bar1.rs").run();
5043
rustc().crate_type("dylib").input("bar2.rs").arg("-Cprefer-dynamic").run();
5144
rustc().crate_type("dylib,rlib").input("baz2.rs").run();
5245
rustc().crate_type("bin").input("baz2.rs").run();
5346
});
54-
test_with_teardown(|| {
47+
run_in_tmpdir(|| {
5548
rustc().crate_type("rlib").input("foo.rs").run();
5649
rustc().crate_type("dylib").input("bar1.rs").arg("-Cprefer-dynamic").run();
5750
rustc().crate_type("rlib").input("bar2.rs").run();
5851
rustc().crate_type("dylib,rlib").input("baz2.rs").arg("-Cprefer-dynamic").run();
5952
rustc().crate_type("bin").input("baz2.rs").run();
6053
});
61-
test_with_teardown(|| {
54+
run_in_tmpdir(|| {
6255
rustc().crate_type("rlib").input("foo.rs").run();
6356
rustc().crate_type("rlib").input("bar1.rs").run();
6457
rustc().crate_type("rlib").input("bar2.rs").run();
6558
rustc().crate_type("dylib,rlib").input("baz2.rs").arg("-Cprefer-dynamic").run();
6659
rustc().crate_type("bin").input("baz2.rs").run();
6760
});
68-
test_with_teardown(|| {
61+
run_in_tmpdir(|| {
6962
rustc().crate_type("dylib").input("foo.rs").arg("-Cprefer-dynamic").run();
7063
rustc().crate_type("rlib").input("bar1.rs").run();
7164
rustc().crate_type("rlib").input("bar2.rs").run();
7265
rustc().crate_type("dylib,rlib").input("baz2.rs").arg("-Cprefer-dynamic").run();
7366
rustc().crate_type("bin").input("baz2.rs").run();
7467
});
75-
test_with_teardown(|| {
68+
run_in_tmpdir(|| {
7669
rustc().crate_type("dylib").input("foo.rs").arg("-Cprefer-dynamic").run();
7770
rustc().crate_type("dylib").input("bar1.rs").arg("-Cprefer-dynamic").run();
7871
rustc().crate_type("rlib").input("bar2.rs").run();
7972
rustc().crate_type("dylib,rlib").input("baz2.rs").run();
8073
rustc().crate_type("bin").input("baz2.rs").run();
8174
});
82-
test_with_teardown(|| {
75+
run_in_tmpdir(|| {
8376
rustc().crate_type("dylib").input("foo.rs").arg("-Cprefer-dynamic").run();
8477
rustc().crate_type("rlib").input("bar1.rs").run();
8578
rustc().crate_type("dylib").input("bar2.rs").arg("-Cprefer-dynamic").run();

0 commit comments

Comments
 (0)