about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAmos Wenger <amoswenger@gmail.com>2022-07-20 17:43:45 +0200
committerAmos Wenger <amoswenger@gmail.com>2022-07-20 17:43:45 +0200
commitdcd52ec327a72ed0ff9708b84e8384591f697224 (patch)
tree716742949f0d10c9345624757519c30ce1054a85
parent7dc36eeb781fcf35a69bb1a75e7005397a9da418 (diff)
downloadrust-dcd52ec327a72ed0ff9708b84e8384591f697224.tar.gz
rust-dcd52ec327a72ed0ff9708b84e8384591f697224.zip
Add PROC_MACRO_TEST_TOOLCHAIN environment variable
This allows overriding the toolchain used to run `proc-macro-srv` tests.
-rw-r--r--crates/proc-macro-test/build.rs17
1 files changed, 16 insertions, 1 deletions
diff --git a/crates/proc-macro-test/build.rs b/crates/proc-macro-test/build.rs
index c6bd5160d4d..cd99eea5ae3 100644
--- a/crates/proc-macro-test/build.rs
+++ b/crates/proc-macro-test/build.rs
@@ -2,6 +2,10 @@
 //! `OUT_DIR`.
 //!
 //! `proc-macro-test` itself contains only a path to that artifact.
+//!
+//! The `PROC_MACRO_TEST_TOOLCHAIN` environment variable can be exported to use
+//! a specific rustup toolchain: this allows testing against older ABIs (e.g.
+//! 1.58) and future ABIs (stage1, nightly)
 
 use std::{
     env, fs,
@@ -13,6 +17,7 @@ use cargo_metadata::Message;
 
 fn main() {
     println!("cargo:rerun-if-changed=imp");
+    println!("cargo:rerun-if-env-changed=PROC_MACRO_TEST_TOOLCHAIN");
 
     let out_dir = env::var_os("OUT_DIR").unwrap();
     let out_dir = Path::new(&out_dir);
@@ -47,7 +52,17 @@ fn main() {
     }
 
     let target_dir = out_dir.join("target");
-    let output = Command::new(toolchain::cargo())
+
+    let mut cmd = if let Ok(toolchain) = std::env::var("PROC_MACRO_TEST_TOOLCHAIN") {
+        // leverage rustup to find user-specific toolchain
+        let mut cmd = Command::new("cargo");
+        cmd.arg(format!("+{toolchain}"));
+        cmd
+    } else {
+        Command::new(toolchain::cargo())
+    };
+
+    let output = cmd
         .current_dir(&staging_dir)
         .args(&["build", "-p", "proc-macro-test-impl", "--message-format", "json"])
         // Explicit override the target directory to avoid using the same one which the parent