pub mod cargo;
pub mod generic;
use super::*;
use crate::platform::MinGlibcVersion;
use cargo::*;
use generic::*;
#[derive(Debug, Clone)]
pub struct WorkspaceBuildConfig {
pub cargo: WorkspaceCargoBuildConfig,
pub ssldotcom_windows_sign: Option<ProductionMode>,
pub macos_sign: bool,
pub min_glibc_version: Option<MinGlibcVersion>,
pub omnibor: bool,
}
#[derive(Debug, Clone)]
pub struct AppBuildConfig {
pub cargo: AppCargoBuildConfig,
pub generic: GenericBuildConfig,
pub system_dependencies: SystemDependencies,
pub min_glibc_version: Option<MinGlibcVersion>,
pub omnibor: Option<bool>,
}
#[derive(Debug, Clone)]
pub struct BuildConfigInheritable {
pub common: CommonBuildConfig,
pub ssldotcom_windows_sign: Option<ProductionMode>,
pub macos_sign: Option<bool>,
pub cargo: Option<CargoBuildLayer>,
pub generic: Option<GenericBuildLayer>,
pub system_dependencies: SystemDependencies,
pub min_glibc_version: Option<MinGlibcVersion>,
pub omnibor: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub struct BuildLayer {
#[serde(flatten)]
pub common: CommonBuildLayer,
#[serde(skip_serializing_if = "Option::is_none")]
pub ssldotcom_windows_sign: Option<ProductionMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub macos_sign: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cargo: Option<BoolOr<CargoBuildLayer>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub generic: Option<BoolOr<GenericBuildLayer>>,
#[serde(rename = "dependencies")]
#[serde(skip_serializing_if = "Option::is_none")]
pub system_dependencies: Option<SystemDependencies>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_glibc_version: Option<MinGlibcVersion>,
#[serde(skip_serializing_if = "Option::is_none")]
pub omnibor: Option<bool>,
}
impl BuildConfigInheritable {
pub fn defaults_for_package(workspaces: &WorkspaceGraph, pkg_idx: PackageIdx) -> Self {
Self {
common: CommonBuildConfig::defaults_for_package(workspaces, pkg_idx),
cargo: None,
generic: None,
system_dependencies: Default::default(),
ssldotcom_windows_sign: None,
macos_sign: None,
min_glibc_version: None,
omnibor: None,
}
}
pub fn defaults_for_workspace(workspaces: &WorkspaceGraph) -> Self {
Self {
common: CommonBuildConfig::defaults_for_workspace(workspaces),
cargo: None,
generic: None,
system_dependencies: Default::default(),
ssldotcom_windows_sign: None,
macos_sign: None,
min_glibc_version: None,
omnibor: None,
}
}
pub fn apply_inheritance_for_workspace(
self,
workspaces: &WorkspaceGraph,
) -> WorkspaceBuildConfig {
let Self {
common,
cargo,
ssldotcom_windows_sign,
macos_sign,
min_glibc_version,
omnibor,
generic: _,
system_dependencies: _,
} = self;
let mut cargo_out = WorkspaceCargoBuildConfig::defaults_for_workspace(workspaces, &common);
if let Some(cargo) = cargo {
cargo_out.apply_layer(cargo);
}
WorkspaceBuildConfig {
cargo: cargo_out,
macos_sign: macos_sign.unwrap_or(false),
ssldotcom_windows_sign,
min_glibc_version,
omnibor: omnibor.unwrap_or(false),
}
}
pub fn apply_inheritance_for_package(
self,
workspaces: &WorkspaceGraph,
pkg_idx: PackageIdx,
) -> AppBuildConfig {
let Self {
common,
cargo,
generic,
system_dependencies,
min_glibc_version,
omnibor,
ssldotcom_windows_sign: _,
macos_sign: _,
} = self;
let mut cargo_out = AppCargoBuildConfig::defaults_for_package(workspaces, pkg_idx, &common);
if let Some(cargo) = cargo {
cargo_out.apply_layer(cargo);
}
let mut generic_out =
GenericBuildConfig::defaults_for_package(workspaces, pkg_idx, &common);
if let Some(generic) = generic {
generic_out.apply_layer(generic);
}
AppBuildConfig {
cargo: cargo_out,
generic: generic_out,
system_dependencies,
min_glibc_version,
omnibor,
}
}
}
impl ApplyLayer for BuildConfigInheritable {
type Layer = BuildLayer;
fn apply_layer(
&mut self,
Self::Layer {
common,
cargo,
generic,
system_dependencies,
ssldotcom_windows_sign,
macos_sign,
min_glibc_version,
omnibor,
}: Self::Layer,
) {
self.common.apply_layer(common);
self.cargo.apply_bool_layer(cargo);
self.generic.apply_bool_layer(generic);
self.system_dependencies.apply_val(system_dependencies);
self.ssldotcom_windows_sign
.apply_opt(ssldotcom_windows_sign);
self.macos_sign.apply_opt(macos_sign);
self.min_glibc_version.apply_opt(min_glibc_version);
self.omnibor.apply_opt(omnibor);
}
}
#[derive(Debug, Clone)]
pub struct CommonBuildConfig {}
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub struct CommonBuildLayer {}
impl CommonBuildConfig {
pub fn defaults_for_package(_workspaces: &WorkspaceGraph, _pkg_idx: PackageIdx) -> Self {
Self {}
}
pub fn defaults_for_workspace(_workspaces: &WorkspaceGraph) -> Self {
Self {}
}
}
impl ApplyLayer for CommonBuildConfig {
type Layer = CommonBuildLayer;
fn apply_layer(&mut self, Self::Layer {}: Self::Layer) {}
}
impl ApplyLayer for CommonBuildLayer {
type Layer = CommonBuildLayer;
fn apply_layer(&mut self, Self::Layer {}: Self::Layer) {}
}