use std::env;
use std::path::PathBuf;
fn main() {
let libdir_path = PathBuf::from("./vendor/assist/src")
.canonicalize()
.expect("Unable to find libdir");
let headers_path = libdir_path.join("assist.h");
let headers_path_str = headers_path
.to_str()
.expect("Path to headers is not valid UTF-8");
println!("cargo:rerun-if-changed={}", headers_path_str);
println!("cargo:rustc-link-search={}", libdir_path.to_str().unwrap());
println!("cargo:rustc-link-lib=dylib=assist");
let rebound_include = match std::env::var_os("DEP_REBOUND_INCLUDE") {
Some(include) => include.to_string_lossy().into_owned(),
None => panic!("Unable to find rebound include path"),
};
let mut build_cfg = cc::Build::new();
build_cfg
.files(vec![
"vendor/assist/src/assist.c",
"vendor/assist/src/forces.c",
"vendor/assist/src/planets.c",
"vendor/assist/src/spk.c",
])
.include(rebound_include.as_str())
.include("vendor/assist/src")
.warnings(false)
.compile("assist");
let bindings = bindgen::Builder::default()
.header(headers_path_str)
.clang_arg("-I".to_string() + rebound_include.as_str())
.parse_callbacks(Box::new(bindgen::CargoCallbacks))
.allowlist_recursively(false)
.allowlist_var("(assist|ASSIST)_.*")
.allowlist_type("(assist|ASSIST)_.*")
.allowlist_type("(spk|jpl)_s")
.allowlist_function("(assist|ASSIST)_.*")
.raw_line("use rebound_sys::*;")
.generate_comments(true)
.generate()
.expect("Unable to generate bindings");
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
println!("writing bindings to {}", out_path.to_str().unwrap());
bindings
.write_to_file(out_path.join("bindings.rs"))
.expect("Couldn't write bindings!");
}