diff options
| author | oxalica <oxalicc@pm.me> | 2021-06-22 03:14:08 +0800 |
|---|---|---|
| committer | oxalica <oxalicc@pm.me> | 2021-06-22 03:34:32 +0800 |
| commit | d368b663bdb8a6239d4a487112d4246e76d2c542 (patch) | |
| tree | 1bcd1c0311c869f787c14cb9f8aaa817c61505cd | |
| parent | 1b05dbba39d5a4d46f321dc962df99038cddbf21 (diff) | |
| download | rust-d368b663bdb8a6239d4a487112d4246e76d2c542.tar.gz rust-d368b663bdb8a6239d4a487112d4246e76d2c542.zip | |
Set explicit target directory to avoid cargo deadlock
| -rw-r--r-- | crates/proc_macro_test/build.rs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/crates/proc_macro_test/build.rs b/crates/proc_macro_test/build.rs index 4653a93dde1..1e7aa026fa5 100644 --- a/crates/proc_macro_test/build.rs +++ b/crates/proc_macro_test/build.rs @@ -17,9 +17,16 @@ fn main() { let name = "proc_macro_test_impl"; let version = "0.0.0"; + let target_dir = out_dir.join("target"); let output = Command::new(toolchain::cargo()) .current_dir("imp") .args(&["build", "-p", "proc_macro_test_impl", "--message-format", "json"]) + // Explicit override the target directory to avoid using the same one which the parent + // cargo is using, or we'll deadlock. + // This can happen when `CARGO_TARGET_DIR` is set or global config forces all cargo + // instance to use the same target directory. + .arg("--target-dir") + .arg(&target_dir) .output() .unwrap(); assert!(output.status.success()); @@ -39,10 +46,9 @@ fn main() { } } - let src_path = artifact_path.expect("no dylib for proc_macro_test_impl found"); - let dest_path = out_dir.join(src_path.file_name().unwrap()); - fs::copy(src_path, &dest_path).unwrap(); + // This file is under `target_dir` and is already under `OUT_DIR`. + let artifact_path = artifact_path.expect("no dylib for proc_macro_test_impl found"); let info_path = out_dir.join("proc_macro_test_location.txt"); - fs::write(info_path, dest_path.to_str().unwrap()).unwrap(); + fs::write(info_path, artifact_path.to_str().unwrap()).unwrap(); } |
