use std::path::PathBuf;
use wolfram_app_discovery::{SystemID, WolframVersion};
const WOLFRAM_VERSION: WolframVersion = WolframVersion::new(13, 0, 1);
fn main() {
env_logger::init();
wolfram_app_discovery::config::set_print_cargo_build_script_directives(true);
if std::env::var("DOCS_RS").is_ok() {
let bindings_path = make_bindings_path(WOLFRAM_VERSION, SystemID::MacOSX_x86_64);
println!(
"cargo:rustc-env=CRATE_WOLFRAM_LIBRARYLINK_SYS_BINDINGS={}",
bindings_path.display()
);
return;
}
let bindings_path = use_pregenerated_bindings();
println!(
"cargo:rustc-env=CRATE_WOLFRAM_LIBRARYLINK_SYS_BINDINGS={}",
bindings_path.display()
);
}
fn use_pregenerated_bindings() -> PathBuf {
let system_id = SystemID::try_from_rust_target(&std::env::var("TARGET").unwrap())
.expect("unable to get System ID for target system");
let bindings_path = make_bindings_path(WOLFRAM_VERSION, system_id);
println!("cargo:rerun-if-changed={}", bindings_path.display());
if !bindings_path.is_file() {
println!(
"
==== ERROR: wolfram-library-link-sys =====
Rust bindings for Wolfram LibraryLink for target configuration:
WolframVersion: {}
SystemID: {}
have not been pre-generated.
See wolfram-library-link-sys/generated/ for a listing of currently available targets.
=========================================
",
WOLFRAM_VERSION, system_id
);
panic!("<See printed error>");
}
bindings_path
}
fn make_bindings_path(wolfram_version: WolframVersion, system_id: SystemID) -> PathBuf {
let bindings_path = PathBuf::from("generated")
.join(&wolfram_version.to_string())
.join(system_id.as_str())
.join("LibraryLink_bindings.rs");
println!(
"cargo:warning=info: using LibraryLink bindings from: {}",
bindings_path.display()
);
let absolute_bindings_path =
PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()).join(&bindings_path);
absolute_bindings_path
}