33 lines
1.1 KiB
Rust
33 lines
1.1 KiB
Rust
|
use std::path::Path;
|
||
|
|
||
|
fn main() {
|
||
|
let protobuf = Path::new("protobuf").to_owned();
|
||
|
|
||
|
// Build script does not automagically rerun when a new protobuf file is added.
|
||
|
// Directories are checked against mtime, which is platform specific
|
||
|
println!("cargo:rerun-if-changed=protobuf");
|
||
|
// Adding src/proto.rs means an extra `include!` will trigger a rerun. This is on best-effort
|
||
|
// basis.
|
||
|
println!("cargo:rerun-if-changed=src/proto.rs");
|
||
|
|
||
|
let input: Vec<_> = protobuf
|
||
|
.read_dir()
|
||
|
.expect("protobuf directory")
|
||
|
.filter_map(|entry| {
|
||
|
let entry = entry.expect("readable protobuf directory");
|
||
|
let path = entry.path();
|
||
|
if Some("proto")
|
||
|
== path.extension().and_then(std::ffi::OsStr::to_str)
|
||
|
{
|
||
|
assert!(path.is_file());
|
||
|
println!("cargo:rerun-if-changed={}", path.to_str().unwrap());
|
||
|
Some(path)
|
||
|
} else {
|
||
|
None
|
||
|
}
|
||
|
})
|
||
|
.collect();
|
||
|
|
||
|
prost_build::compile_protos(&input, &[protobuf]).unwrap();
|
||
|
}
|