fn setup_standalone()

in neqo-crypto/build.rs [339:384]


fn setup_standalone(nss: &str) -> Vec<String> {
    setup_clang();

    println!("cargo:rerun-if-env-changed=NSS_DIR");
    let nss = PathBuf::from(nss);
    assert!(
        !nss.is_relative(),
        "The NSS_DIR environment variable is expected to be an absolute path."
    );

    // $NSS_DIR/../dist/
    let nssdist = nss.parent().unwrap().join("dist");
    println!("cargo:rerun-if-env-changed=NSS_TARGET");
    let nsstarget = env::var("NSS_TARGET")
        .unwrap_or_else(|_| fs::read_to_string(nssdist.join("latest")).unwrap());

    // If NSS_PREBUILT is set, we assume that the NSS libraries are already built.
    if env::var("NSS_PREBUILT").is_err() {
        build_nss(nss, &nsstarget);
    }

    let nsstarget = nssdist.join(nsstarget.trim());
    let includes = get_includes(&nsstarget, &nssdist);

    let nsslibdir = nsstarget.join("lib");
    println!(
        "cargo:rustc-link-search=native={}",
        nsslibdir.to_str().unwrap()
    );
    if env::var("CARGO_CFG_FUZZING").is_ok()
        || env::var("PROFILE").unwrap_or_default() == "debug"
        // FIXME: NSPR doesn't build proper dynamic libraries on Windows.
        || env::consts::OS == "windows"
    {
        static_link();
    } else {
        dynamic_link();
    }

    let mut flags: Vec<String> = Vec::new();
    for i in includes {
        flags.push(String::from("-I") + i.to_str().unwrap());
    }

    flags
}