libcsp-sys 0.1.1

FFI bindings for libcsp
Documentation
use std::{env, path::PathBuf};

pub const ENV_KEY_CSP_CONFIG_DIR: &str = "CSP_CONFIG_DIR";
pub const ENV_KEY_TEST: &str = "RUN_TESTS";

fn main() {
    // libcsp is built in a separate project, so linking it for tests will fail.
    // For tests, we do not want to have the link directive to csp.
    let run_tests = if let Ok(val) = env::var(ENV_KEY_TEST) {
        val == "1"
    } else {
        false
    };
    if !run_tests {
        println!("cargo:rustc-link-lib=csp");
    }

    let mut csp_conf_path = if std::env::var("DOCS_RS").is_ok() {
        PathBuf::from("./templates")
    } else {
        match env::var(ENV_KEY_CSP_CONFIG_DIR) {
            Ok(conf_path) => conf_path.into(),
            Err(_e) => {
                println!(
                "cargo:warning={} not set, using CARGO_MANIFEST_DIR to search for autoconfig.rs",
                ENV_KEY_CSP_CONFIG_DIR
            );
                env::var("CARGO_MANIFEST_DIR")
                    .expect("CARGO_MANIFEST_DIR not set")
                    .into()
            }
        }
    };

    let out_path = env::var("OUT_DIR").unwrap();
    csp_conf_path.push("autoconfig.rs");
    if !csp_conf_path.exists() {
        panic!(
            "autoconfig.rs not found at {:?}, is required for library build",
            csp_conf_path
        );
    }
    let out_path_full = PathBuf::from(&out_path).join("autoconfig.rs");
    std::fs::copy(&csp_conf_path, out_path_full).expect("failed to copy autoconfig.rs to OUT_DIR");
    println!("cargo::rerun-if-changed={:?}", &csp_conf_path);
}