1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-29 20:17:45 +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:
Etienne Cordonnier 2025-05-07 20:01:49 +02:00
parent 2e8b6fabcc
commit 35634b46a0
11 changed files with 476 additions and 267 deletions

View file

@ -58,22 +58,42 @@ skip = [
{ name = "windows-sys", version = "0.48.0" },
# mio, nu-ansi-term, socket2
{ name = "windows-sys", version = "0.52.0" },
# anstyle-query
{ name = "windows-sys", version = "0.59.0" },
# windows-sys
{ name = "windows-targets", version = "0.48.0" },
{ name = "windows-targets", version = "0.48.5" },
# parking_lot_core
{ name = "windows-targets", version = "0.52.6" },
# windows-targets
{ name = "windows_aarch64_gnullvm", version = "0.48.0" },
{ name = "windows_aarch64_gnullvm", version = "0.48.5" },
# windows-targets
{ name = "windows_aarch64_msvc", version = "0.48.0" },
{ name = "windows_aarch64_gnullvm", version = "0.52.6" },
# windows-targets
{ name = "windows_i686_gnu", version = "0.48.0" },
{ name = "windows_aarch64_msvc", version = "0.48.5" },
# windows-targets
{ name = "windows_i686_msvc", version = "0.48.0" },
{ name = "windows_aarch64_msvc", version = "0.52.6" },
# windows-targets
{ name = "windows_x86_64_gnu", version = "0.48.0" },
{ name = "windows_i686_gnu", version = "0.48.5" },
# windows-targets
{ name = "windows_x86_64_gnullvm", version = "0.48.0" },
{ name = "windows_i686_gnu", version = "0.52.6" },
# windows-targets
{ name = "windows_x86_64_msvc", version = "0.48.0" },
{ name = "windows_i686_gnullvm", version = "0.52.6" },
# windows-targets
{ name = "windows_i686_msvc", version = "0.48.5" },
# windows-targets
{ name = "windows_i686_msvc", version = "0.52.6" },
# windows-targets
{ name = "windows_x86_64_gnu", version = "0.48.5" },
# windows-targets
{ name = "windows_x86_64_gnu", version = "0.52.6" },
# windows-targets
{ name = "windows_x86_64_gnullvm", version = "0.48.5" },
# windows-targets
{ name = "windows_x86_64_gnullvm", version = "0.52.6" },
# windows-targets
{ name = "windows_x86_64_msvc", version = "0.48.5" },
# windows-targets
{ name = "windows_x86_64_msvc", version = "0.52.6" },
# kqueue-sys, onig
{ name = "bitflags", version = "1.3.2" },
# ansi-width
@ -98,6 +118,8 @@ skip = [
{ name = "rand_chacha", version = "0.3.1" },
# rand
{ name = "rand_core", version = "0.6.4" },
# utmp-classic
{ name = "zerocopy", version = "0.7.35" },
]
# spell-checker: enable