use std::{ env, fs::File, io::{Read, Write}, path::{Path, PathBuf}, }; use walkdir::WalkDir; fn main() { let ocl_src_dir = Path::new("ocl-src"); let mut files = Vec::new(); for entry in WalkDir::new(ocl_src_dir).into_iter().map(|e| e.unwrap()) { println!("cargo:rerun-if-changed={}", entry.path().display()); if entry.file_type().is_file() { files.push(entry.into_path()); } } let lines = files.into_iter().map(|path| { let mut content = String::new(); File::open(&path).unwrap().read_to_string(&mut content).unwrap(); format!( "\t(r#\"{}\"#, r###\"{}\"###),", path.strip_prefix(ocl_src_dir).unwrap().display(), content, ) }).collect::>(); let text = [ format!("const OCL_SRC_LIST: [(&'static str, &'static str); {}] = [", lines.len()), lines.join("\n"), "];".to_string(), ].join("\n"); let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); let mut out_file = File::create(&out_dir.join("ocl_src_list.rs")).unwrap(); out_file.write_all(text.as_bytes()).unwrap(); }