extern crate pkg_config;
use std::env;
use std::path::{Path, PathBuf};
fn main() {
let env_gmsh = "GMSH_LIB_DIR";
if let Some(lib_dir) = env::var_os(env_gmsh) {
println!("cargo:rerun-if-env-changed={}", env_gmsh);
let lib_dir = Path::new(&lib_dir);
let dylib_name = format!("{}gmsh{}",
env::consts::DLL_PREFIX,
env::consts::DLL_SUFFIX);
if lib_dir.join(dylib_name).exists() ||
lib_dir.join("gmsh.lib").exists() {
println!("cargo:rustc-link-search={}", lib_dir.display());
} else {
println!("cargo:warning={} is set to {:?}, but no shared library files were found there", env_gmsh, lib_dir);
}
}
else {
match try_pkgconfig() {
Ok(link_paths) => { for path in link_paths.into_iter() {
println!("cargo:rustc-link-search={}", path.display());
}
}
Err(not_found) => { eprintln!("pkg-config couldn't find Gmsh library {}, ", not_found) }
}
}
println!("cargo:rustc-link-lib=gmsh");
}
fn try_pkgconfig() -> Result<Vec<PathBuf>, String> {
let mut pkg = pkg_config::Config::new();
pkg.atleast_version("4.4");
match pkg.probe("gmsh") {
Ok(gmsh_lib) => Ok(gmsh_lib.link_paths), Err(err) => Err(err.to_string()), }
}