]> git.lizzy.rs Git - rust.git/blobdiff - crates/proc_macro_test/build.rs
Show `macro_rules` snippet in blocks
[rust.git] / crates / proc_macro_test / build.rs
index 4653a93dde1c0835075b302b429264a4765a9119..1e7aa026fa5f6b8213e508195199153832ac7898 100644 (file)
@@ -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();
 }