diff --git a/build.rs b/build.rs index 6998d60a4..5a9ce3cd5 100644 --- a/build.rs +++ b/build.rs @@ -6,6 +6,8 @@ use std::io::Write; use std::path::Path; pub fn main() { + // println!("cargo:warning=Running build.rs"); + if let Ok(profile) = env::var("PROFILE") { println!("cargo:rustc-cfg=build={:?}", profile); } @@ -15,6 +17,11 @@ pub fn main() { let override_prefix: &str = "uu_"; let out_dir = env::var("OUT_DIR").unwrap(); + // println!("cargo:warning=out_dir={}", out_dir); + let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap().replace("\\", "/"); + // println!("cargo:warning=manifest_dir={}", manifest_dir); + let util_tests_dir = format!("{}/tests/by-util", manifest_dir); + // println!("cargo:warning=util_tests_dir={}", util_tests_dir); let mut crates = Vec::new(); for (key, val) in env::vars() { @@ -33,6 +40,7 @@ pub fn main() { crates.sort(); let mut mf = File::create(Path::new(&out_dir).join("uutils_map.rs")).unwrap(); + let mut tf = File::create(Path::new(&out_dir).join("test_modules.rs")).unwrap(); mf.write_all( "type UtilityMap = HashMap<&'static str, fn(Vec) -> i32>;\n\ @@ -46,8 +54,8 @@ pub fn main() { for krate in crates { match krate.as_ref() { - k if k.starts_with(override_prefix) => mf - .write_all( + k if k.starts_with(override_prefix) => { + mf.write_all( format!( "\tmap.insert(\"{k}\", {krate}::uumain);\n", k = krate[override_prefix.len()..].to_string(), @@ -55,18 +63,38 @@ pub fn main() { ) .as_bytes(), ) - .unwrap(), - "false" | "true" => mf - .write_all( + .unwrap(); + tf.write_all( + format!( + "#[path=\"{dir}/test_{k}.rs\"]\nmod test_{k};\n", + k = krate[override_prefix.len()..].to_string(), + dir = util_tests_dir, + ) + .as_bytes(), + ) + .unwrap() + } + "false" | "true" => { + mf.write_all( format!( "\tmap.insert(\"{krate}\", r#{krate}::uumain);\n", krate = krate ) .as_bytes(), ) - .unwrap(), - "hashsum" => mf - .write_all( + .unwrap(); + tf.write_all( + format!( + "#[path=\"{dir}/test_{krate}.rs\"]\nmod test_{krate};\n", + krate = krate, + dir = util_tests_dir, + ) + .as_bytes(), + ) + .unwrap() + } + "hashsum" => { + mf.write_all( format!( "\ \tmap.insert(\"{krate}\", {krate}::uumain);\n\ @@ -88,20 +116,41 @@ pub fn main() { ) .as_bytes(), ) - .unwrap(), - _ => mf - .write_all( + .unwrap(); + tf.write_all( + format!( + "#[path=\"{dir}/test_{krate}.rs\"]\nmod test_{krate};\n", + krate = krate, + dir = util_tests_dir, + ) + .as_bytes(), + ) + .unwrap() + } + _ => { + mf.write_all( format!( "\tmap.insert(\"{krate}\", {krate}::uumain);\n", krate = krate ) .as_bytes(), ) - .unwrap(), + .unwrap(); + tf.write_all( + format!( + "#[path=\"{dir}/test_{krate}.rs\"]\nmod test_{krate};\n", + krate = krate, + dir = util_tests_dir, + ) + .as_bytes(), + ) + .unwrap() + } } } mf.write_all(b"map\n}\n").unwrap(); mf.flush().unwrap(); + tf.flush().unwrap(); }