# coreutils (uutils) # * see the repository LICENSE, README, and CONTRIBUTING files for more information # spell-checker:ignore (libs) bigdecimal datetime foldhash serde kqueue libcrypto libselinux mangen memmap uuhelp startswith constness expl unnested logind cfgs interner getauxval hashbrown [package] name = "coreutils" description = "coreutils ~ GNU coreutils (updated); implemented as universal (cross-platform) utils, written in Rust" default-run = "coreutils" repository = "https://github.com/uutils/coreutils" edition.workspace = true rust-version.workspace = true version.workspace = true license.workspace = true keywords.workspace = true categories.workspace = true [package.metadata.docs.rs] all-features = true [features] default = ["feat_common_core", "feat_diagnostics"] ## OS feature shortcodes unix = ["feat_os_unix"] windows = ["feat_os_windows"] ## project-specific feature shortcodes expensive_tests = [] # Opt-in: use OpenSSL (libcrypto) for md5/sha1/sha2-family digests in the # checksum utilities instead of the pure-Rust crates. Provides large speedups # on CPUs without SHA-NI. # # Enable with: `cargo build --release --features openssl` # # By default OpenSSL is built from source and statically linked (via the # `vendored` feature of the `openssl` crate). To link against the system # libcrypto/libssl dynamically instead, set `OPENSSL_NO_VENDOR=1` at build time. # # The `?/openssl` entries propagate the choice into each standalone checksum # crate only when that crate is itself enabled, so disabling this feature # genuinely turns OpenSSL off everywhere. openssl = [ "cksum?/openssl", "md5sum?/openssl", "sha1sum?/openssl", "sha224sum?/openssl", "sha256sum?/openssl", "sha384sum?/openssl", "sha512sum?/openssl", "uucore/openssl", ] # "test_risky_names" == enable tests that create problematic file names (would make a network share inaccessible to Windows, breaks SVN on Mac OS, etc.) test_risky_names = [] # * only build `uudoc` when `--feature uudoc` is activated uudoc = [ "dep:clap_complete", "dep:clap_mangen", "dep:fluent-syntax", "dep:jiff", "dep:regex", "dep:zip", ] selinux = ["dep:selinux"] ## features # "feat_diagnostics" == render errors against the argument list with a caret # when stderr is a terminal. On by default; build with `--no-default-features` # (plus a `feat_os_*` selection) to compile the rendering — and its ariadne # dependency — out. Utilities then keep their plain one-line messages. # Enabling `uucore/diagnostics` is enough: cargo unifies features, so every # utility in the build sees it. The matching `diagnostics` feature each `uu_*` # crate declares is there for building that crate on its own, and is # deliberately not listed here. feat_diagnostics = ["uucore/diagnostics"] ## Optional feature for stdbuf # "feat_external_libstdbuf" == use an external libstdbuf.so for stdbuf instead of embedding it feat_external_libstdbuf = ["stdbuf/feat_external_libstdbuf"] # "feat_systemd_logind" == enable feat_systemd_logind support for utmpx replacement feat_systemd_logind = [ "pinky/feat_systemd_logind", "uptime/feat_systemd_logind", "users/feat_systemd_logind", "uucore/feat_systemd_logind", "who/feat_systemd_logind", ] # "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", "feat_require_selinux", "id/selinux", "install/selinux", "ls/selinux", "mkdir/selinux", "mkfifo/selinux", "mknod/selinux", "selinux", "stat/selinux", ] # "feat_smack" == enable support for SMACK Security Context (by using `--features feat_smack`) # NOTE: # * Running a uutils compiled with `feat_smack` requires a SMACK enabled Kernel at run time. feat_smack = [ "id/smack", "ls/smack", "mkdir/smack", "mkfifo/smack", "mknod/smack", ] ## ## 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 = [ "arch", "base32", "base64", "basename", "basenc", "cat", "cksum", "b2sum", "md5sum", "nice", "sha1sum", "sha224sum", "sha256sum", "sha384sum", "sha512sum", "comm", "cp", "csplit", "cut", "date", "dd", "dir", "dircolors", "dirname", "echo", "expand", "expr", "factor", "false", "fmt", "fold", "head", "hostid", "join", "link", "ln", "ls", "mkdir", "mktemp", "mv", "nl", "numfmt", "od", "paste", "pathchk", "pr", "printenv", "printf", "ptx", "pwd", "readlink", "realpath", "rm", "rmdir", "seq", "shred", "shuf", "sleep", "sort", "split", "sum", "tail", "tee", "test", "touch", "tr", "true", "truncate", "tsort", "tty", "uname", "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: ) feat_Tier1 = [ "feat_common_core", "df", "du", "env", "hostname", "kill", "nohup", "nproc", "more", "sync", "tac", "timeout", "uptime", "whoami", ] ## (primary platforms) feature sets # "feat_wasm" == set of utilities which can be built for wasm target # We don't need to support all of wasm targets. So the ambiguous name is used at here feat_wasm = ["feat_common_core", "nproc"] # "feat_os_unix" == set of utilities which can be built/run on modern/usual *nix platforms. feat_os_unix = [ "feat_Tier1", # "feat_require_unix", "feat_require_unix_utmpx", ] # "feat_os_unix_musl" == set of utilities which can be built/run on targets binding to the "musl" library (ref: ) # It excludes stdbuf due to cdylib limitations (https://github.com/rust-lang/rust/issues/82193) feat_os_unix_musl = [ "feat_Tier1", # "feat_require_unix_musl", "feat_require_unix_utmpx", ] # "feat_os_windows" == set of utilities which can be built/run on modern windows platforms feat_os_windows = ["feat_Tier1", "stdbuf"] ## (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_utmpx", ] 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_unix" == set of utilities requiring support which is only available on unix platforms feat_require_unix = ["feat_require_unix_core", "stdbuf"] # "feat_require_unix_musl" == set of utilities requiring unix support, excluding stdbuf (cdylib not supported on musl) feat_require_unix_musl = ["feat_require_unix_core"] # "feat_require_unix_core" == core unix utilities (shared between regular unix and musl) feat_require_unix_core = [ "chgrp", "chmod", "chown", "chroot", "groups", "id", "install", "logname", "mkfifo", "mknod", "stat", "stty", ] # "feat_require_unix_utmpx" == set of utilities requiring unix utmp/utmpx support # * ref: feat_require_unix_utmpx = ["pinky", "uptime", "users", "who"] # "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: ; ) feat_os_unix_fuchsia = [ "feat_common_core", # "chgrp", "chmod", "chown", "du", "groups", "install", "logname", "mkfifo", "mknod", "unlink", ] # "feat_os_unix_redox" == set of utilities which can be built/run on "Redox OS" (refs: ; ) feat_os_unix_redox = [ "feat_common_core", # "chmod", "stat", ] ## # * 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] resolver = "3" members = [ ".", "src/uu/*", "src/uu/stdbuf/src/libstdbuf", "src/uucore", "src/uucore_procs", "tests/uutests", # "fuzz", # TODO ] [workspace.package] categories = ["command-line-utilities"] edition = "2024" rust-version = "1.88.0" homepage = "https://github.com/uutils/coreutils" keywords = ["coreutils", "uutils", "cross-platform", "cli", "utility"] license = "MIT" readme = "README.package.md" version = "0.11.0" [workspace.dependencies] ansi-width = "0.1.0" # The diagnostics rewrite ariadne's output by row number, so a release that # changes the shape of a report is a breaking change here even when it is not # one for ariadne. `uucore`'s `the_rendered_report_has_the_row_shape_the_rewriting_assumes` # is what catches it; keep the bound tight enough that only patch releases # arrive without one running. ariadne = "0.6.0" base64-simd = "0.8" bigdecimal = "0.4" bstr = "1.9.1" bytecount = "0.6.8" cfg_aliases = "0.2.2" clap = { version = "4.5", features = ["wrap_help", "cargo", "color"] } clap_complete = "4.4" clap_mangen = "0.3" crossterm = { version = "0.29.0", default-features = false } ctor = "1.0.0" ctrlc = { version = "3.5.2", features = ["termination"] } data-encoding = "2.6" data-encoding-macro = "0.1.15" divan = { package = "codspeed-divan-compat", version = "5.0.0" } dns-lookup = { version = "4.0.0" } dunce = "1.0.4" filetime = "0.2.29" foldhash = "0.2.0" gcd = "2.3" glob = "0.3.1" half = "2.4.1" hashbrown = '0.17.1' hex-literal = "1.0.0" hostname = "0.4" icu_calendar = { version = "2.0.0", default-features = false } icu_collator = { version = "2.0.0", default-features = false } icu_datetime = { version = "2.0.0", default-features = false } icu_decimal = { version = "2.0.0", default-features = false } icu_locale = { version = "2.0.0", default-features = false } icu_provider = { version = "2.0.0", default-features = false } indicatif = "0.18.0" itertools = "0.15.0" itoa = "1.0.15" jiff = "0.2.18" jiff-icu = "0.2.2" libc = "0.2.186" lscolors = { version = "0.21.0", default-features = false, features = [ "gnu_legacy", ] } memchr = "2.7.2" memmap2 = "0.9.4" nix = { version = "0.31.3", default-features = false } nom = "8.0.0" notify = { version = "8.2.0", features = ["macos_kqueue"] } num-bigint = "0.4.4" num-prime = "0.5.0" num-traits = "0.2.19" fancy-regex = { version = "0.19.2", default-features = false, features = [ "std", "unicode", "leftmost_longest", ] } os_display = "0.1.3" parse_datetime = "0.16.0" phf = "0.14.0" phf_codegen = "0.14.0" platform-info = "2.0.3" pretty_assertions = "1.4.1" proc-macro2 = "1.0.81" procfs = "0.18" rand = { version = "0.10.1", features = ["std_rng"] } rand_chacha = { version = "0.10.0" } rayon = "1.10" regex = "1.10.4" rlimit = "0.11.0" rstest = "0.27.0" rstest_reuse = "0.7.0" rustc-hash = "2.1.1" rust-ini = "0.21.0" rustix = { version = "1.1.4", default-features = false } self_cell = "1.0.4" selinux = "0.6" tempfile = "3.15.0" terminal_size = "0.4.0" textwrap = { version = "0.16.1", features = ["terminal_size"] } thiserror = "2.0.3" time = { version = "0.3.36" } quote = "1.0.36" unicode-width = "0.2.0" unindent = "0.2.3" unit-prefix = "0.5" utmp-classic = "0.1.6" uutils_term_grid = "0.8" walkdir = "2.5" wild = "2.2.1" windows-sys = { version = "0.61.0", default-features = false } xattr = "1.3.1" z85 = "3.0.5" zip = { version = "8.0.0", default-features = false, features = ["deflate"] } hex = "0.4.3" md-5 = { version = "0.11.0", default-features = false, features = ["alloc"] } sha1 = { version = "0.11.0", default-features = false, features = ["alloc"] } sha2 = { version = "0.11.0", default-features = false, features = ["alloc"] } sha3 = { version = "0.12.0", default-features = false, features = ["alloc"] } shake = "0.1.0" blake2b_simd = "1.0.2" blake3 = "1.5.1" sm3 = { version = "0.5.0", default-features = false, features = ["alloc"] } crc-fast = { version = "1.5.0", default-features = false } digest = "0.11.0" openssl = { version = "0.10" } # Fluent dependencies fluent = "0.17.0" unic-langid = "0.9.6" fluent-syntax = "0.12.0" uucore = { version = "0.11.0", path = "src/uucore" } uucore_procs = { version = "0.11.0", path = "src/uucore_procs" } uu_ls = { version = "0.11.0", path = "src/uu/ls" } uu_base32 = { version = "0.11.0", path = "src/uu/base32" } uu_checksum_common = { version = "0.11.0", path = "src/uu/checksum_common" } uutests = { version = "0.11.0", path = "tests/uutests" } # This is the linting configuration for all crates. # In order to use these, all crates have `[lints] workspace = true` section. [workspace.lints.rust] # Introduced to suppress a warning from the from_iter_instead_of_collect lint # which got deprecated with Rust 1.98. # TODO reconsider whether we still need this setting when we have a MSRV >= 1.98 renamed_and_removed_lints = { level = "allow", priority = -1 } # Allow "fuzzing" as a "cfg" condition name and "cygwin" as a value for "target_os" # https://doc.rust-lang.org/nightly/rustc/check-cfg/cargo-specifics.html unexpected_cfgs = { level = "warn", check-cfg = [ 'cfg(fuzzing)', 'cfg(pgo_training)', 'cfg(target_os, values("cygwin"))', 'cfg(wasi_runner)', ] } unused_qualifications = "warn" [workspace.lints.clippy] # The counts were generated with this command: # cargo clippy --all-targets --workspace --message-format=json --quiet \ # | jq -r '.message.code.code | select(. != null and startswith("clippy::"))' \ # | sort | uniq -c | sort -h -r # all = { level = "warn", priority = -1 } cargo = { level = "warn", priority = -1 } pedantic = { level = "warn", priority = -1 } use_self = "warn" # nursery lint cargo_common_metadata = "allow" # 3240 multiple_crate_versions = "allow" # 2882 missing_errors_doc = "allow" # 1572 missing_panics_doc = "allow" # 946 must_use_candidate = "allow" # 322 cast_possible_truncation = "allow" # 122 too_many_lines = "allow" # 101 cast_possible_wrap = "allow" # 78 cast_sign_loss = "allow" # 70 struct_excessive_bools = "allow" # 68 cast_precision_loss = "allow" # 52 cast_lossless = "allow" # 35 ignored_unit_patterns = "allow" # 21 similar_names = "allow" # 20 needless_pass_by_value = "allow" # 16 float_cmp = "allow" # 12 return_self_not_must_use = "allow" # 8 inline_always = "allow" # 6 fn_params_excessive_bools = "allow" # 6 should_panic_without_expect = "allow" # 2 doc_markdown = "allow" unused_self = "allow" enum_glob_use = "allow" unnested_or_patterns = "allow" implicit_hasher = "allow" doc_link_with_quotes = "allow" format_push_string = "allow" flat_map_option = "allow" # TODO lint is deprecated since Rust 1.98, can be removed when we have a MSRV >= 1.98 from_iter_instead_of_collect = "allow" large_types_passed_by_value = "allow" [workspace.metadata.cargo-shear] ignored = ["clap", "fluent", "libstdbuf"] [dependencies] clap.workspace = true clap_complete = { workspace = true, optional = true } clap_mangen = { workspace = true, optional = true } fluent-syntax = { workspace = true, optional = true } itertools.workspace = true jiff = { workspace = true, optional = true } phf.workspace = true regex = { workspace = true, optional = true } textwrap.workspace = true uucore.workspace = true zip = { workspace = true, optional = true } # * uutils uu_test = { optional = true, version = "0.11.0", path = "src/uu/test" } # arch = { optional = true, version = "0.11.0", package = "uu_arch", path = "src/uu/arch" } base32 = { optional = true, version = "0.11.0", package = "uu_base32", path = "src/uu/base32" } base64 = { optional = true, version = "0.11.0", package = "uu_base64", path = "src/uu/base64" } basename = { optional = true, version = "0.11.0", package = "uu_basename", path = "src/uu/basename" } basenc = { optional = true, version = "0.11.0", package = "uu_basenc", path = "src/uu/basenc" } cat = { optional = true, version = "0.11.0", package = "uu_cat", path = "src/uu/cat" } chgrp = { optional = true, version = "0.11.0", package = "uu_chgrp", path = "src/uu/chgrp" } chmod = { optional = true, version = "0.11.0", package = "uu_chmod", path = "src/uu/chmod" } chown = { optional = true, version = "0.11.0", package = "uu_chown", path = "src/uu/chown" } chroot = { optional = true, version = "0.11.0", package = "uu_chroot", path = "src/uu/chroot" } cksum = { optional = true, version = "0.11.0", package = "uu_cksum", path = "src/uu/cksum" } b2sum = { optional = true, version = "0.11.0", package = "uu_b2sum", path = "src/uu/b2sum" } md5sum = { optional = true, version = "0.11.0", package = "uu_md5sum", path = "src/uu/md5sum" } sha1sum = { optional = true, version = "0.11.0", package = "uu_sha1sum", path = "src/uu/sha1sum" } sha224sum = { optional = true, version = "0.11.0", package = "uu_sha224sum", path = "src/uu/sha224sum" } sha256sum = { optional = true, version = "0.11.0", package = "uu_sha256sum", path = "src/uu/sha256sum" } sha384sum = { optional = true, version = "0.11.0", package = "uu_sha384sum", path = "src/uu/sha384sum" } sha512sum = { optional = true, version = "0.11.0", package = "uu_sha512sum", path = "src/uu/sha512sum" } comm = { optional = true, version = "0.11.0", package = "uu_comm", path = "src/uu/comm" } cp = { optional = true, version = "0.11.0", package = "uu_cp", path = "src/uu/cp" } csplit = { optional = true, version = "0.11.0", package = "uu_csplit", path = "src/uu/csplit" } cut = { optional = true, version = "0.11.0", package = "uu_cut", path = "src/uu/cut" } date = { optional = true, version = "0.11.0", package = "uu_date", path = "src/uu/date" } dd = { optional = true, version = "0.11.0", package = "uu_dd", path = "src/uu/dd" } df = { optional = true, version = "0.11.0", package = "uu_df", path = "src/uu/df" } dir = { optional = true, version = "0.11.0", package = "uu_dir", path = "src/uu/dir" } dircolors = { optional = true, version = "0.11.0", package = "uu_dircolors", path = "src/uu/dircolors" } dirname = { optional = true, version = "0.11.0", package = "uu_dirname", path = "src/uu/dirname" } du = { optional = true, version = "0.11.0", package = "uu_du", path = "src/uu/du" } echo = { optional = true, version = "0.11.0", package = "uu_echo", path = "src/uu/echo" } env = { optional = true, version = "0.11.0", package = "uu_env", path = "src/uu/env" } expand = { optional = true, version = "0.11.0", package = "uu_expand", path = "src/uu/expand" } expr = { optional = true, version = "0.11.0", package = "uu_expr", path = "src/uu/expr" } factor = { optional = true, version = "0.11.0", package = "uu_factor", path = "src/uu/factor" } false = { optional = true, version = "0.11.0", package = "uu_false", path = "src/uu/false" } fmt = { optional = true, version = "0.11.0", package = "uu_fmt", path = "src/uu/fmt" } fold = { optional = true, version = "0.11.0", package = "uu_fold", path = "src/uu/fold" } groups = { optional = true, version = "0.11.0", package = "uu_groups", path = "src/uu/groups" } head = { optional = true, version = "0.11.0", package = "uu_head", path = "src/uu/head" } hostid = { optional = true, version = "0.11.0", package = "uu_hostid", path = "src/uu/hostid" } hostname = { optional = true, version = "0.11.0", package = "uu_hostname", path = "src/uu/hostname" } id = { optional = true, version = "0.11.0", package = "uu_id", path = "src/uu/id" } install = { optional = true, version = "0.11.0", package = "uu_install", path = "src/uu/install" } join = { optional = true, version = "0.11.0", package = "uu_join", path = "src/uu/join" } kill = { optional = true, version = "0.11.0", package = "uu_kill", path = "src/uu/kill" } link = { optional = true, version = "0.11.0", package = "uu_link", path = "src/uu/link" } ln = { optional = true, version = "0.11.0", package = "uu_ln", path = "src/uu/ln" } ls = { optional = true, version = "0.11.0", package = "uu_ls", path = "src/uu/ls" } logname = { optional = true, version = "0.11.0", package = "uu_logname", path = "src/uu/logname" } mkdir = { optional = true, version = "0.11.0", package = "uu_mkdir", path = "src/uu/mkdir" } mkfifo = { optional = true, version = "0.11.0", package = "uu_mkfifo", path = "src/uu/mkfifo" } mknod = { optional = true, version = "0.11.0", package = "uu_mknod", path = "src/uu/mknod" } mktemp = { optional = true, version = "0.11.0", package = "uu_mktemp", path = "src/uu/mktemp" } more = { optional = true, version = "0.11.0", package = "uu_more", path = "src/uu/more" } mv = { optional = true, version = "0.11.0", package = "uu_mv", path = "src/uu/mv" } nice = { optional = true, version = "0.11.0", package = "uu_nice", path = "src/uu/nice" } nl = { optional = true, version = "0.11.0", package = "uu_nl", path = "src/uu/nl" } nohup = { optional = true, version = "0.11.0", package = "uu_nohup", path = "src/uu/nohup" } nproc = { optional = true, version = "0.11.0", package = "uu_nproc", path = "src/uu/nproc" } numfmt = { optional = true, version = "0.11.0", package = "uu_numfmt", path = "src/uu/numfmt" } od = { optional = true, version = "0.11.0", package = "uu_od", path = "src/uu/od" } paste = { optional = true, version = "0.11.0", package = "uu_paste", path = "src/uu/paste" } pathchk = { optional = true, version = "0.11.0", package = "uu_pathchk", path = "src/uu/pathchk" } pinky = { optional = true, version = "0.11.0", package = "uu_pinky", path = "src/uu/pinky" } pr = { optional = true, version = "0.11.0", package = "uu_pr", path = "src/uu/pr" } printenv = { optional = true, version = "0.11.0", package = "uu_printenv", path = "src/uu/printenv" } printf = { optional = true, version = "0.11.0", package = "uu_printf", path = "src/uu/printf" } ptx = { optional = true, version = "0.11.0", package = "uu_ptx", path = "src/uu/ptx" } pwd = { optional = true, version = "0.11.0", package = "uu_pwd", path = "src/uu/pwd" } readlink = { optional = true, version = "0.11.0", package = "uu_readlink", path = "src/uu/readlink" } realpath = { optional = true, version = "0.11.0", package = "uu_realpath", path = "src/uu/realpath" } rm = { optional = true, version = "0.11.0", package = "uu_rm", path = "src/uu/rm" } rmdir = { optional = true, version = "0.11.0", package = "uu_rmdir", path = "src/uu/rmdir" } seq = { optional = true, version = "0.11.0", package = "uu_seq", path = "src/uu/seq" } shred = { optional = true, version = "0.11.0", package = "uu_shred", path = "src/uu/shred" } shuf = { optional = true, version = "0.11.0", package = "uu_shuf", path = "src/uu/shuf" } sleep = { optional = true, version = "0.11.0", package = "uu_sleep", path = "src/uu/sleep" } sort = { optional = true, version = "0.11.0", package = "uu_sort", path = "src/uu/sort" } split = { optional = true, version = "0.11.0", package = "uu_split", path = "src/uu/split" } stat = { optional = true, version = "0.11.0", package = "uu_stat", path = "src/uu/stat" } stdbuf = { optional = true, version = "0.11.0", package = "uu_stdbuf", path = "src/uu/stdbuf" } stty = { optional = true, version = "0.11.0", package = "uu_stty", path = "src/uu/stty" } sum = { optional = true, version = "0.11.0", package = "uu_sum", path = "src/uu/sum" } sync = { optional = true, version = "0.11.0", package = "uu_sync", path = "src/uu/sync" } tac = { optional = true, version = "0.11.0", package = "uu_tac", path = "src/uu/tac" } tail = { optional = true, version = "0.11.0", package = "uu_tail", path = "src/uu/tail" } tee = { optional = true, version = "0.11.0", package = "uu_tee", path = "src/uu/tee" } timeout = { optional = true, version = "0.11.0", package = "uu_timeout", path = "src/uu/timeout" } touch = { optional = true, version = "0.11.0", package = "uu_touch", path = "src/uu/touch" } tr = { optional = true, version = "0.11.0", package = "uu_tr", path = "src/uu/tr" } true = { optional = true, version = "0.11.0", package = "uu_true", path = "src/uu/true" } truncate = { optional = true, version = "0.11.0", package = "uu_truncate", path = "src/uu/truncate" } tsort = { optional = true, version = "0.11.0", package = "uu_tsort", path = "src/uu/tsort" } tty = { optional = true, version = "0.11.0", package = "uu_tty", path = "src/uu/tty" } uname = { optional = true, version = "0.11.0", package = "uu_uname", path = "src/uu/uname" } unexpand = { optional = true, version = "0.11.0", package = "uu_unexpand", path = "src/uu/unexpand" } uniq = { optional = true, version = "0.11.0", package = "uu_uniq", path = "src/uu/uniq" } unlink = { optional = true, version = "0.11.0", package = "uu_unlink", path = "src/uu/unlink" } uptime = { optional = true, version = "0.11.0", package = "uu_uptime", path = "src/uu/uptime" } users = { optional = true, version = "0.11.0", package = "uu_users", path = "src/uu/users" } vdir = { optional = true, version = "0.11.0", package = "uu_vdir", path = "src/uu/vdir" } wc = { optional = true, version = "0.11.0", package = "uu_wc", path = "src/uu/wc" } who = { optional = true, version = "0.11.0", package = "uu_who", path = "src/uu/who" } whoami = { optional = true, version = "0.11.0", package = "uu_whoami", path = "src/uu/whoami" } yes = { optional = true, version = "0.11.0", package = "uu_yes", path = "src/uu/yes" } [dev-dependencies] ctor.workspace = true filetime.workspace = true glob.workspace = true jiff.workspace = true libc.workspace = true bytecount.workspace = true num-prime.workspace = true pretty_assertions.workspace = true rand.workspace = true regex.workspace = true rustc-hash.workspace = true sha1 = { workspace = true } tempfile.workspace = true time = { workspace = true, features = ["local-offset"] } unicode-width.workspace = true unindent.workspace = true uutests.workspace = true uucore = { workspace = true, features = [ "mode", "entries", "pipes", "process", "signals", "utmpx", ] } walkdir.workspace = true hex-literal.workspace = true rstest.workspace = true rstest_reuse.workspace = true [target.'cfg(all(any(target_os = "linux", all(target_os = "android", target_pointer_width = "64")), not(target_env = "musl")))'.dependencies] # raw-backend's linux_execfn is not supported on linux < 6.4 if /proc is not mounted. So use-libc-auxv is needed rustix = { workspace = true, features = ["param", "use-libc-auxv"] } [target.'cfg(any(target_os = "linux", target_os = "android"))'.dependencies] selinux = { workspace = true, optional = true } # * uutils chcon = { optional = true, version = "0.11.0", package = "uu_chcon", path = "src/uu/chcon" } runcon = { optional = true, version = "0.11.0", package = "uu_runcon", path = "src/uu/runcon" } # * 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()`) [target.'cfg(unix)'.dev-dependencies] nix = { workspace = true, features = ["fs", "signal"] } rlimit = { workspace = true } rustix = { workspace = true, features = ["net", "process"] } [build-dependencies] phf_codegen.workspace = true [lints] workspace = true [[bin]] name = "coreutils" path = "src/bin/coreutils.rs" [[bin]] name = "uudoc" path = "src/bin/uudoc.rs" required-features = ["uudoc"] [profile.release] lto = "fat" panic = "abort" codegen-units = 1 # A release-like profile that is as small as possible. [profile.release-small] inherits = "release" opt-level = "z" strip = true # A release-like profile with debug info for profiling. # See https://github.com/mstange/samply . [profile.profiling] inherits = "release" panic = "unwind" debug = true