112a9d9c8Sopenharmony_ciuse std::char; 212a9d9c8Sopenharmony_ciuse std::env; 312a9d9c8Sopenharmony_ciuse std::ffi::OsStr; 412a9d9c8Sopenharmony_ciuse std::fs::{self, File}; 512a9d9c8Sopenharmony_ciuse std::io::Write; 612a9d9c8Sopenharmony_ciuse std::path::{Path, PathBuf}; 712a9d9c8Sopenharmony_ci 812a9d9c8Sopenharmony_cipub fn main() { 912a9d9c8Sopenharmony_ci let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); 1012a9d9c8Sopenharmony_ci let mut dst = File::create(Path::new(&out_dir).join("tests.rs")).unwrap(); 1112a9d9c8Sopenharmony_ci 1212a9d9c8Sopenharmony_ci let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); 1312a9d9c8Sopenharmony_ci let headers_dir = manifest_dir.join("tests").join("headers"); 1412a9d9c8Sopenharmony_ci 1512a9d9c8Sopenharmony_ci let headers = match fs::read_dir(headers_dir) { 1612a9d9c8Sopenharmony_ci Ok(dir) => dir, 1712a9d9c8Sopenharmony_ci // We may not have headers directory after packaging. 1812a9d9c8Sopenharmony_ci Err(..) => return, 1912a9d9c8Sopenharmony_ci }; 2012a9d9c8Sopenharmony_ci 2112a9d9c8Sopenharmony_ci let entries = 2212a9d9c8Sopenharmony_ci headers.map(|result| result.expect("Couldn't read header file")); 2312a9d9c8Sopenharmony_ci 2412a9d9c8Sopenharmony_ci println!("cargo:rerun-if-changed=tests/headers"); 2512a9d9c8Sopenharmony_ci 2612a9d9c8Sopenharmony_ci for entry in entries { 2712a9d9c8Sopenharmony_ci match entry.path().extension().and_then(OsStr::to_str) { 2812a9d9c8Sopenharmony_ci Some("h") | Some("hpp") => { 2912a9d9c8Sopenharmony_ci let func = entry 3012a9d9c8Sopenharmony_ci .file_name() 3112a9d9c8Sopenharmony_ci .to_str() 3212a9d9c8Sopenharmony_ci .unwrap() 3312a9d9c8Sopenharmony_ci .replace(|c| !char::is_alphanumeric(c), "_") 3412a9d9c8Sopenharmony_ci .replace("__", "_") 3512a9d9c8Sopenharmony_ci .to_lowercase(); 3612a9d9c8Sopenharmony_ci writeln!( 3712a9d9c8Sopenharmony_ci dst, 3812a9d9c8Sopenharmony_ci "test_header!(header_{}, {:?});", 3912a9d9c8Sopenharmony_ci func, 4012a9d9c8Sopenharmony_ci entry.path(), 4112a9d9c8Sopenharmony_ci ) 4212a9d9c8Sopenharmony_ci .unwrap(); 4312a9d9c8Sopenharmony_ci } 4412a9d9c8Sopenharmony_ci _ => {} 4512a9d9c8Sopenharmony_ci } 4612a9d9c8Sopenharmony_ci } 4712a9d9c8Sopenharmony_ci 4812a9d9c8Sopenharmony_ci dst.flush().unwrap(); 4912a9d9c8Sopenharmony_ci} 50