coreutils/Cargo.toml
2024-11-25 09:28:35 +01:00

575 lines
22 KiB
TOML

# coreutils (uutils)
# * see the repository LICENSE, README, and CONTRIBUTING files for more information
# spell-checker:ignore (libs) bigdecimal datetime serde bincode fundu gethostid kqueue libselinux mangen memmap procfs uuhelp
[package]
name = "coreutils"
version = "0.0.28"
authors = ["uutils developers"]
license = "MIT"
description = "coreutils ~ GNU coreutils (updated); implemented as universal (cross-platform) utils, written in Rust"
default-run = "coreutils"
homepage = "https://github.com/uutils/coreutils"
repository = "https://github.com/uutils/coreutils"
readme = "README.md"
keywords = ["coreutils", "uutils", "cross-platform", "cli", "utility"]
categories = ["command-line-utilities"]
rust-version = "1.77.0"
edition = "2021"
build = "build.rs"
[package.metadata.docs.rs]
all-features = true
[features]
default = ["feat_common_core"]
## OS feature shortcodes
macos = ["feat_os_macos"]
unix = ["feat_os_unix"]
windows = ["feat_os_windows"]
## project-specific feature shortcodes
nightly = []
test_unimplemented = []
expensive_tests = []
# * only build `uudoc` when `--feature uudoc` is activated
uudoc = ["zip", "dep:uuhelp_parser"]
## features
# "feat_acl" == enable support for ACLs (access control lists; by using`--features feat_acl`)
# NOTE:
# * On linux, the posix-acl/acl-sys crate requires `libacl` headers and shared library to be accessible in the C toolchain at compile time.
# * On FreeBSD and macOS this is not required.
feat_acl = ["cp/feat_acl"]
# "feat_selinux" == enable support for SELinux Security Context (by using `--features feat_selinux`)
# NOTE:
# * The selinux(-sys) crate requires `libselinux` headers and shared library to be accessible in the C toolchain at compile time.
# * Running a uutils compiled with `feat_selinux` requires an SELinux enabled Kernel at run time.
feat_selinux = [
"cp/selinux",
"id/selinux",
"ls/selinux",
"selinux",
"feat_require_selinux",
]
##
## feature sets
## (common/core and Tier1) feature sets
# "feat_common_core" == baseline core set of utilities which can be built/run on most targets
feat_common_core = [
"base32",
"base64",
"basename",
"basenc",
"cat",
"cksum",
"comm",
"cp",
"csplit",
"cut",
"date",
"df",
"dir",
"dircolors",
"dirname",
"dd",
"du",
"echo",
"env",
"expand",
"expr",
"factor",
"false",
"fmt",
"fold",
"hashsum",
"head",
"join",
"link",
"ln",
"ls",
"mkdir",
"mktemp",
"more",
"mv",
"nl",
"numfmt",
"od",
"paste",
"pr",
"printenv",
"printf",
"ptx",
"pwd",
"readlink",
"realpath",
"rm",
"rmdir",
"seq",
"shred",
"shuf",
"sleep",
"sort",
"split",
"sum",
"tac",
"tail",
"tee",
"test",
"tr",
"true",
"truncate",
"tsort",
"touch",
"unexpand",
"uniq",
"unlink",
"vdir",
"wc",
"yes",
]
# "feat_Tier1" == expanded set of utilities which can be built/run on the usual rust "Tier 1" target platforms (ref: <https://forge.rust-lang.org/release/platform-support.html>)
feat_Tier1 = [
"feat_common_core",
#
"arch",
"hostname",
"nproc",
"sync",
"touch",
"uname",
"whoami",
]
## (primary platforms) feature sets
# "feat_os_macos" == set of utilities which can be built/run on the MacOS platform
feat_os_macos = [
"feat_os_unix", ## == a modern/usual *nix platform
#
"feat_require_unix_hostid",
]
# "feat_os_unix" == set of utilities which can be built/run on modern/usual *nix platforms
feat_os_unix = [
"feat_Tier1",
#
"feat_require_crate_cpp",
"feat_require_unix",
"feat_require_unix_utmpx",
"feat_require_unix_hostid",
]
# "feat_os_windows" == set of utilities which can be built/run on modern/usual windows platforms
feat_os_windows = [
"feat_Tier1", ## == "feat_os_windows_legacy" + "hostname"
]
## (secondary platforms) feature sets
# "feat_os_unix_gnueabihf" == set of utilities which can be built/run on the "arm-unknown-linux-gnueabihf" target (ARMv6 Linux [hardfloat])
feat_os_unix_gnueabihf = [
"feat_Tier1",
#
"feat_require_unix",
"feat_require_unix_hostid",
"feat_require_unix_utmpx",
]
# "feat_os_unix_musl" == set of utilities which can be built/run on targets binding to the "musl" library (ref: <https://musl.libc.org/about.html>)
feat_os_unix_musl = [
"feat_Tier1",
#
"feat_require_unix",
"feat_require_unix_hostid",
]
feat_os_unix_android = [
"feat_Tier1",
#
"feat_require_unix",
]
## feature sets with requirements (restricting cross-platform availability)
#
# ** NOTE: these `feat_require_...` sets should be minimized as much as possible to encourage cross-platform availability of utilities
#
# "feat_require_crate_cpp" == set of utilities requiring the `cpp` crate (which fail to compile on several platforms; as of 2020-04-23)
feat_require_crate_cpp = ["stdbuf"]
# "feat_require_unix" == set of utilities requiring support which is only available on unix platforms (as of 2020-04-23)
feat_require_unix = [
"chgrp",
"chmod",
"chown",
"chroot",
"groups",
"id",
"install",
"kill",
"logname",
"mkfifo",
"mknod",
"nice",
"nohup",
"pathchk",
"stat",
"stty",
"timeout",
"tty",
]
# "feat_require_unix_utmpx" == set of utilities requiring unix utmp/utmpx support
# * ref: <https://wiki.musl-libc.org/faq.html#Q:-Why-is-the-utmp/wtmp-functionality-only-implemented-as-stubs?>
feat_require_unix_utmpx = ["pinky", "uptime", "users", "who"]
# "feat_require_unix_hostid" == set of utilities requiring gethostid in libc (only some unixes provide)
feat_require_unix_hostid = ["hostid"]
# "feat_require_selinux" == set of utilities depending on SELinux.
feat_require_selinux = ["chcon", "runcon"]
## (alternate/newer/smaller platforms) feature sets
# "feat_os_unix_fuchsia" == set of utilities which can be built/run on the "Fuchsia" OS (refs: <https://fuchsia.dev>; <https://en.wikipedia.org/wiki/Google_Fuchsia>)
feat_os_unix_fuchsia = [
"feat_common_core",
#
"feat_require_crate_cpp",
#
"chgrp",
"chmod",
"chown",
"du",
"groups",
"hostid",
"install",
"logname",
"mkfifo",
"mknod",
"nice",
"pathchk",
"tty",
"uname",
"unlink",
]
# "feat_os_unix_redox" == set of utilities which can be built/run on "Redox OS" (refs: <https://www.redox-os.org>; <https://en.wikipedia.org/wiki/Redox_(operating_system)>)
feat_os_unix_redox = [
"feat_common_core",
#
"chmod",
"stat",
"uname",
]
# "feat_os_windows_legacy" == slightly restricted set of utilities which can be built/run on early windows platforms (eg, "WinXP")
feat_os_windows_legacy = [
"feat_common_core",
#
"arch",
"nproc",
"sync",
"touch",
"whoami",
]
##
# * bypass/override ~ translate 'test' feature name to avoid dependency collision with rust core 'test' crate (o/w surfaces as compiler errors during testing)
test = ["uu_test"]
[workspace.package]
readme = "README.package.md"
[workspace.dependencies]
ansi-width = "0.1.0"
bigdecimal = "0.4"
binary-heap-plus = "0.5.0"
bstr = "1.9.1"
bytecount = "0.6.8"
byteorder = "1.5.0"
chrono = { version = "0.4.38", default-features = false, features = [
"std",
"alloc",
"clock",
] }
clap = { version = "4.4", features = ["wrap_help", "cargo"] }
clap_complete = "4.4"
clap_mangen = "0.2"
compare = "0.1.0"
coz = { version = "0.1.3" }
crossterm = "0.28.1"
ctrlc = { version = "3.4.4", features = ["termination"] }
dns-lookup = { version = "2.0.4" }
exacl = "0.12.0"
file_diff = "1.0.0"
filetime = "0.2.23"
fnv = "1.0.7"
fs_extra = "1.3.0"
fts-sys = "0.2.9"
fundu = "2.0.0"
gcd = "2.3"
glob = "0.3.1"
half = "2.4.1"
hostname = "0.4"
indicatif = "0.17.8"
itertools = "0.13.0"
libc = "0.2.153"
lscolors = { version = "0.20.0", default-features = false, features = [
"gnu_legacy",
] }
memchr = "2.7.2"
memmap2 = "0.9.4"
nix = { version = "0.29", default-features = false }
nom = "7.1.3"
notify = { version = "=6.0.1", features = ["macos_kqueue"] }
num-bigint = "0.4.4"
num-prime = "0.4.4"
num-traits = "0.2.19"
number_prefix = "0.4"
once_cell = "1.19.0"
onig = { version = "~6.4", default-features = false }
parse_datetime = "0.6.0"
phf = "0.11.2"
phf_codegen = "0.11.2"
platform-info = "2.0.3"
quick-error = "2.0.1"
rand = { version = "0.8.5", features = ["small_rng"] }
rand_core = "0.6.4"
rayon = "1.10"
regex = "1.10.4"
rstest = "0.23.0"
rust-ini = "0.21.0"
same-file = "1.0.6"
self_cell = "1.0.4"
selinux = "0.4.4"
signal-hook = "0.3.17"
smallvec = { version = "1.13.2", features = ["union"] }
tempfile = "3.10.1"
uutils_term_grid = "0.6"
terminal_size = "0.4.0"
textwrap = { version = "0.16.1", features = ["terminal_size"] }
thiserror = "2.0.3"
time = { version = "0.3.36" }
unicode-segmentation = "1.11.0"
unicode-width = "0.1.12"
utf-8 = "0.7.6"
utmp-classic = "0.1.6"
walkdir = "2.5"
winapi-util = "0.1.8"
windows-sys = { version = "0.59.0", default-features = false }
xattr = "1.3.1"
zip = { version = "1.1.4", default-features = false, features = ["deflate"] }
hex = "0.4.3"
md-5 = "0.10.6"
sha1 = "0.10.6"
sha2 = "0.10.8"
sha3 = "0.10.8"
blake2b_simd = "1.0.2"
blake3 = "1.5.1"
sm3 = "0.4.2"
digest = "0.10.7"
uucore = { version = "0.0.28", package = "uucore", path = "src/uucore" }
uucore_procs = { version = "0.0.28", package = "uucore_procs", path = "src/uucore_procs" }
uu_ls = { version = "0.0.28", path = "src/uu/ls" }
uu_base32 = { version = "0.0.28", path = "src/uu/base32" }
[dependencies]
clap = { workspace = true }
once_cell = { workspace = true }
uucore = { workspace = true }
clap_complete = { workspace = true }
clap_mangen = { workspace = true }
phf = { workspace = true }
selinux = { workspace = true, optional = true }
textwrap = { workspace = true }
zip = { workspace = true, optional = true }
uuhelp_parser = { optional = true, version = ">=0.0.19", path = "src/uuhelp_parser" }
# * uutils
uu_test = { optional = true, version = "0.0.28", package = "uu_test", path = "src/uu/test" }
#
arch = { optional = true, version = "0.0.28", package = "uu_arch", path = "src/uu/arch" }
base32 = { optional = true, version = "0.0.28", package = "uu_base32", path = "src/uu/base32" }
base64 = { optional = true, version = "0.0.28", package = "uu_base64", path = "src/uu/base64" }
basename = { optional = true, version = "0.0.28", package = "uu_basename", path = "src/uu/basename" }
basenc = { optional = true, version = "0.0.28", package = "uu_basenc", path = "src/uu/basenc" }
cat = { optional = true, version = "0.0.28", package = "uu_cat", path = "src/uu/cat" }
chcon = { optional = true, version = "0.0.28", package = "uu_chcon", path = "src/uu/chcon" }
chgrp = { optional = true, version = "0.0.28", package = "uu_chgrp", path = "src/uu/chgrp" }
chmod = { optional = true, version = "0.0.28", package = "uu_chmod", path = "src/uu/chmod" }
chown = { optional = true, version = "0.0.28", package = "uu_chown", path = "src/uu/chown" }
chroot = { optional = true, version = "0.0.28", package = "uu_chroot", path = "src/uu/chroot" }
cksum = { optional = true, version = "0.0.28", package = "uu_cksum", path = "src/uu/cksum" }
comm = { optional = true, version = "0.0.28", package = "uu_comm", path = "src/uu/comm" }
cp = { optional = true, version = "0.0.28", package = "uu_cp", path = "src/uu/cp" }
csplit = { optional = true, version = "0.0.28", package = "uu_csplit", path = "src/uu/csplit" }
cut = { optional = true, version = "0.0.28", package = "uu_cut", path = "src/uu/cut" }
date = { optional = true, version = "0.0.28", package = "uu_date", path = "src/uu/date" }
dd = { optional = true, version = "0.0.28", package = "uu_dd", path = "src/uu/dd" }
df = { optional = true, version = "0.0.28", package = "uu_df", path = "src/uu/df" }
dir = { optional = true, version = "0.0.28", package = "uu_dir", path = "src/uu/dir" }
dircolors = { optional = true, version = "0.0.28", package = "uu_dircolors", path = "src/uu/dircolors" }
dirname = { optional = true, version = "0.0.28", package = "uu_dirname", path = "src/uu/dirname" }
du = { optional = true, version = "0.0.28", package = "uu_du", path = "src/uu/du" }
echo = { optional = true, version = "0.0.28", package = "uu_echo", path = "src/uu/echo" }
env = { optional = true, version = "0.0.28", package = "uu_env", path = "src/uu/env" }
expand = { optional = true, version = "0.0.28", package = "uu_expand", path = "src/uu/expand" }
expr = { optional = true, version = "0.0.28", package = "uu_expr", path = "src/uu/expr" }
factor = { optional = true, version = "0.0.28", package = "uu_factor", path = "src/uu/factor" }
false = { optional = true, version = "0.0.28", package = "uu_false", path = "src/uu/false" }
fmt = { optional = true, version = "0.0.28", package = "uu_fmt", path = "src/uu/fmt" }
fold = { optional = true, version = "0.0.28", package = "uu_fold", path = "src/uu/fold" }
groups = { optional = true, version = "0.0.28", package = "uu_groups", path = "src/uu/groups" }
hashsum = { optional = true, version = "0.0.28", package = "uu_hashsum", path = "src/uu/hashsum" }
head = { optional = true, version = "0.0.28", package = "uu_head", path = "src/uu/head" }
hostid = { optional = true, version = "0.0.28", package = "uu_hostid", path = "src/uu/hostid" }
hostname = { optional = true, version = "0.0.28", package = "uu_hostname", path = "src/uu/hostname" }
id = { optional = true, version = "0.0.28", package = "uu_id", path = "src/uu/id" }
install = { optional = true, version = "0.0.28", package = "uu_install", path = "src/uu/install" }
join = { optional = true, version = "0.0.28", package = "uu_join", path = "src/uu/join" }
kill = { optional = true, version = "0.0.28", package = "uu_kill", path = "src/uu/kill" }
link = { optional = true, version = "0.0.28", package = "uu_link", path = "src/uu/link" }
ln = { optional = true, version = "0.0.28", package = "uu_ln", path = "src/uu/ln" }
ls = { optional = true, version = "0.0.28", package = "uu_ls", path = "src/uu/ls" }
logname = { optional = true, version = "0.0.28", package = "uu_logname", path = "src/uu/logname" }
mkdir = { optional = true, version = "0.0.28", package = "uu_mkdir", path = "src/uu/mkdir" }
mkfifo = { optional = true, version = "0.0.28", package = "uu_mkfifo", path = "src/uu/mkfifo" }
mknod = { optional = true, version = "0.0.28", package = "uu_mknod", path = "src/uu/mknod" }
mktemp = { optional = true, version = "0.0.28", package = "uu_mktemp", path = "src/uu/mktemp" }
more = { optional = true, version = "0.0.28", package = "uu_more", path = "src/uu/more" }
mv = { optional = true, version = "0.0.28", package = "uu_mv", path = "src/uu/mv" }
nice = { optional = true, version = "0.0.28", package = "uu_nice", path = "src/uu/nice" }
nl = { optional = true, version = "0.0.28", package = "uu_nl", path = "src/uu/nl" }
nohup = { optional = true, version = "0.0.28", package = "uu_nohup", path = "src/uu/nohup" }
nproc = { optional = true, version = "0.0.28", package = "uu_nproc", path = "src/uu/nproc" }
numfmt = { optional = true, version = "0.0.28", package = "uu_numfmt", path = "src/uu/numfmt" }
od = { optional = true, version = "0.0.28", package = "uu_od", path = "src/uu/od" }
paste = { optional = true, version = "0.0.28", package = "uu_paste", path = "src/uu/paste" }
pathchk = { optional = true, version = "0.0.28", package = "uu_pathchk", path = "src/uu/pathchk" }
pinky = { optional = true, version = "0.0.28", package = "uu_pinky", path = "src/uu/pinky" }
pr = { optional = true, version = "0.0.28", package = "uu_pr", path = "src/uu/pr" }
printenv = { optional = true, version = "0.0.28", package = "uu_printenv", path = "src/uu/printenv" }
printf = { optional = true, version = "0.0.28", package = "uu_printf", path = "src/uu/printf" }
ptx = { optional = true, version = "0.0.28", package = "uu_ptx", path = "src/uu/ptx" }
pwd = { optional = true, version = "0.0.28", package = "uu_pwd", path = "src/uu/pwd" }
readlink = { optional = true, version = "0.0.28", package = "uu_readlink", path = "src/uu/readlink" }
realpath = { optional = true, version = "0.0.28", package = "uu_realpath", path = "src/uu/realpath" }
rm = { optional = true, version = "0.0.28", package = "uu_rm", path = "src/uu/rm" }
rmdir = { optional = true, version = "0.0.28", package = "uu_rmdir", path = "src/uu/rmdir" }
runcon = { optional = true, version = "0.0.28", package = "uu_runcon", path = "src/uu/runcon" }
seq = { optional = true, version = "0.0.28", package = "uu_seq", path = "src/uu/seq" }
shred = { optional = true, version = "0.0.28", package = "uu_shred", path = "src/uu/shred" }
shuf = { optional = true, version = "0.0.28", package = "uu_shuf", path = "src/uu/shuf" }
sleep = { optional = true, version = "0.0.28", package = "uu_sleep", path = "src/uu/sleep" }
sort = { optional = true, version = "0.0.28", package = "uu_sort", path = "src/uu/sort" }
split = { optional = true, version = "0.0.28", package = "uu_split", path = "src/uu/split" }
stat = { optional = true, version = "0.0.28", package = "uu_stat", path = "src/uu/stat" }
stdbuf = { optional = true, version = "0.0.28", package = "uu_stdbuf", path = "src/uu/stdbuf" }
stty = { optional = true, version = "0.0.28", package = "uu_stty", path = "src/uu/stty" }
sum = { optional = true, version = "0.0.28", package = "uu_sum", path = "src/uu/sum" }
sync = { optional = true, version = "0.0.28", package = "uu_sync", path = "src/uu/sync" }
tac = { optional = true, version = "0.0.28", package = "uu_tac", path = "src/uu/tac" }
tail = { optional = true, version = "0.0.28", package = "uu_tail", path = "src/uu/tail" }
tee = { optional = true, version = "0.0.28", package = "uu_tee", path = "src/uu/tee" }
timeout = { optional = true, version = "0.0.28", package = "uu_timeout", path = "src/uu/timeout" }
touch = { optional = true, version = "0.0.28", package = "uu_touch", path = "src/uu/touch" }
tr = { optional = true, version = "0.0.28", package = "uu_tr", path = "src/uu/tr" }
true = { optional = true, version = "0.0.28", package = "uu_true", path = "src/uu/true" }
truncate = { optional = true, version = "0.0.28", package = "uu_truncate", path = "src/uu/truncate" }
tsort = { optional = true, version = "0.0.28", package = "uu_tsort", path = "src/uu/tsort" }
tty = { optional = true, version = "0.0.28", package = "uu_tty", path = "src/uu/tty" }
uname = { optional = true, version = "0.0.28", package = "uu_uname", path = "src/uu/uname" }
unexpand = { optional = true, version = "0.0.28", package = "uu_unexpand", path = "src/uu/unexpand" }
uniq = { optional = true, version = "0.0.28", package = "uu_uniq", path = "src/uu/uniq" }
unlink = { optional = true, version = "0.0.28", package = "uu_unlink", path = "src/uu/unlink" }
uptime = { optional = true, version = "0.0.28", package = "uu_uptime", path = "src/uu/uptime" }
users = { optional = true, version = "0.0.28", package = "uu_users", path = "src/uu/users" }
vdir = { optional = true, version = "0.0.28", package = "uu_vdir", path = "src/uu/vdir" }
wc = { optional = true, version = "0.0.28", package = "uu_wc", path = "src/uu/wc" }
who = { optional = true, version = "0.0.28", package = "uu_who", path = "src/uu/who" }
whoami = { optional = true, version = "0.0.28", package = "uu_whoami", path = "src/uu/whoami" }
yes = { optional = true, version = "0.0.28", package = "uu_yes", path = "src/uu/yes" }
# this breaks clippy linting with: "tests/by-util/test_factor_benches.rs: No such file or directory (os error 2)"
# factor_benches = { optional = true, version = "0.0.0", package = "uu_factor_benches", path = "tests/benches/factor" }
#
# * pinned transitive dependencies
# Not needed for now. Keep as examples:
#pin_cc = { version="1.0.61, < 1.0.62", package="cc" } ## cc v1.0.62 has compiler errors for MinRustV v1.32.0, requires 1.34 (for `std::str::split_ascii_whitespace()`)
[dev-dependencies]
chrono = { workspace = true }
filetime = { workspace = true }
glob = { workspace = true }
libc = { workspace = true }
num-prime = { workspace = true }
pretty_assertions = "1.4.0"
rand = { workspace = true }
regex = { workspace = true }
sha1 = { workspace = true, features = ["std"] }
tempfile = { workspace = true }
time = { workspace = true, features = ["local-offset"] }
unindent = "0.2.3"
uucore = { workspace = true, features = [
"mode",
"entries",
"process",
"signals",
"utmpx",
] }
walkdir = { workspace = true }
hex-literal = "0.4.1"
rstest = { workspace = true }
[target.'cfg(any(target_os = "linux", target_os = "android"))'.dev-dependencies]
procfs = { version = "0.17", default-features = false }
[target.'cfg(unix)'.dev-dependencies]
nix = { workspace = true, features = ["process", "signal", "user", "term"] }
rlimit = "0.10.1"
rand_pcg = "0.3.1"
xattr = { workspace = true }
# Specifically used in test_uptime::test_uptime_with_file_containing_valid_boot_time_utmpx_record
# to deserialize a utmpx struct into a binary file
[target.'cfg(all(target_family= "unix",not(target_os = "macos")))'.dev-dependencies]
serde = { version = "1.0.202", features = ["derive"] }
bincode = { version = "1.3.3" }
serde-big-array = "0.5.1"
[build-dependencies]
phf_codegen = { workspace = true }
[[bin]]
name = "coreutils"
path = "src/bin/coreutils.rs"
[[bin]]
name = "uudoc"
path = "src/bin/uudoc.rs"
required-features = ["uudoc"]
# The default release profile. It contains all optimizations, without
# sacrificing debug info. With this profile (like in the standard
# release profile), the debug info and the stack traces will still be available.
[profile.release]
lto = true
# A release-like profile that is tuned to be fast, even when being fast
# compromises on binary size. This includes aborting on panic.
[profile.release-fast]
inherits = "release"
panic = "abort"
# A release-like profile that is as small as possible.
[profile.release-small]
inherits = "release"
opt-level = "z"
panic = "abort"
strip = true
[lints.clippy]
multiple_crate_versions = "allow"
cargo_common_metadata = "allow"
uninlined_format_args = "allow"
missing_panics_doc = "allow"
use_self = "warn"
needless_pass_by_value = "warn"
semicolon_if_nothing_returned = "warn"
single_char_pattern = "warn"
explicit_iter_loop = "warn"
if_not_else = "warn"
all = { level = "deny", priority = -1 }
cargo = { level = "warn", priority = -1 }
pedantic = { level = "deny", priority = -1 }