diff options
| author | Guillaume Gomez <guillaume.gomez@huawei.com> | 2022-10-18 18:26:26 +0200 |
|---|---|---|
| committer | Guillaume Gomez <guillaume.gomez@huawei.com> | 2022-10-18 18:31:49 +0200 |
| commit | d5fd1af7b43b4932eebfc26cfd1a35ce7951be60 (patch) | |
| tree | 5ec63eb193e433957f541173e7ae713b385c2cc5 /src | |
| parent | e0f8e60dddfecfc9093ee9d9f42557d8260c0355 (diff) | |
| download | rust-d5fd1af7b43b4932eebfc26cfd1a35ce7951be60.tar.gz rust-d5fd1af7b43b4932eebfc26cfd1a35ce7951be60.zip | |
Retrieve LLVM version from llvm-filecheck binary if it is not set yet
Diffstat (limited to 'src')
| -rw-r--r-- | src/tools/compiletest/src/header.rs | 15 | ||||
| -rw-r--r-- | src/tools/compiletest/src/main.rs | 4 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs index 6f852275003..0d9a629e179 100644 --- a/src/tools/compiletest/src/header.rs +++ b/src/tools/compiletest/src/header.rs @@ -4,6 +4,7 @@ use std::fs::File; use std::io::prelude::*; use std::io::BufReader; use std::path::{Path, PathBuf}; +use std::process::Command; use tracing::*; @@ -843,6 +844,20 @@ pub fn extract_llvm_version(version: &str) -> Option<u32> { 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>]", /// returns the numeric representation of <version1> and <version2> as /// tuple: (<version1> as u32, <version2> as u32) diff --git a/src/tools/compiletest/src/main.rs b/src/tools/compiletest/src/main.rs index b48395035d4..417b429161f 100644 --- a/src/tools/compiletest/src/main.rs +++ b/src/tools/compiletest/src/main.rs @@ -200,7 +200,9 @@ pub fn parse_config(args: Vec<String>) -> Config { Some(x) => panic!("argument for --color must be auto, always, or never, but found `{}`", x), }; 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 run_ignored = matches.opt_present("ignored"); |
