Retrieve LLVM version from llvm-filecheck binary if it is not set yet
This commit is contained in:
parent
e0f8e60ddd
commit
d5fd1af7b4
@ -4,6 +4,7 @@
|
|||||||
use std::io::prelude::*;
|
use std::io::prelude::*;
|
||||||
use std::io::BufReader;
|
use std::io::BufReader;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
use std::process::Command;
|
||||||
|
|
||||||
use tracing::*;
|
use tracing::*;
|
||||||
|
|
||||||
@ -843,6 +844,20 @@ pub fn extract_llvm_version(version: &str) -> Option<u32> {
|
|||||||
Some(version)
|
Some(version)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn extract_llvm_version_from_binary(binary_path: &str) -> Option<u32> {
|
||||||
|
let output = Command::new(binary_path).arg("--version").output().ok()?;
|
||||||
|
if !output.status.success() {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
let version = String::from_utf8(output.stdout).ok()?;
|
||||||
|
for line in version.lines() {
|
||||||
|
if let Some(version) = line.split("LLVM version ").skip(1).next() {
|
||||||
|
return extract_llvm_version(version);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
/// Takes a directive of the form "<version1> [- <version2>]",
|
/// Takes a directive of the form "<version1> [- <version2>]",
|
||||||
/// returns the numeric representation of <version1> and <version2> as
|
/// returns the numeric representation of <version1> and <version2> as
|
||||||
/// tuple: (<version1> as u32, <version2> as u32)
|
/// tuple: (<version1> as u32, <version2> as u32)
|
||||||
|
@ -200,7 +200,9 @@ fn make_absolute(path: PathBuf) -> PathBuf {
|
|||||||
Some(x) => panic!("argument for --color must be auto, always, or never, but found `{}`", x),
|
Some(x) => panic!("argument for --color must be auto, always, or never, but found `{}`", x),
|
||||||
};
|
};
|
||||||
let llvm_version =
|
let llvm_version =
|
||||||
matches.opt_str("llvm-version").as_deref().and_then(header::extract_llvm_version);
|
matches.opt_str("llvm-version").as_deref().and_then(header::extract_llvm_version).or_else(
|
||||||
|
|| header::extract_llvm_version_from_binary(&matches.opt_str("llvm-filecheck")?),
|
||||||
|
);
|
||||||
|
|
||||||
let src_base = opt_path(matches, "src-base");
|
let src_base = opt_path(matches, "src-base");
|
||||||
let run_ignored = matches.opt_present("ignored");
|
let run_ignored = matches.opt_present("ignored");
|
||||||
|
Loading…
Reference in New Issue
Block a user