#rustlang build scripts vs. #meson - https://people.gnome.org/~federico/blog/rust-build-scripts.html
@federicomena These are the clean cases. libpng has libpng-config, which is like pkg-config, but not quite. llvm is even worse.
Some scripts both search (in complex ways) or build static, depending on platform and settings.
Exposing include path to parent crate is another use of build.rs (e.g. libpng-sys can read where zlib-sys has found zlib.h).
Enabling cargo features based on detected env (rust version, presence of a lib) is another use.
@federicomena That's the thing — they're all messy :(
The boring reusable parts are handled by build-time deps of build.rs, but the scripts themselves are almost entirely the logic to handle edge cases.
In a way I like that, because the sys crate author worries about all this stuff once, rather than every downstream user reinventing half of it in their build system.
The original server operated by the Mastodon gGmbH non-profit