31 lines
1.2 KiB
Rust
31 lines
1.2 KiB
Rust
fn main() {
|
|
// On NetBSD and OpenBSD, inotify is provided by a userspace library
|
|
// (libinotify) rather than the kernel. Link against it when building for
|
|
// those targets.
|
|
//
|
|
// FreeBSD ships native inotify support with libc wrappers in libc.so.7, so
|
|
// the extern declarations resolve against libc directly there.
|
|
let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap();
|
|
|
|
let needs_libinotify = match target_os.as_str() {
|
|
"netbsd" | "openbsd" => true,
|
|
_ => false,
|
|
};
|
|
|
|
if needs_libinotify {
|
|
// Use pkg-config to find the library search path if available,
|
|
// otherwise fall back to /usr/local/lib (the conventional BSD prefix).
|
|
let lib_dir = std::process::Command::new("pkg-config")
|
|
.args(["--variable=libdir", "libinotify"])
|
|
.output()
|
|
.ok()
|
|
.filter(|o| o.status.success())
|
|
.and_then(|o| String::from_utf8(o.stdout).ok())
|
|
.map(|s| s.trim().to_owned())
|
|
.unwrap_or_else(|| "/usr/local/lib".to_owned());
|
|
|
|
println!("cargo:rustc-link-search=native={lib_dir}");
|
|
println!("cargo:rustc-link-lib=inotify");
|
|
}
|
|
}
|