1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use std::process::Command;

pub fn get_erg_version(erg_command: &str) -> Option<String> {
    let out = if cfg!(windows) {
        Command::new("cmd")
            .arg("/C")
            .arg(erg_command)
            .arg("--version")
            .output()
            .ok()?
    } else {
        let exec_command = format!("{erg_command} --version");
        Command::new("sh")
            .arg("-c")
            .arg(exec_command)
            .output()
            .ok()?
    };
    // e.g. Erg 0.1.0, Erg 0.1.2-nightly.2
    let s_version = String::from_utf8(out.stdout).ok()?;
    let mut iter = s_version.split(' ').skip(1);
    Some(iter.next()?.trim_end().to_string())
}

pub fn env_erg_version() -> Option<String> {
    get_erg_version("erg")
}