vitasdk-sys 0.3.3

Raw bindings to vitasdk
Documentation
use std::env;
use std::path::PathBuf;

fn main() {
    #[cfg(feature = "log-build")]
    env_logger::init();

    println!("cargo:rerun-if-env-changed=DOCS_RS");
    if std::env::var("DOCS_RS").is_ok() {
        return;
    }

    println!("cargo:rerun-if-env-changed=VITASDK");
    let vitasdk = match env::var("VITASDK") {
        Ok(vitasdk) => {
            let vitasdk = PathBuf::from(vitasdk);
            let sysroot = vitasdk.join("arm-vita-eabi");

            assert!(
                sysroot.exists(),
                "VITASDK's sysroot does not exist, please install or update vitasdk first"
            );

            let lib = sysroot.join("lib");
            assert!(lib.exists(), "VITASDK's `lib` directory does not exist");
            println!("cargo:rustc-link-search=native={}", lib.to_str().unwrap());

            vitasdk
        }
        Err(env::VarError::NotPresent) => {
            panic!("VITASDK env var is not set")
        }
        Err(env::VarError::NotUnicode(s)) => {
            panic!("VITASDK env var is not a valid unicode but got: {s:?}")
        }
    };

    // Just to mark it as used
    #[cfg(not(feature = "bindgen"))]
    let _ = vitasdk;

    #[cfg(feature = "bindgen")]
    {
        let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
        let bindings_output = out_dir.join("bindings.rs");

        let vita_headers_include = vitasdk.join("arm-vita-eabi").join("include");
        let db = vitasdk.join("share").join("vita-headers").join("db");
        assert!(
            vita_headers_include.exists(),
            "VITASDK's `include` directory does not exist"
        );
        assert!(db.exists(), "VITASDK's `db` directory does not exist");

        let is_build_rs = true;

        vitasdk_sys_build_util::bindgen::generate(
            &vita_headers_include,
            &db,
            &bindings_output,
            &vitasdk_sys_manifest(),
            is_build_rs,
        );
    }
}

#[cfg(feature = "bindgen")]
fn vitasdk_sys_manifest() -> PathBuf {
    PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()).join("Cargo.toml")
}