@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.

@kornel eeeeeeeek. This is extremely messy. I really look forward to making it possible to let Meson handle this, and leaving Cargo as a figure-out-the-rust-deps part.

@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.

Reg├şstrate para participar en la conversaci├│n

La red social del futuro: ┬íSin anuncios, sin vigilancia corporativa, dise├▒o ├ętico, y descentralizaci├│n! ┬íS├ę due├▒o de tu informaci├│n con Mastodon!