Issue description
Some Rust crates, for example comrak or pulldown-cmark
implicitly "hide" the toggling of binary builds behind features (by
using required-features in Cargo.toml).
In both cases, the toggling feature is the enabling/disabling of the
CLI library (clap in the case of comrak, getopts for
pulldown-cmark).
When these features are disabled, the expression generated by Carnix
still attempts to build the crate's binary even if the crate is only
used as a library dependency.
This leads to extremely misleading error messages because it attempts
to build the binary without linking in the correct dependencies of the
binary.
In the case of comrak the user will get unexpected errors like
extern crate 'clap' missing if they disabled the clap feature in
their Cargo.toml.
In the case of pulldown-cmark the error message is even stranger, as
the user will be notified that they can't use unstable compiler
features on the stable compiler.
The reason for this is that getopts exists both as a library and as
an unstable compiler built-in, which means that the compiler sees
extern crate getopts; and assumes that the user attempted to use the
unstable feature.