//! A Cargo build script binary used in unit tests for the Bazel `cargo_build_script` rule

/// `cargo_build_script` should always set `CARGO_ENCODED_RUSTFLAGS`
fn test_encoded_rustflags() {
    let encoded_rustflags = std::env::var("CARGO_ENCODED_RUSTFLAGS").unwrap();

    let flags: Vec<String> = encoded_rustflags
        .split('\x1f')
        .map(str::to_string)
        .collect();
    assert_eq!(flags.len(), 2);

    assert!(flags[0].starts_with("--sysroot"));

    // Ensure the `pwd` template has been resolved
    assert!(!flags[0].contains("${pwd}"));

    assert_eq!(flags[1], "--verbose");
}

fn main() {
    // Perform some unit testing
    test_encoded_rustflags();

    // Pass the TOOL_PATH along to the rust_test so we can assert on it.
    println!(
        "cargo:rustc-env=TOOL_PATH={}",
        std::env::var("TOOL").unwrap()
    );

    // Assert that the CC, CXX and LD env vars existed and were executable.
    // We don't assert what happens when they're executed (in particular, we don't check for a
    // non-zero exit code), but this asserts that it's an existing file which is executable.
    for env_var in &["CC", "CXX", "LD"] {
        let path = std::env::var(env_var)
            .unwrap_or_else(|err| panic!("Error getting {}: {}", env_var, err));
        std::process::Command::new(path).status().unwrap();
    }

    // Assert that some env variables are set.
    for env_var in &["CFLAGS", "CXXFLAGS", "LDFLAGS"] {
        assert!(std::env::var(env_var).is_ok());
    }
}
