mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-29 12:07:46 +00:00
stdbuf: fix cross-compilation
Summary: Partial fix for https://github.com/uutils/coreutils/issues/6591 The current code declare libstdbuf as a build-dependency of stdbuf as a workaround to enforce that libstdbuf is compiled before stdbuf. This breaks cross-compilation, because build-dependencies were compiled for the host architecture, and not for the target architecture. The reason this workaround is necessary is that bindeps is available only in nightly at the moment: https://rust-lang.github.io/rfcs/3028-cargo-binary-dependencies.html This commit replaces the "build-dependency" workaround with another workaround: calling cargo manually to build libstdbuf in the build.rs of stdbuf, in order to ensure that libstdbuf is built before stdbuf. Changes: - Removed cpp/cpp_build dependencies: The cpp, cpp_build, and related dependencies were removed because they made cross-compilation in a build.rs file very complex, since you need to pass proper CXX env variables for cross-compilation, whereas cross-compiling rust code using cargo is quite simple. Provided Rust implementations for getting stdin, stdout, and stderr pointers. Switched from C++/cpp macro-based initialization to using the Rust ctor crate for library initialization. - Remove "feat_require_crate_cpp" which is not needed any more, since stdbuf was the only utility using the cpp crate. Tests: This commit fixes e.g. this test: cross test --target aarch64-unknown-linux-gnu --features stdbuf test_stdbuf::test_libstdbuf_preload -- --nocapture - The "i686" build of stdbuf was also broken (stdbuf 32 bits, but libstdbuf 64 bits) and test_stdbuf::test_libstdbuf_preload of the i686 builds in github CI serves as regression test for this issue, no need to add a cross-rs test for aarch64. - The x86_64 musl build of stdbuf was also broken and was passing tests in CI only because it was compiled with the wrong libc (glibc instead of musl) Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
This commit is contained in:
parent
2e8b6fabcc
commit
35634b46a0
11 changed files with 476 additions and 267 deletions
11
Cargo.toml
11
Cargo.toml
|
@ -158,7 +158,6 @@ feat_os_macos = [
|
|||
feat_os_unix = [
|
||||
"feat_Tier1",
|
||||
#
|
||||
"feat_require_crate_cpp",
|
||||
"feat_require_unix",
|
||||
"feat_require_unix_utmpx",
|
||||
"feat_require_unix_hostid",
|
||||
|
@ -185,9 +184,7 @@ feat_os_unix_android = [
|
|||
#
|
||||
# ** 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" == set of utilities requiring support which is only available on unix platforms
|
||||
feat_require_unix = [
|
||||
"chgrp",
|
||||
"chmod",
|
||||
|
@ -204,6 +201,7 @@ feat_require_unix = [
|
|||
"nohup",
|
||||
"pathchk",
|
||||
"stat",
|
||||
"stdbuf",
|
||||
"stty",
|
||||
"timeout",
|
||||
"tty",
|
||||
|
@ -220,8 +218,6 @@ feat_require_selinux = ["chcon", "runcon"]
|
|||
feat_os_unix_fuchsia = [
|
||||
"feat_common_core",
|
||||
#
|
||||
"feat_require_crate_cpp",
|
||||
#
|
||||
"chgrp",
|
||||
"chmod",
|
||||
"chown",
|
||||
|
@ -287,6 +283,7 @@ clap_complete = "4.4"
|
|||
clap_mangen = "0.2"
|
||||
compare = "0.1.0"
|
||||
crossterm = "0.29.0"
|
||||
ctor = "0.4.1"
|
||||
ctrlc = { version = "3.4.7", features = ["termination"] }
|
||||
dns-lookup = { version = "2.0.4" }
|
||||
exacl = "0.12.0"
|
||||
|
@ -502,6 +499,7 @@ yes = { optional = true, version = "0.1.0", package = "uu_yes", path = "src/uu/y
|
|||
|
||||
[dev-dependencies]
|
||||
chrono = { workspace = true }
|
||||
ctor = { workspace = true }
|
||||
filetime = { workspace = true }
|
||||
glob = { workspace = true }
|
||||
libc = { workspace = true }
|
||||
|
@ -524,7 +522,6 @@ uucore = { workspace = true, features = [
|
|||
walkdir = { workspace = true }
|
||||
hex-literal = "1.0.0"
|
||||
rstest = { workspace = true }
|
||||
ctor = "0.4.1"
|
||||
|
||||
[target.'cfg(unix)'.dev-dependencies]
|
||||
nix = { workspace = true, features = ["process", "signal", "user", "term"] }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue