|
1 |
| -extern crate regex; |
2 |
| - |
3 | 1 | use std::env::var;
|
4 | 2 | use std::process::Command;
|
5 | 3 | use std::str;
|
6 | 4 |
|
7 | 5 | fn main() {
|
8 |
| - let version_line = Command::new(var("RUSTC").unwrap_or("rustc".into())) |
| 6 | + let verbose = Command::new(var("RUSTC").unwrap_or("rustc".into())) |
9 | 7 | .arg("--version")
|
| 8 | + .arg("--verbose") |
10 | 9 | .output()
|
11 | 10 | .unwrap()
|
12 | 11 | .stdout;
|
13 |
| - let captures = regex::Regex::new(r"rustc (\d+)\.(\d+)\.(\d+).+(\d{4}-\d{2}-\d{2})\)") |
14 |
| - .unwrap() |
15 |
| - .captures(str::from_utf8(&version_line).unwrap()) |
16 |
| - .unwrap(); |
| 12 | + let verbose = str::from_utf8(&verbose).unwrap(); |
| 13 | + let mut commit_date = None; |
| 14 | + let mut release = None; |
| 15 | + for line in verbose.lines() { |
| 16 | + let mut parts = line.split(':'); |
| 17 | + match parts.next().unwrap().trim() { |
| 18 | + "commit-date" => commit_date = Some(parts.next().unwrap().trim()), |
| 19 | + "release" => release = Some(parts.next().unwrap().trim()), |
| 20 | + _ => {} |
| 21 | + } |
| 22 | + } |
| 23 | + let version = release.unwrap().split('-').next().unwrap();; |
| 24 | + let mut version_components = version.split('.').map(|s| s.parse::<u32>().unwrap()); |
17 | 25 | let version = (
|
18 |
| - captures[1].parse::<u32>().unwrap(), |
19 |
| - captures[2].parse::<u32>().unwrap(), |
20 |
| - captures[3].parse::<u32>().unwrap(), |
21 |
| - &captures[4], |
| 26 | + version_components.next().unwrap(), |
| 27 | + version_components.next().unwrap(), |
| 28 | + version_components.next().unwrap(), |
| 29 | + // "unknown" sorts after "2016-02-14", which is what we want to defaut to unprefixed |
| 30 | + // https://github.com/servo/heapsize/pull/44#issuecomment-187935883 |
| 31 | + commit_date.unwrap() |
22 | 32 | );
|
| 33 | + assert_eq!(version_components.next(), None); |
23 | 34 | if version < (1, 8, 0, "2016-02-14") {
|
24 | 35 | println!("cargo:rustc-cfg=prefixed_jemalloc");
|
25 | 36 | }
|
|
0 commit comments