use std::path::PathBuf; fn main() { let manifest_directory = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()); let dialect = manifest_directory.join("definitions/kaptan.xml"); let config = manifest_directory.join("definitions/kaptan/config.xml"); let log = manifest_directory.join("definitions/kaptan/log.xml"); for definition in [&dialect, &config, &log] { println!("cargo::rerun-if-changed={}", definition.display()); } println!("cargo::rustc-check-cfg=cfg(kaptan_has_messages)"); // The upstream generator conditionally emits derives for these optional // ecosystem crates. Kaptan deliberately does not expose those incomplete // features, so tell rustc the generated inactive cfgs are intentional. println!("cargo::rustc-check-cfg=cfg(feature, values(\"serde\", \"arbitrary\", \"ts-rs\"))"); if std::env::var_os("CARGO_FEATURE_DIALECT_KAPTAN").is_some() { let output_directory = std::env::var("OUT_DIR").unwrap(); let generated = mavlink_bindgen::generate( mavlink_bindgen::XmlDefinitions::Files(vec![dialect]), output_directory, ) .unwrap(); mavlink_bindgen::emit_cargo_build_messages(&generated); println!("cargo::rustc-cfg=kaptan_has_messages"); } }