mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-29 20:17:45 +00:00
uutils: auto-generate programs to be built
This commit is contained in:
parent
141e858407
commit
5abb69df0d
3 changed files with 56 additions and 119 deletions
12
Makefile
12
Makefile
|
@ -149,15 +149,12 @@ tmp/$(1)_test: $(1)/test.rs
|
||||||
endef
|
endef
|
||||||
|
|
||||||
# Main rules
|
# Main rules
|
||||||
ifeq ($(BUILD), $(PROGS))
|
|
||||||
all: $(EXES_PATHS) build/uutils
|
all: $(EXES_PATHS) build/uutils
|
||||||
|
|
||||||
-include build/uutils.d
|
-include build/uutils.d
|
||||||
build/uutils: uutils/uutils.rs $(addprefix build/, $(addsuffix .timestamp, $(CRATES)))
|
build/uutils: uutils/uutils.rs build/mkuutils $(addprefix build/, $(addsuffix .timestamp, $(CRATES)))
|
||||||
$(RUSTC) $(RUSTCFLAGS) -L build/ --dep-info $@.d uutils/uutils.rs -o $@
|
build/mkuutils build/gen/uutils.rs $(BUILD)
|
||||||
else
|
$(RUSTC) $(RUSTCFLAGS) -L build/ --dep-info $@.d build/gen/uutils.rs -o $@
|
||||||
all: $(EXES_PATHS)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
LIBCRYPTO = $(shell $(RUSTC) --crate-file-name --crate-type rlib deps/rust-crypto/src/rust-crypto/lib.rs)
|
LIBCRYPTO = $(shell $(RUSTC) --crate-file-name --crate-type rlib deps/rust-crypto/src/rust-crypto/lib.rs)
|
||||||
|
@ -168,6 +165,9 @@ build/$(LIBCRYPTO): | build
|
||||||
build/mkmain: mkmain.rs | build
|
build/mkmain: mkmain.rs | build
|
||||||
$(RUSTC) $(RUSTCFLAGS) -L build mkmain.rs -o $@
|
$(RUSTC) $(RUSTCFLAGS) -L build mkmain.rs -o $@
|
||||||
|
|
||||||
|
build/mkuutils: mkuutils.rs | build
|
||||||
|
$(RUSTC) $(RUSTCFLAGS) -L build mkuutils.rs -o $@
|
||||||
|
|
||||||
deps: build/$(LIBCRYPTO)
|
deps: build/$(LIBCRYPTO)
|
||||||
|
|
||||||
crates:
|
crates:
|
||||||
|
|
48
mkuutils.rs
Normal file
48
mkuutils.rs
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
use std::io::{File, Truncate, Write};
|
||||||
|
use std::os;
|
||||||
|
use std::path::Path;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let args = os::args();
|
||||||
|
if args.len() < 3 {
|
||||||
|
println!("usage: mkuutils <outfile> <crates>");
|
||||||
|
os::set_exit_status(1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut crates = String::new();
|
||||||
|
let mut util_map = String::new();
|
||||||
|
let mut hashsum = false;
|
||||||
|
for prog in args.slice_from(2).iter() {
|
||||||
|
match prog.as_slice() {
|
||||||
|
"md5sum" | "sha1sum" | "sha224sum" | "sha256sum" | "sha384sum" | "sha512sum" => {
|
||||||
|
if !hashsum {
|
||||||
|
crates.push_str("extern crate hashsum;\n");
|
||||||
|
hashsum = true;
|
||||||
|
}
|
||||||
|
util_map.push_str(format!("map.insert(\"{}\", hashsum::uumain);\n", prog).as_slice());
|
||||||
|
}
|
||||||
|
"true" => util_map.push_str("map.insert(\"true\", uutrue);\n"),
|
||||||
|
"false" => util_map.push_str("map.insert(\"false\", uufalse);\n"),
|
||||||
|
"sync" => {
|
||||||
|
crates.push_str("extern crate uusync;\n");
|
||||||
|
util_map.push_str("map.insert(\"sync\", uusync::uumain);\n");
|
||||||
|
}
|
||||||
|
_ => {
|
||||||
|
crates.push_str(format!("extern crate {};\n", prog).as_slice());
|
||||||
|
util_map.push_str(format!("map.insert(\"{prog}\", {prog}::uumain);\n", prog = prog).as_slice());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let outfile = args.get(1).as_slice();
|
||||||
|
|
||||||
|
// XXX: this all just assumes that the IO works correctly
|
||||||
|
let mut out = File::open_mode(&Path::new(outfile), Truncate, Write).unwrap();
|
||||||
|
let mut input = File::open(&Path::new("uutils/uutils.rs")).unwrap();
|
||||||
|
let main = input.read_to_str().unwrap().replace("@CRATES@", crates.as_slice()).replace("@UTIL_MAP@", util_map.as_slice());
|
||||||
|
|
||||||
|
match out.write(main.as_bytes()) {
|
||||||
|
Err(e) => fail!("{}", e),
|
||||||
|
_ => (),
|
||||||
|
}
|
||||||
|
}
|
115
uutils/uutils.rs
115
uutils/uutils.rs
|
@ -11,59 +11,7 @@
|
||||||
|
|
||||||
extern crate getopts;
|
extern crate getopts;
|
||||||
|
|
||||||
extern crate base64;
|
@CRATES@
|
||||||
extern crate basename;
|
|
||||||
extern crate cat;
|
|
||||||
extern crate chroot;
|
|
||||||
extern crate cksum;
|
|
||||||
extern crate comm;
|
|
||||||
extern crate cp;
|
|
||||||
extern crate cut;
|
|
||||||
extern crate dirname;
|
|
||||||
extern crate du;
|
|
||||||
extern crate echo;
|
|
||||||
extern crate env;
|
|
||||||
extern crate factor;
|
|
||||||
extern crate fmt;
|
|
||||||
extern crate fold;
|
|
||||||
extern crate groups;
|
|
||||||
extern crate head;
|
|
||||||
extern crate hostid;
|
|
||||||
extern crate hostname;
|
|
||||||
extern crate id;
|
|
||||||
extern crate kill;
|
|
||||||
extern crate link;
|
|
||||||
extern crate logname;
|
|
||||||
extern crate hashsum;
|
|
||||||
extern crate mkdir;
|
|
||||||
extern crate mkfifo;
|
|
||||||
extern crate nl;
|
|
||||||
extern crate nohup;
|
|
||||||
extern crate paste;
|
|
||||||
extern crate printenv;
|
|
||||||
extern crate pwd;
|
|
||||||
extern crate realpath;
|
|
||||||
extern crate relpath;
|
|
||||||
extern crate rm;
|
|
||||||
extern crate rmdir;
|
|
||||||
extern crate seq;
|
|
||||||
extern crate sleep;
|
|
||||||
extern crate sum;
|
|
||||||
extern crate uusync;
|
|
||||||
extern crate tac;
|
|
||||||
extern crate tail;
|
|
||||||
extern crate tee;
|
|
||||||
extern crate touch;
|
|
||||||
extern crate tr;
|
|
||||||
extern crate truncate;
|
|
||||||
extern crate tty;
|
|
||||||
extern crate uname;
|
|
||||||
extern crate unlink;
|
|
||||||
extern crate uptime;
|
|
||||||
extern crate users;
|
|
||||||
extern crate wc;
|
|
||||||
extern crate whoami;
|
|
||||||
extern crate yes;
|
|
||||||
|
|
||||||
use std::os;
|
use std::os;
|
||||||
use std::collections::hashmap::HashMap;
|
use std::collections::hashmap::HashMap;
|
||||||
|
@ -76,66 +24,7 @@ fn util_map() -> HashMap<&str, fn(Vec<String>) -> int> {
|
||||||
fn uufalse(_: Vec<String>) -> int { 1 }
|
fn uufalse(_: Vec<String>) -> int { 1 }
|
||||||
|
|
||||||
let mut map = HashMap::new();
|
let mut map = HashMap::new();
|
||||||
map.insert("base64", base64::uumain);
|
@UTIL_MAP@
|
||||||
map.insert("basename", basename::uumain);
|
|
||||||
map.insert("cat", cat::uumain);
|
|
||||||
map.insert("chroot", chroot::uumain);
|
|
||||||
map.insert("cksum", cksum::uumain);
|
|
||||||
map.insert("comm", comm::uumain);
|
|
||||||
map.insert("cp", cp::uumain);
|
|
||||||
map.insert("cut", cut::uumain);
|
|
||||||
map.insert("dirname", dirname::uumain);
|
|
||||||
map.insert("du", du::uumain);
|
|
||||||
map.insert("echo", echo::uumain);
|
|
||||||
map.insert("env", env::uumain);
|
|
||||||
map.insert("factor", factor::uumain);
|
|
||||||
map.insert("false", uufalse);
|
|
||||||
map.insert("fmt", fmt::uumain);
|
|
||||||
map.insert("fold", fold::uumain);
|
|
||||||
map.insert("groups", groups::uumain);
|
|
||||||
map.insert("head", head::uumain);
|
|
||||||
map.insert("hostid", hostid::uumain);
|
|
||||||
map.insert("hostname", hostname::uumain);
|
|
||||||
map.insert("id", id::uumain);
|
|
||||||
map.insert("kill", kill::uumain);
|
|
||||||
map.insert("link", link::uumain);
|
|
||||||
map.insert("logname", logname::uumain);
|
|
||||||
map.insert("md5sum", hashsum::uumain);
|
|
||||||
map.insert("sha1sum", hashsum::uumain);
|
|
||||||
map.insert("sha224sum", hashsum::uumain);
|
|
||||||
map.insert("sha256sum", hashsum::uumain);
|
|
||||||
map.insert("sha384sum", hashsum::uumain);
|
|
||||||
map.insert("sha512sum", hashsum::uumain);
|
|
||||||
map.insert("mkdir", mkdir::uumain);
|
|
||||||
map.insert("mkfifo", mkfifo::uumain);
|
|
||||||
map.insert("nl", nl::uumain);
|
|
||||||
map.insert("nohup", nohup::uumain);
|
|
||||||
map.insert("paste", paste::uumain);
|
|
||||||
map.insert("printenv", printenv::uumain);
|
|
||||||
map.insert("pwd", pwd::uumain);
|
|
||||||
map.insert("realpath", realpath::uumain);
|
|
||||||
map.insert("relpath", relpath::uumain);
|
|
||||||
map.insert("rm", rm::uumain);
|
|
||||||
map.insert("rmdir", rmdir::uumain);
|
|
||||||
map.insert("seq", seq::uumain);
|
|
||||||
map.insert("sleep", sleep::uumain);
|
|
||||||
map.insert("sum", sum::uumain);
|
|
||||||
map.insert("sync", uusync::uumain);
|
|
||||||
map.insert("tac", tac::uumain);
|
|
||||||
map.insert("tail", tail::uumain);
|
|
||||||
map.insert("tee", tee::uumain);
|
|
||||||
map.insert("touch", touch::uumain);
|
|
||||||
map.insert("tr", tr::uumain);
|
|
||||||
map.insert("true", uutrue);
|
|
||||||
map.insert("truncate", truncate::uumain);
|
|
||||||
map.insert("tty", tty::uumain);
|
|
||||||
map.insert("uname", uname::uumain);
|
|
||||||
map.insert("unlink", unlink::uumain);
|
|
||||||
map.insert("uptime", uptime::uumain);
|
|
||||||
map.insert("users", users::uumain);
|
|
||||||
map.insert("wc", wc::uumain);
|
|
||||||
map.insert("whoami", whoami::uumain);
|
|
||||||
map.insert("yes", yes::uumain);
|
|
||||||
map
|
map
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue