Skip to content

Commit 49d33c4

Browse files
author
Jon Gjengset
committed
Expose cargo and rustc version envvars
1 parent 1e40745 commit 49d33c4

File tree

3 files changed

+54
-3
lines changed

3 files changed

+54
-3
lines changed

crates/cargo-test-support/src/lib.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,6 +1041,14 @@ pub fn is_nightly() -> bool {
10411041
&& (vv.contains("-nightly") || vv.contains("-dev"))
10421042
}
10431043

1044+
pub fn rustc_release() -> &'static str {
1045+
RUSTC_INFO
1046+
.verbose_version
1047+
.lines()
1048+
.find_map(|line| line.strip_prefix("release: "))
1049+
.expect("verbose version has release: field")
1050+
}
1051+
10441052
pub fn process<T: AsRef<OsStr>>(t: T) -> ProcessBuilder {
10451053
_process(t.as_ref())
10461054
}

src/cargo/core/compiler/custom_build.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,22 @@ fn build_work(cx: &mut Context<'_, '_>, unit: &Unit) -> CargoResult<Job> {
254254
cmd.env("RUSTC_WRAPPER", wrapper);
255255
}
256256
cmd.env("RUSTFLAGS", bcx.rustflags_args(unit).join(" "));
257+
let version = crate::version();
258+
cmd.env(
259+
"CARGO_VERSION",
260+
format!("{}.{}.{}", version.major, version.minor, version.patch),
261+
);
262+
cmd.env("CARGO_VERSION_MAJOR", version.major.to_string());
263+
cmd.env("CARGO_VERSION_MINOR", version.minor.to_string());
264+
cmd.env("CARGO_VERSION_PATCH", version.patch.to_string());
265+
let version = &bcx.rustc().version;
266+
cmd.env(
267+
"RUSTC_VERSION",
268+
format!("{}.{}.{}", version.major, version.minor, version.patch),
269+
);
270+
cmd.env("RUSTC_VERSION_MAJOR", version.major.to_string());
271+
cmd.env("RUSTC_VERSION_MINOR", version.minor.to_string());
272+
cmd.env("RUSTC_VERSION_PATCH", version.patch.to_string());
257273

258274
// Gather the set of native dependencies that this package has along with
259275
// some other variables to close over.

tests/testsuite/build_script.rs

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ use cargo_test_support::paths::CargoPathExt;
55
use cargo_test_support::registry::Package;
66
use cargo_test_support::tools;
77
use cargo_test_support::{basic_manifest, cross_compile, is_coarse_mtime, project};
8-
use cargo_test_support::{rustc_host, sleep_ms, slow_cpu_multiplier, symlink_supported};
8+
use cargo_test_support::{
9+
rustc_host, rustc_release, sleep_ms, slow_cpu_multiplier, symlink_supported,
10+
};
911
use cargo_util::paths::remove_dir_all;
1012
use std::env;
1113
use std::fs;
@@ -80,10 +82,11 @@ fn custom_build_env_vars() {
8082
)
8183
.file("bar/src/lib.rs", "pub fn hello() {}");
8284

85+
let cargo_version = cargo::version();
86+
let rustc_version = semver::Version::parse(rustc_release()).unwrap();
8387
let file_content = format!(
8488
r#"
8589
use std::env;
86-
use std::io::prelude::*;
8790
use std::path::Path;
8891
8992
fn main() {{
@@ -122,13 +125,37 @@ fn custom_build_env_vars() {
122125
123126
let rustflags = env::var("RUSTFLAGS").unwrap();
124127
assert_eq!(rustflags, "");
128+
129+
let version = env::var("CARGO_VERSION").unwrap();
130+
assert_eq!(version, "{1}.{2}.{3}", "bad cargo version");
131+
let version = env::var("CARGO_VERSION_MAJOR").unwrap();
132+
assert_eq!(version, "{1}");
133+
let version = env::var("CARGO_VERSION_MINOR").unwrap();
134+
assert_eq!(version, "{2}");
135+
let version = env::var("CARGO_VERSION_PATCH").unwrap();
136+
assert_eq!(version, "{3}");
137+
138+
let version = env::var("RUSTC_VERSION").unwrap();
139+
assert_eq!(version, "{4}.{5}.{6}", "bad rust version");
140+
let version = env::var("RUSTC_VERSION_MAJOR").unwrap();
141+
assert_eq!(version, "{4}");
142+
let version = env::var("RUSTC_VERSION_MINOR").unwrap();
143+
assert_eq!(version, "{5}");
144+
let version = env::var("RUSTC_VERSION_PATCH").unwrap();
145+
assert_eq!(version, "{6}");
125146
}}
126147
"#,
127148
p.root()
128149
.join("target")
129150
.join("debug")
130151
.join("build")
131-
.display()
152+
.display(),
153+
cargo_version.major,
154+
cargo_version.minor,
155+
cargo_version.patch,
156+
rustc_version.major,
157+
rustc_version.minor,
158+
rustc_version.patch,
132159
);
133160

134161
let p = p.file("bar/build.rs", &file_content).build();

0 commit comments

Comments
 (0)