Skip to content

Commit fa883cb

Browse files
committed
Auto merge of rust-lang#12834 - fasterthanlime:proc-macro-test-toolchain, r=Veykril
Add PROC_MACRO_TEST_TOOLCHAIN environment variable This allows overriding the toolchain used to run `proc-macro-srv` tests. --- Sample usage. Testing the current ABI (variable unset/empty): ```shell amos@tails ~/bearcove/rust-analyzer/crates/proc-macro-srv proc-macro-test-toolchain* ❯ PROC_MACRO_TEST_TOOLCHAIN="" cargo test --quiet running 16 tests ................ test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s ``` Testing an older ABI: ```shell amos@tails ~/bearcove/rust-analyzer/crates/proc-macro-srv proc-macro-test-toolchain* ❯ PROC_MACRO_TEST_TOOLCHAIN="1.58" cargo test --quiet running 16 tests ................ test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s ``` Testing current nightly ABI: ```shell ❯ rustc +nightly --version rustc 1.64.0-nightly (f858854 2022-07-18) ❯ PROC_MACRO_TEST_TOOLCHAIN="nightly" cargo test --quiet running 16 tests ................ test result: ok. 16 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s ``` Testing future ABI (`rust-lang/rust` master): ```shell amos@tails ~/bearcove/rust-analyzer/crates/proc-macro-srv proc-macro-test-toolchain ❯ PROC_MACRO_TEST_TOOLCHAIN="stage1" cargo test --quiet running 16 tests ..........thread '<unnamed>' panicked at 'range end index 216221164920373249 out of range for slice of length 18', library/core/src/slice/index.rs:73:5 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace ....F. failures: ---- tests::test_fn_like_macro2 stdout ---- thread 'tests::test_fn_like_macro2' panicked at 'called `Result::unwrap()` on an `Err` value: "range end index 216221164920373249 out of range for slice of length 18"', crates/proc-macro-srv/src/tests/utils.rs:38:83 note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace failures: tests::test_fn_like_macro2 test result: FAILED. 15 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s error: test failed, to rerun pass '--lib ``` --- Tagging `@jonas-schievink:` this might be helpful when updating versioned ABIs later on.
2 parents cd2c240 + dcd52ec commit fa883cb

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

crates/proc-macro-test/build.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
//! `OUT_DIR`.
33
//!
44
//! `proc-macro-test` itself contains only a path to that artifact.
5+
//!
6+
//! The `PROC_MACRO_TEST_TOOLCHAIN` environment variable can be exported to use
7+
//! a specific rustup toolchain: this allows testing against older ABIs (e.g.
8+
//! 1.58) and future ABIs (stage1, nightly)
59
610
use std::{
711
env, fs,
@@ -13,6 +17,7 @@ use cargo_metadata::Message;
1317

1418
fn main() {
1519
println!("cargo:rerun-if-changed=imp");
20+
println!("cargo:rerun-if-env-changed=PROC_MACRO_TEST_TOOLCHAIN");
1621

1722
let out_dir = env::var_os("OUT_DIR").unwrap();
1823
let out_dir = Path::new(&out_dir);
@@ -47,7 +52,17 @@ fn main() {
4752
}
4853

4954
let target_dir = out_dir.join("target");
50-
let output = Command::new(toolchain::cargo())
55+
56+
let mut cmd = if let Ok(toolchain) = std::env::var("PROC_MACRO_TEST_TOOLCHAIN") {
57+
// leverage rustup to find user-specific toolchain
58+
let mut cmd = Command::new("cargo");
59+
cmd.arg(format!("+{toolchain}"));
60+
cmd
61+
} else {
62+
Command::new(toolchain::cargo())
63+
};
64+
65+
let output = cmd
5166
.current_dir(&staging_dir)
5267
.args(&["build", "-p", "proc-macro-test-impl", "--message-format", "json"])
5368
// Explicit override the target directory to avoid using the same one which the parent

0 commit comments

Comments
 (0)