1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
use std::env;
use std::fs;
use std::io::{self, Write};
use std::path::PathBuf;
fn main() {
lalrpop::Configuration::new().use_cargo_dir_conventions().process().unwrap();
include_test_data().unwrap();
}
/// Builds the index of the test data for use with the `::tests`
/// module.
fn include_test_data() -> io::Result<()> {
let cwd = env::current_dir()?;
let mut sink = fs::File::create(
PathBuf::from(env::var_os("OUT_DIR").unwrap())
.join("tests.index.rs.inc")).unwrap();
writeln!(&mut sink, "{{")?;
let mut dirs = vec![PathBuf::from("tests/data")];
while let Some(dir) = dirs.pop() {
println!("rerun-if-changed={}", dir.to_str().unwrap());
for entry in fs::read_dir(dir).unwrap() {
let entry = entry?;
let path = entry.path();
if path.is_file() {
writeln!(
&mut sink, " add!({:?}, {:?});",
path.components().skip(2)
.map(|c| c.as_os_str().to_str().expect("valid UTF-8"))
.collect::<Vec<_>>().join("/"),
cwd.join(path))?;
} else if path.is_dir() {
dirs.push(path.clone());
}
}
}
writeln!(&mut sink, "}}")?;
Ok(())
}
|