diff --git a/repbuild/src/main.rs b/repbuild/src/main.rs index 191d5443..0418a1e2 100644 --- a/repbuild/src/main.rs +++ b/repbuild/src/main.rs @@ -12,6 +12,7 @@ use { path::Path, process::{exit, Command}, }, + toml::Value, }; fn main() -> Result<(), Error> { @@ -124,6 +125,10 @@ fn assemble() -> Result<(), Error> { Ok(()) } +fn get_path_without_boot_prefix(val: &Value) -> Option<&str> { + val.as_str()?.split("boot:///").last() +} + fn get_fs() -> Result, io::Error> { let filename = "sysdata/system_config.toml"; @@ -139,10 +144,6 @@ fn get_fs() -> Result, io::Error> { let fs = FileSystem::new(img, FsOptions::new())?; - // TODO: Do not hard code these here - let p = Package::load_from_file("sysdata/programs/tests/meta.toml".to_owned()); - p.build(); - // Read the contents of the file using a `match` block // to return the `data: Ok(c)` as a `String` // or handle any `errors: Err(_)`. @@ -196,12 +197,7 @@ TERM_BACKDROP={} ); // Copy the term_wallpaper to the image - let term_wallpaper_path = term_wallpaper - .as_str() - .unwrap() - .split("boot:///") - .last() - .unwrap(); + let term_wallpaper_path = get_path_without_boot_prefix(term_wallpaper).unwrap(); copy_file_to_img(&format!("sysdata/{}", term_wallpaper_path), &fs); limine_str.push_str(&base); @@ -244,7 +240,22 @@ TERM_BACKDROP={} let modules = value.get_mut("modules").unwrap().as_table_mut().unwrap(); // let mut real_modules = modules.clone(); - for (key, value) in modules.into_iter() { + modules.into_iter().for_each(|(key, value)| { + if value.is_table() && key == "tests" { + let path = get_path_without_boot_prefix( + value.get("path").expect("You must have `path` as a value"), + ) + .unwrap() + .split(".") + .next() + .unwrap(); + let p = Package::load_from_file( + format!("sysdata/programs/{}/meta.toml", path).to_owned(), + ); + p.build(); + } + }); + modules.into_iter().for_each(|(_key, value)| { if value.is_table() { let path = value.get("path").expect("You must have `path` as a value"); let default_value = Value::String("".into()); @@ -258,19 +269,17 @@ TERM_BACKDROP={} ); limine_str.push_str(&a); } - } + }); // Copy modules into the test_programs directory - modules.into_iter().for_each(|(key, value)| { + modules.into_iter().for_each(|(_key, value)| { if value.is_table() { - let path = value - .get("path") - .expect("You must have a `path` as a value") - .as_str() - .unwrap() - .split("boot:///") - .last() - .unwrap(); + let path = get_path_without_boot_prefix( + value + .get("path") + .expect("You must have a `path` as a value"), + ) + .unwrap(); let fpath = format!("target/test-programs/{}", path); copy_file_to_img(&fpath, &fs); }