]> git.lizzy.rs Git - rust.git/commitdiff
Retrieve LLVM version from llvm-filecheck binary if it is not set yet
authorGuillaume Gomez <guillaume.gomez@huawei.com>
Tue, 18 Oct 2022 16:26:26 +0000 (18:26 +0200)
committerGuillaume Gomez <guillaume.gomez@huawei.com>
Tue, 18 Oct 2022 16:31:49 +0000 (18:31 +0200)
src/tools/compiletest/src/header.rs
src/tools/compiletest/src/main.rs

index 6f85227500361e3a2f03c44c091bc5f83c287a37..0d9a629e179b8eb9df836be32426f467cfb3ce9d 100644 (file)
@@ -4,6 +4,7 @@
 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)
index b48395035d4f09f87d2af83a3a939a7587e3890f..417b429161f52ad34401e71dc7a018bec00cdc27 100644 (file)
@@ -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),
     };
     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");