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");
}
}