use std::env;
use std::path::PathBuf;
fn main() {
#[cfg(unix)]
let builder;
#[cfg(windows)]
let mut builder;
builder = bindgen::Builder::default().header("wrapper.h");
#[cfg(windows)]
let modify_builder = |nvtt_path: PathBuf| -> bindgen::Builder {
let nvtt_path = nvtt_path.into_os_string().into_string().unwrap();
let path = format!("-I{nvtt_path}\\include\\nvtt");
println!("{}", &path);
builder.clang_arg(path).clang_arg("-v")
};
if let Some(nvtt_path) = std::env::var_os("NVTT_PATH") {
let nvtt_path = PathBuf::from(nvtt_path);
cfg_if::cfg_if! {
if #[cfg(unix)] {
println!("cargo:rustc-link-search={}", nvtt_path.to_str().unwrap());
}
else if #[cfg(windows)] {
println!("cargo:rustc-link-search={}", nvtt_path.to_str().unwrap());
println!("cargo:rustc-link-search={}", nvtt_path.join(r"lib\x64-v142").to_str().unwrap());
println!("cargo:rustc-link-search={}", nvtt_path.join(r"include\nvtt").to_str().unwrap());
builder = modify_builder(nvtt_path);
}
}
} else {
#[cfg(windows)]
{
unsafe {
let path_pw = windows::Win32::UI::Shell::SHGetKnownFolderPath(
&windows::Win32::UI::Shell::FOLDERID_ProgramFiles,
windows::Win32::UI::Shell::KNOWN_FOLDER_FLAG(0),
windows::Win32::Foundation::HANDLE(0),
)
.expect("Failed to find Program Files");
let pf = PathBuf::from(
path_pw
.to_string()
.expect("Failed to make Program Files path into String"),
);
let nvtt_path = pf.join(r"NVIDIA Corporation\NVIDIA Texture Tools");
println!("cargo:rustc-link-search={}", nvtt_path.to_str().unwrap());
println!(
"cargo:rustc-link-search={}",
nvtt_path.join(r"lib\x64-v142").to_str().unwrap()
);
println!(
"cargo:rustc-link-search={}",
nvtt_path.join(r"include\nvtt").to_str().unwrap()
);
builder = modify_builder(nvtt_path);
}
}
};
cfg_if::cfg_if! {
if #[cfg(windows)] {
println!("cargo:rustc-link-lib=nvtt30106");
} else if #[cfg(unix)] {
println!("cargo:rustc-link-lib=nvtt");
}
}
println!("cargo:rerun-if-changed=wrapper.h");
let bindings = builder
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
.rustified_enum("NvttBoolean")
.rustified_enum("NvttValueType")
.rustified_enum("NvttChannelOrder")
.rustified_enum("NvttFormat")
.rustified_enum("NvttPixelType")
.rustified_enum("NvttQuality")
.rustified_enum("NvttWrapMode")
.rustified_enum("NvttTextureType")
.rustified_enum("NvttInputFormat")
.rustified_enum("NvttMipmapFilter")
.rustified_enum("NvttResizeFilter")
.rustified_enum("NvttRoundMode")
.rustified_enum("NvttAlphaMode")
.rustified_enum("NvttError")
.rustified_enum("NvttContainer")
.rustified_enum("NvttNormalTransform")
.rustified_enum("NvttToneMapper")
.rustified_enum("NvttCubeLayout")
.rustified_enum("EdgeFixup")
.generate()
.expect("Unable to generate bindings");
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Couldn't write bindings!");
}