IMO, for build dependencies you can get pretty far with a namespace system and a few initial namespaces, e.g.:
-
pkgconfig:libsslfor a C library (on Unix) -
command:ccfor a C compiler (on Unix) -
conda:clangfor a Conda package -
crate:pyo3for a Rust crate
Perhaps allow ORing them together (command:cc or conda:clang or something-for-windows), and warn (fail later) if all namespaces in a group are not recognized/checkable/installable.
For run-time dependencies, specify names of the actual shared libraries the extension needs, and names of the commands it calls.