Skip to main content

cabin_core/
lib.rs

1//! Stable internal data model for Cabin.
2//!
3//! This crate defines the validated, format-agnostic types that the rest of
4//! the workspace builds on. Manifest parsing, the CLI, and (later) the build
5//! graph all consume the same `Package` value, so changes here ripple
6//! everywhere — keep this surface small.
7//!
8//! Crate boundaries:
9//! - this crate must not depend on `clap`, `toml`, or any raw manifest
10//!   Structs;
11//! - manifest-shaped serde structs live in `cabin-manifest`;
12//! - CLI dispatch lives in `cabin`.
13
14#![allow(clippy::return_self_not_must_use)]
15
16pub mod build_flags;
17pub mod build_jobs;
18pub mod compiler;
19pub mod compiler_wrapper;
20pub mod condition;
21pub mod config;
22pub mod config_source;
23pub mod error;
24pub mod hash;
25pub mod model;
26pub mod patch;
27pub mod process;
28pub mod profile;
29pub mod registry;
30pub mod source_language;
31pub mod source_replacement;
32pub mod term_color;
33pub mod term_verbosity;
34pub mod toolchain;
35pub mod version_req;
36
37pub use build_flags::{
38    BuildFlagsValidationError, ConditionalProfileFlags, ProfileFlags, ProfileSettings,
39    ResolvedProfileFlags, resolve_build_flags,
40};
41pub use build_jobs::{BuildJobs, BuildJobsParseError};
42pub use compiler::{
43    ArchiverCapabilities, ArchiverIdentity, ArchiverKind, Capability, CapabilitySource,
44    CompilerCapabilities, CompilerIdentity, CompilerKind, CompilerVersion, ToolDetection,
45    ToolDetectionError, ToolchainDetectionReport, derive_ar_capabilities, derive_cxx_capabilities,
46    parse_ar_version_output, parse_cxx_version_output, validate_ar_for_backend,
47    validate_cc_for_backend, validate_cxx_for_backend,
48};
49pub use compiler_wrapper::{
50    CompilerWrapperIdentity, CompilerWrapperKind, CompilerWrapperManifestSettings,
51    CompilerWrapperParseError, CompilerWrapperRequest, CompilerWrapperSource,
52    CompilerWrapperSummary, ConditionalCompilerWrapperDecl, ResolvedCompilerWrapper,
53};
54pub use condition::{Condition, ConditionKey, ConditionParseError, TargetPlatform};
55pub use config::{
56    BuildConfiguration, BuildConfigurationInput, DEFAULT_FEATURE_KEY, FeatureEntry, Features,
57    InvalidFeatureEntryKind, SelectionRequest, ToolchainSummary,
58};
59pub use config_source::ConfigValueSource;
60pub use error::ValidationError;
61pub use model::{
62    Dependency, DependencyKind, DependencySource, Package, PackageConfigInput, PackageName,
63    PortDepSource, SystemDependency, Target, TargetKind, TargetName, is_path_safe_package_name,
64};
65pub use patch::{
66    DeclaredPatch, PatchManifestSettings, PatchProvenance, PatchSource, PatchSourceKind,
67    PatchValidationError,
68};
69pub use process::{ExitStatusKind, exit_status_kind};
70pub use profile::{
71    BuiltinProfile, InvalidProfileName, OptLevel, ProfileDefaults, ProfileDefinition, ProfileName,
72    ProfileResolutionError, ProfileSelection, ProfileSource, ResolvedProfile,
73    available_profile_names, resolve_profile,
74};
75pub use source_language::{SourceLanguage, classify_source, link_driver_language};
76pub use source_replacement::{
77    SourceLocator, SourceReplacementEntry, SourceReplacementError, SourceReplacementResolution,
78    SourceReplacementSettings,
79};
80pub use term_color::{ColorChoice, ColorEnvError, InvalidColorChoice};
81pub use term_verbosity::{InvalidVerbosityCombination, Verbosity, VerbosityEnvError};
82pub use toolchain::{
83    ConditionalToolchainDecl, ResolvedTool, ResolvedToolchain, ToolKind, ToolSelection, ToolSource,
84    ToolSpec, ToolchainDecl, ToolchainResolutionError, ToolchainSelection, ToolchainSettings,
85};