extern crate walkdir;
use std::path::PathBuf;
use walkdir::WalkDir;
fn generate_rust_module() -> String {
let mut rust_lib = String::new();
let out_dir = std::env::var("OUT_DIR").unwrap();
rust_lib.push_str("{");
for entry in WalkDir::new("std").into_iter().filter_map(|e| e.ok()) {
let path = entry.into_path();
let path_str = path.to_string_lossy().to_string();
let fixed_path_str = path_str.replace(std::path::MAIN_SEPARATOR, "/");
if path.is_file() && !path_str.ends_with("_test.ucg") {
println!("Adding lib file: {}", path_str);
let out_path = PathBuf::from(format!(
"{}{}{}",
out_dir,
std::path::MAIN_SEPARATOR,
path_str
));
std::fs::create_dir_all(out_path.parent().unwrap()).unwrap();
std::fs::copy(&path_str, &out_path).unwrap();
let include = format!(
"\tstdlib.insert(\n\t\tr\"{}\".to_string(),\n\t\tinclude_str!(r\"{}{}{}\"));\n",
fixed_path_str,
out_dir,
std::path::MAIN_SEPARATOR,
path_str
);
rust_lib.push_str(&include);
rust_lib.push_str("\n");
}
}
rust_lib.push_str("}");
println!("Finished Adding lib files");
rust_lib
}
fn main() {
let contents = generate_rust_module();
let out_dir = std::env::var("OUT_DIR").unwrap();
std::fs::write(
format!("{}/stdlib_generated.rs", out_dir),
contents.as_bytes(),
)
.unwrap();
}