Realia
This crate provides macros for conditional compilation based on various checks.
These macros are analogous to #[cfg(...)] and #[cfg_attr(...)].
Realia is inspired by and heavily based on rustversion.
Attributes
Primary:
- Environment variables:
#[realia::env("FOO")]- Checks if the
FOOenvironment variable exists.
- Checks if the
#[realia::env("FOO", "bar")]- Checks if the
FOOenvironment variable has the valuebar.
- Checks if the
- Executables:
#[realia::cmd("foo")]- Checks if the executable
fooexists in thePATHenvironment variable.
- Checks if the executable
- Dependencies (accounts for target-specific ones, but not optional ones currently):
#[realia::dep("your-crate", "foo")]- Checks if your crate uses any version of the
foocrate.
- Checks if your crate uses any version of the
#[realia::dep("your-crate", "foo", "1.2.3")]- Checks if your crate uses the
foocrate with exactly version 1.2.3.
- Checks if your crate uses the
#[realia::dep_since("your-crate", "foo", "1.2.3")]- Checks if your crate uses the
foocrate with version 1.2.3 or newer.
- Checks if your crate uses the
#[realia::dep_before("your-crate", "foo", "1.2.3")]- Checks if your crate uses the
foocrate with a version before 1.2.3.
- Checks if your crate uses the
#[realia::dep_from_registry("your-crate", "foo")]- Checks if your crate uses the
foocrate from the registry (as opposed to being agitorpathdependency). This is useful if you have publishing fallbacks.
- Checks if your crate uses the
The above can be refined or augmented by these additional attributes:
#[realia::not(env("FOO"))]- Inverts the condition.
#[realia::any(env("FOO"), env("bar"))]- Checks if any of the conditions are met.
#[realia::all(env("FOO"), env("bar"))]- Checks if all of the conditions are met.
#[realia::attr(env("FOO"), some_attr)]- Applies
#[some_attr]if the condition is met. You can also specifyconstthis way.
- Applies
Triggering build on changed conditions
If you use the env or cmd attributes,you'll need to include a build.rs
in your project with any environment variables you check.