latches 0.1.3

A downward counter (CountDownLatch) which can be used to synchronize threads or coordinate tasks
Documentation
fn main() {
    let rustc = std::env::var_os("RUSTC").unwrap_or("rustc".into());
    let output = std::process::Command::new(rustc)
        .arg("-vV")
        .output()
        .expect("Failed to execute `rustc -vV`");

    if !output.status.success() {
        return println!(
            "cargo:warning=latches: Failed `rustc -vV`: {}",
            String::from_utf8_lossy(&output.stderr)
        );
    }

    let output = String::from_utf8_lossy(&output.stdout);

    for line in output.lines() {
        if let Some(version) = line.strip_prefix("release: ") {
            if let Some(v) = version_tuple(version) {
                if v < (1, 63) {
                    println!("cargo:rustc-cfg=latches_no_const_sync");
                }
                return;
            } else {
                println!("cargo:warning=latches: Unexpected version: {line}");
            }
        }
    }

    println!("cargo:warning=latches: No version line in `rustc -vV` output");
}

fn version_tuple(version: &str) -> Option<(u16, u16)> {
    let mut v = version.splitn(3, '.');

    if let (Some(f), Some(s)) = (v.next(), v.next()) {
        if let (Ok(major), Ok(minor)) = (f.parse(), s.parse()) {
            return Some((major, minor));
        }
    }

    None
}