mirror of
https://github.com/uutils/coreutils
synced 2024-11-16 09:48:03 +00:00
d4f39e1638
With this change, individual submodules can specify their dependencies with an additional file called "deps.mk" in the subdir. When building, only the dependencies that are necessary are built, using cargo, and then linked. This greatly simplifies adding new dependencies: add the package in deps/Cargo.toml, and add the appropriate line in "deps.mk" in the src/utilname/ directory, and the dependency will be built automatically as needed. This also removes the need to use git submodules.
62 lines
2.5 KiB
Rust
62 lines
2.5 KiB
Rust
#![feature(exit_status)]
|
|
|
|
use std::env;
|
|
use std::fs::File;
|
|
use std::io::{Read, Write};
|
|
|
|
fn main() {
|
|
let args : Vec<String> = env::args().collect();
|
|
if args.len() < 3 {
|
|
println!("usage: mkuutils <outfile> <crates>");
|
|
env::set_exit_status(1);
|
|
return;
|
|
}
|
|
|
|
let mut crates = String::new();
|
|
let mut util_map = String::new();
|
|
let mut hashsum = false;
|
|
for prog in args[2..].iter() {
|
|
match &prog[..] {
|
|
"hashsum" | "md5sum" | "sha1sum" | "sha224sum" | "sha256sum" | "sha384sum" | "sha512sum" => {
|
|
if !hashsum {
|
|
crates.push_str("extern crate hashsum;\n");
|
|
util_map.push_str("map.insert(\"hashsum\", hashsum::uumain);\n");
|
|
util_map.push_str("map.insert(\"md5sum\", hashsum::uumain);\n");
|
|
util_map.push_str("map.insert(\"sha1sum\", hashsum::uumain);\n");
|
|
util_map.push_str("map.insert(\"sha224sum\", hashsum::uumain);\n");
|
|
util_map.push_str("map.insert(\"sha256sum\", hashsum::uumain);\n");
|
|
util_map.push_str("map.insert(\"sha384sum\", hashsum::uumain);\n");
|
|
util_map.push_str("map.insert(\"sha512sum\", hashsum::uumain);\n");
|
|
hashsum = true;
|
|
}
|
|
},
|
|
"true" => {
|
|
util_map.push_str("fn uutrue(_: Vec<String>) -> i32 { 0 }\n");
|
|
util_map.push_str("map.insert(\"true\", uutrue as fn(Vec<String>) -> i32);\n");
|
|
},
|
|
"false" => {
|
|
util_map.push_str("fn uufalse(_: Vec<String>) -> i32 { 1 }\n");
|
|
util_map.push_str("map.insert(\"false\", uufalse as fn(Vec<String>) -> i32);\n");
|
|
},
|
|
_ => {
|
|
crates.push_str(&(format!("extern crate {0} as uu{0};\n", prog))[..]);
|
|
util_map.push_str(&(format!("map.insert(\"{prog}\", uu{prog}::uumain as fn(Vec<String>) -> i32);\n", prog = prog))[..]);
|
|
}
|
|
}
|
|
}
|
|
let outfile = &(args[1])[..];
|
|
|
|
// XXX: this all just assumes that the IO works correctly
|
|
let mut out = File::create(outfile).unwrap();
|
|
let mut input = File::open("src/uutils/uutils.rs").unwrap();
|
|
|
|
let mut template = String::new();
|
|
input.read_to_string(&mut template).unwrap();
|
|
let template = template;
|
|
|
|
let main = template.replace("@CRATES@", &crates[..]).replace("@UTIL_MAP@", &util_map[..]);
|
|
match out.write_all(main.as_bytes()) {
|
|
Err(e) => panic!("{}", e),
|
|
_ => (),
|
|
}
|
|
}
|