5 releases
Uses new Rust 2024
| new 0.2.1 | Apr 12, 2026 |
|---|---|
| 0.2.0 | Apr 12, 2026 |
| 0.1.3 | Mar 31, 2026 |
#86 in No standard library
46KB
799 lines
libbsd-sys - raw FFI bindings to libbsd
Caveat non emptor: This crate is AI-generated, perhaps even “vibe-coded,” and free as in “you get what you pay for.”
The readme, though — that’s by me (including the em-dashes.)
I… requested that this code be written… in order to scratch a very specific itch: I wanted to use readpassphrase(3) in a different crate, but to be able to pull my implementation from libbsd or Darwin/BSD libc. As there was not yet a libbsd-sys, I decided to make one. As it was a pretty mechanical task, and as much of the software world is going this way anyway —as though entering an accretion disk around a singularity, or perhaps just circling a drain— I decided to ask Claude to help me.
I will endeavor, with the full force of somebody not getting compensated at all for this and working on it on occasional evenings and weekends, to resolve any bugs and implement any reasonable feature requests.
I do not mean to be squatting on this highly valuable crate name with slop. I do not think this is slop-grade work; I have made some effort to at least check that the code compiles and matches the relevant APIs on the relevant platforms. That said, if a trustworthy person were to come along with a human-generated alternative of reasonable quality, I am quite open to ceding the name.
Usage
Add the following to your Cargo.toml:
[target.'cfg(not(target_os = "windows"))'.dependencies]
libbsd-sys = "0.2"
Features
On Linux, the following crate features are available:
staticrequests static linkage oflibbsd.overlayrequestslibbsd-overlayinstead oflibbsd, so that downstream crates that compile C code can use plain<string.h>instead of<bsd/string.h>.
On non-Linux, these features are no-ops.
Environment variables
If pkg-config can't find libbsd, the build script emits a
cargo:warning and skips the link step instead of aborting the build.
That way cargo clippy and cargo check in downstream crates work
without libbsd-dev installed; only the actual link step of a binary
that references libbsd symbols will fail, and the warning tells the user
what to install.
The build script recognizes the following environment variables:
LIBBSD_NO_PKG_CONFIG— skippkg-configprobing, as in the pkg-config-rs convention. On its own, the build script emits norustc-link-libdirective at all. To produce a working binary in this mode, either setLIBBSD_LIB_DIRor arrange linkage yourself (e.g. viaRUSTFLAGS="-l bsd").LIBBSD_LIB_DIR— path to the directory containing the libbsd library. Skipspkg-configand emits a search path andrustc-link-libdirective pointing at this directory.LIBBSD_INCLUDE_DIR— path(s) to libbsd headers (colon-separated on Unix). Only used in the manual override path.LIBBSD_STATIC—1/true/yesto force static linking,0/false/noto force dynamic. Overrides thestaticcrate feature.DOCS_RS— when set (as it is automatically on docs.rs), the build script skips all linking.
Metadata for dependent crates
This crate sets links = "bsd", so dependent build scripts can read:
DEP_BSD_INCLUDE— include paths for libbsd headers (one per line).DEP_BSD_LIBDIR— library directory (one per line).
Requirements
On Linux, libbsd is required to produce a working binary. Usually the package will be named something like libbsd-dev or libbsd-devel. If you do not use the static feature, then your users will also have to have the non-devel libbsd package installed.
cargo clippy and cargo check work without libbsd installed — the
build script warns and skips the link step.
We depend on at least libbsd 0.11.
Dependencies
~46KB