mirror of
https://github.com/uutils/coreutils.git
synced 2026-06-10 15:48:22 -07:00
Refactor and simplify build for utilities.
For coreutils, there are two build artifacts:
1. multicall executable (each utility is a separate static library)
2. individual utilities (still separate library with main wrapper)
To avoid namespace collision, each utility crate is defined as
"uu_{CMD}". The end user only sees the original utility name. This
simplifies build.rs.
Also, the thin wrapper for the main() function is no longer contained in
the crate. It has been separated into a dedicated file. This was
necessary to work around Cargo's need for the crate name attribute to
match the name in the respective Cargo.toml.
This commit is contained in:
+2
-2
@@ -177,5 +177,5 @@ rand="*"
|
||||
tempdir="*"
|
||||
|
||||
[[bin]]
|
||||
name="uutils"
|
||||
path="src/uutils/uutils.rs"
|
||||
name = "uutils"
|
||||
path = "src/uutils/uutils.rs"
|
||||
|
||||
@@ -12,49 +12,43 @@ pub fn main() {
|
||||
if val == "1" && key.starts_with(feature_prefix) {
|
||||
let krate = key[feature_prefix.len()..].to_lowercase();
|
||||
match krate.as_ref() {
|
||||
"default" | "unix" | "generic" => continue,
|
||||
_ => {},
|
||||
"default" | "unix" | "generic" => continue,
|
||||
_ => {},
|
||||
}
|
||||
crates.push(krate.to_string());
|
||||
}
|
||||
}
|
||||
crates.sort();
|
||||
|
||||
let mut cf = File::create(Path::new(&out_dir).join("uutils_crates.rs")).unwrap();
|
||||
let mut mf = File::create(Path::new(&out_dir).join("uutils_map.rs")).unwrap();
|
||||
|
||||
mf.write_all("
|
||||
type UtilityMap = HashMap<&'static str, fn(Vec<String>) -> i32>;
|
||||
|
||||
fn util_map() -> UtilityMap {
|
||||
let mut map: UtilityMap = HashMap::new();\n".as_bytes()).unwrap();
|
||||
|
||||
for krate in crates {
|
||||
match krate.as_ref() {
|
||||
"false" | "true" => {},
|
||||
"test" => cf.write_all(format!("extern crate uu{krate};\n", krate=krate).as_bytes()).unwrap(),
|
||||
_ => cf.write_all(format!("extern crate {krate} as uu{krate};\n", krate=krate).as_bytes()).unwrap(),
|
||||
}
|
||||
cf.write_all(format!("extern crate uu_{krate};\n", krate=krate).as_bytes()).unwrap();
|
||||
|
||||
match krate.as_ref() {
|
||||
"hashsum" => {
|
||||
mf.write_all("map.insert(\"hashsum\", uuhashsum::uumain);
|
||||
map.insert(\"md5sum\", uuhashsum::uumain);
|
||||
map.insert(\"sha1sum\", uuhashsum::uumain);
|
||||
map.insert(\"sha224sum\", uuhashsum::uumain);
|
||||
map.insert(\"sha256sum\", uuhashsum::uumain);
|
||||
map.insert(\"sha384sum\", uuhashsum::uumain);
|
||||
map.insert(\"sha512sum\", uuhashsum::uumain);\n".as_bytes()).unwrap();
|
||||
mf.write_all("map.insert(\"hashsum\", uu_hashsum::uumain);
|
||||
map.insert(\"md5sum\", uu_hashsum::uumain);
|
||||
map.insert(\"sha1sum\", uu_hashsum::uumain);
|
||||
map.insert(\"sha224sum\", uu_hashsum::uumain);
|
||||
map.insert(\"sha256sum\", uu_hashsum::uumain);
|
||||
map.insert(\"sha384sum\", uu_hashsum::uumain);
|
||||
map.insert(\"sha512sum\", uu_hashsum::uumain);\n".as_bytes()).unwrap();
|
||||
},
|
||||
"false" =>
|
||||
mf.write_all("fn uufalse(_: Vec<String>) -> i32 { 1 }
|
||||
map.insert(\"false\", uufalse as fn(Vec<String>) -> i32);\n".as_bytes()).unwrap(),
|
||||
"true" =>
|
||||
mf.write_all("fn uutrue(_: Vec<String>) -> i32 { 0 }
|
||||
map.insert(\"true\", uutrue as fn(Vec<String>) -> i32);\n".as_bytes()).unwrap(),
|
||||
_ =>
|
||||
mf.write_all(format!("map.insert(\"{krate}\", uu{krate}::uumain as fn(Vec<String>) -> i32);\n", krate= krate).as_bytes()).unwrap(),
|
||||
mf.write_all(format!("map.insert(\"{krate}\", uu_{krate}::uumain);\n", krate=krate).as_bytes()).unwrap(),
|
||||
}
|
||||
}
|
||||
mf.write_all("map
|
||||
}\n".as_bytes()).unwrap();
|
||||
|
||||
mf.write_all("map\n}\n".as_bytes()).unwrap();
|
||||
|
||||
cf.flush().unwrap();
|
||||
mf.flush().unwrap();
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ version = "0.0.1"
|
||||
authors = []
|
||||
|
||||
[lib]
|
||||
name = "base64"
|
||||
name = "uu_base64"
|
||||
path = "base64.rs"
|
||||
|
||||
[dependencies]
|
||||
@@ -14,5 +14,5 @@ rustc-serialize = "*"
|
||||
uucore = { path="../uucore" }
|
||||
|
||||
[[bin]]
|
||||
name="base64"
|
||||
path="base64.rs"
|
||||
name = "base64"
|
||||
path = "main.rs"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#![crate_name = "base64"]
|
||||
#![crate_name = "uu_base64"]
|
||||
|
||||
/*
|
||||
* This file is part of the uutils coreutils package.
|
||||
@@ -159,8 +159,3 @@ fn help(opts: Options) {
|
||||
fn version() {
|
||||
println!("{} {}", NAME, VERSION);
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn main() {
|
||||
std::process::exit(uumain(std::env::args().collect()));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
extern crate uu_base64;
|
||||
|
||||
fn main() {
|
||||
std::process::exit(uu_base64::uumain(std::env::args().collect()));
|
||||
}
|
||||
@@ -4,7 +4,7 @@ version = "0.0.1"
|
||||
authors = []
|
||||
|
||||
[lib]
|
||||
name = "basename"
|
||||
name = "uu_basename"
|
||||
path = "basename.rs"
|
||||
|
||||
[dependencies]
|
||||
@@ -13,5 +13,5 @@ libc = "*"
|
||||
uucore = { path="../uucore" }
|
||||
|
||||
[[bin]]
|
||||
name="basename"
|
||||
path="basename.rs"
|
||||
name = "basename"
|
||||
path = "main.rs"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#![crate_name = "basename"]
|
||||
#![crate_name = "uu_basename"]
|
||||
|
||||
/*
|
||||
* This file is part of the uutils coreutils package.
|
||||
@@ -105,8 +105,3 @@ fn strip_suffix(name: &str, suffix: &str) -> String {
|
||||
|
||||
name.to_string()
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn main() {
|
||||
std::process::exit(uumain(std::env::args().collect()));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
extern crate uu_basename;
|
||||
|
||||
fn main() {
|
||||
std::process::exit(uu_basename::uumain(std::env::args().collect()));
|
||||
}
|
||||
+3
-3
@@ -4,7 +4,7 @@ version = "0.0.1"
|
||||
authors = []
|
||||
|
||||
[lib]
|
||||
name = "cat"
|
||||
name = "uu_cat"
|
||||
path = "cat.rs"
|
||||
|
||||
[dependencies]
|
||||
@@ -13,5 +13,5 @@ libc = "*"
|
||||
uucore = { path="../uucore" }
|
||||
|
||||
[[bin]]
|
||||
name="cat"
|
||||
path="cat.rs"
|
||||
name = "cat"
|
||||
path = "main.rs"
|
||||
|
||||
+1
-8
@@ -1,4 +1,4 @@
|
||||
#![crate_name = "cat"]
|
||||
#![crate_name = "uu_cat"]
|
||||
|
||||
/*
|
||||
* This file is part of the uutils coreutils package.
|
||||
@@ -339,10 +339,3 @@ impl<'a, W: Write> Drop for UnsafeWriter<'a, W> {
|
||||
let _ = self.flush_buf();
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set ai ts=4 sw=4 sts=4 et : */
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn main() {
|
||||
std::process::exit(uumain(std::env::args().collect()));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
extern crate uu_cat;
|
||||
|
||||
fn main() {
|
||||
std::process::exit(uu_cat::uumain(std::env::args().collect()));
|
||||
}
|
||||
@@ -4,7 +4,7 @@ version = "0.0.1"
|
||||
authors = []
|
||||
|
||||
[lib]
|
||||
name = "chmod"
|
||||
name = "uu_chmod"
|
||||
path = "chmod.rs"
|
||||
|
||||
[dependencies]
|
||||
@@ -18,5 +18,5 @@ uucore = { path="../uucore" }
|
||||
walker = "*"
|
||||
|
||||
[[bin]]
|
||||
name="chmod"
|
||||
path="chmod.rs"
|
||||
name = "chmod"
|
||||
path = "main.rs"
|
||||
|
||||
+1
-6
@@ -1,4 +1,4 @@
|
||||
#![crate_name = "chmod"]
|
||||
#![crate_name = "uu_chmod"]
|
||||
|
||||
/*
|
||||
* This file is part of the uutils coreutils package.
|
||||
@@ -319,8 +319,3 @@ fn chmod_file(file: &Path, name: &str, changes: bool, quiet: bool, verbose: bool
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn main() {
|
||||
std::process::exit(uumain(std::env::args().collect()));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
extern crate uu_chmod;
|
||||
|
||||
fn main() {
|
||||
std::process::exit(uu_chmod::uumain(std::env::args().collect()));
|
||||
}
|
||||
@@ -4,7 +4,7 @@ version = "0.0.1"
|
||||
authors = []
|
||||
|
||||
[lib]
|
||||
name = "chroot"
|
||||
name = "uu_chroot"
|
||||
path = "chroot.rs"
|
||||
|
||||
[dependencies]
|
||||
@@ -13,5 +13,5 @@ libc = "*"
|
||||
uucore = { path="../uucore" }
|
||||
|
||||
[[bin]]
|
||||
name="chroot"
|
||||
path="chroot.rs"
|
||||
name = "chroot"
|
||||
path = "main.rs"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#![crate_name = "chroot"]
|
||||
#![crate_name = "uu_chroot"]
|
||||
|
||||
/*
|
||||
* This file is part of the uutils coreutils package.
|
||||
@@ -216,8 +216,3 @@ If $(SHELL) is not set, /bin/sh is used.", NAME, VERSION);
|
||||
|
||||
print!("{}", options.usage(&msg));
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn main() {
|
||||
std::process::exit(uumain(std::env::args().collect()));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
extern crate uu_chroot;
|
||||
|
||||
fn main() {
|
||||
std::process::exit(uu_chroot::uumain(std::env::args().collect()));
|
||||
}
|
||||
@@ -4,7 +4,7 @@ version = "0.0.1"
|
||||
authors = []
|
||||
|
||||
[lib]
|
||||
name = "cksum"
|
||||
name = "uu_cksum"
|
||||
path = "cksum.rs"
|
||||
|
||||
[dependencies]
|
||||
@@ -13,5 +13,5 @@ libc = "*"
|
||||
uucore = { path="../uucore" }
|
||||
|
||||
[[bin]]
|
||||
name="cksum"
|
||||
path="cksum.rs"
|
||||
name = "cksum"
|
||||
path = "main.rs"
|
||||
|
||||
+1
-6
@@ -1,4 +1,4 @@
|
||||
#![crate_name = "cksum"]
|
||||
#![crate_name = "uu_cksum"]
|
||||
|
||||
/*
|
||||
* This file is part of the uutils coreutils package.
|
||||
@@ -128,8 +128,3 @@ Print CRC and size for each file.", NAME, VERSION);
|
||||
|
||||
exit_code
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn main() {
|
||||
std::process::exit(uumain(std::env::args().collect()));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
extern crate uu_cksum;
|
||||
|
||||
fn main() {
|
||||
std::process::exit(uu_cksum::uumain(std::env::args().collect()));
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user