fn main() { // Get nix version let nix_version = pkg_config::probe_library("nix-store-c").unwrap().version; // Generate version flags // Unfortunately, Rust doesn't give us a "greater than" operator in conditional // compilation, so we pre-evaluate the version comparisons here, making use // of the multi-valued nature of Rust cfgs. let relevant_versions = vec!["2.26"]; let versions = relevant_versions .iter() .map(|v| format!("\"{}\"", v)) .collect::>() .join(","); // Declare the known versions, so that Rust can warn about unknown versions // that aren't part of `relevant_versions` yet - feel free to add entries. println!( "cargo:rustc-check-cfg=cfg(nix_at_least,values({}))", versions ); let nix_version = nix_version.split('.').collect::>(); let nix_version = ( nix_version[0].parse::().unwrap(), nix_version[1].parse::().unwrap(), ); for version_str in relevant_versions { let version = version_str.split('.').collect::>(); let version = ( version[0].parse::().unwrap(), version[1].parse::().unwrap(), ); if nix_version >= version { println!("cargo:rustc-cfg=nix_at_least=\"{}\"", version_str); } } }