Fixes https://github.com/uutils/coreutils/issues/6591
"feat_external_stdbuf": use an external libstdbuf.so for stdbuf instead of embedding it into
the stdbuf binary.
There are 2 use-cases:
1. Installation of uutils-coreutils using cargo install (e.g. from crates.io
which supports only "cargo install" as installation method). In this case,
installing libstdbuf.so is impossible, because "cargo install" installs
only binary programs (no cdylib), thus libstdbuf.so must be embedded into
stdbuf and written to /tmp at runtime. This is a hack, and may not work
on some platforms, e.g. because the SELinux permissions may not allow
stdbuf to write to /tmp, /tmp may be read-only, libstdbuf.so may not work
at all without SELinux labels, etc.
2. Installation of uutils-coreutils using an external tool, e.g. dpkg/apt on
debian. In this case, libstdbuf.so should be installed separately to its
correct location and the environment variable LIBSTDBUF_PATH configures the
installation path during the build. E.g. LIBSTDBUF_PATH="/lib/libstdbuf.so"
Signed-off-by: Etienne Cordonnier <ecordonnier@snap.com>
* chore: cleanup workspace crates
* properly add all crates to the workspace cargo.toml as members
* except `fuzz` because it still has some issues, TBD
* use quotes around `true` and `false` to ensure there is no bool confusion
* remove a few leftover readme comments
* mark all unpublishable crates as `publish = false` to avoid accidental publishing
* Add `uutests` to the main workspace
* grammar
* a bit more cleanup based on feedback
* revert true/false
* Update tests/benches/factor dependencies
* cp: migrate from quick-error to thiserror
fixes: #7916
* Remove quick-error
Now that we have migrated to thiserror, we can remove quick-error
* cp: fix test failures
* cp: fix fmt error
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>
* update chrono crate version and switch to new_lenient use
* bring back custom_tz_fmt and update test
* update chrono version in fuzz lock file
* replace boxing with parse_to_owned