Skip to main content

Crate libbsd_sys

Crate libbsd_sys 

Source
Expand description

Raw FFI bindings to libbsd.

This crate provides extern "C" declarations for the functions and types exported by libbsd, a library that provides commonly-used BSD functions on GNU/Linux systems.

§Platform support

On macOS, FreeBSD, OpenBSD, and NetBSD, most of these functions are already part of the system C library, so no additional library is needed.

On Linux, the crate uses pkg-config at build time to locate libbsd. On Debian/Ubuntu, install the development headers with:

apt install libbsd-dev

On Windows and other unsupported platforms, this crate is empty.

§Conditional compilation

Functions that only exist in libbsd (not on any BSD natively) are gated behind #[cfg(target_os = "linux")]. Functions available on the BSDs but not macOS are gated behind #[cfg(not(target_os = "macos"))].

The strnvis and strnunvis functions have different parameter orders depending on whether the platform follows the NetBSD convention (macOS, NetBSD, OpenBSD) or the FreeBSD convention (FreeBSD, Linux/libbsd).

§Environment variables

The build script recognizes the following environment variables:

  • LIBBSD_NO_PKG_CONFIG — Set to any value to skip pkg-config entirely. The build script will emit cargo:rustc-link-lib=bsd without any search path. This is useful for running cargo clippy in CI without libbsd-dev installed.

  • LIBBSD_LIB_DIR — Path to the directory containing the libbsd library. Implies LIBBSD_NO_PKG_CONFIG.

  • LIBBSD_INCLUDE_DIR — Path(s) to libbsd headers (colon-separated on Unix). Only used in the manual override path; the include paths are exported as DEP_BSD_INCLUDE for dependent build scripts.

  • LIBBSD_STATIC — Set to 1/true/yes to force static linking, or 0/false/no to force dynamic linking. Overrides the static crate feature when set.

  • DOCS_RS — When set (as it is automatically on docs.rs), the build script skips all linking. This allows documentation builds to succeed without libbsd installed.

§Metadata for dependent crates

This crate sets links = "bsd" in Cargo.toml, so dependent crates’ build scripts can read the following metadata via DEP_BSD_* environment variables:

  • DEP_BSD_INCLUDE — Include paths for libbsd headers (one path per value; there may be multiple include= lines).

  • DEP_BSD_LIBDIR — Library directory (one path per value).