mod builder;
mod repair;
pub use builder::BuildContextBuilder;
use crate::auditwheel::AuditWheelMode;
use crate::auditwheel::PlatformTag;
use crate::cargo_options::CargoOptions;
use crate::compile::CompileTarget;
use crate::compression::CompressionOptions;
use crate::pgo::PgoPhase;
use crate::project_layout::ProjectLayout;
use crate::pyproject_toml::ConditionalFeature;
use crate::{
BridgeModel, Metadata24, PyProjectToml, PythonInterpreter, Target, pyproject_toml::SbomConfig,
};
use anyhow::Result;
use cargo_metadata::Metadata;
use std::path::PathBuf;
#[derive(Clone, Debug)]
pub struct ProjectContext {
pub target: Target,
pub project_layout: ProjectLayout,
pub pyproject_toml_path: PathBuf,
pub pyproject_toml: Option<PyProjectToml>,
pub metadata24: Metadata24,
pub crate_name: String,
pub module_name: String,
pub manifest_path: PathBuf,
pub target_dir: PathBuf,
pub cargo_metadata: Metadata,
pub universal2: bool,
pub editable: bool,
pub cargo_options: CargoOptions,
pub conditional_features: Vec<ConditionalFeature>,
pub compile_targets: Vec<CompileTarget>,
}
impl ProjectContext {
pub fn bridge(&self) -> &BridgeModel {
&self.compile_targets[0].bridge_model
}
pub fn get_platform_tag(&self, platform_tags: &[PlatformTag]) -> Result<String> {
crate::target::get_platform_tag(
&self.target,
platform_tags,
self.universal2,
self.pyproject_toml.as_ref(),
&self.manifest_path,
)
}
}
#[derive(Clone, Debug)]
pub struct ArtifactContext {
pub out: PathBuf,
pub strip: bool,
pub compression: CompressionOptions,
pub sbom: Option<SbomConfig>,
pub include_import_lib: bool,
pub include_debuginfo: bool,
pub pgo_phase: Option<PgoPhase>,
pub pgo_command: Option<String>,
pub generate_stubs: bool,
}
#[derive(Clone, Debug)]
pub struct PythonContext {
pub auditwheel: AuditWheelMode,
#[cfg(feature = "zig")]
pub zig: bool,
pub platform_tag: Vec<PlatformTag>,
pub interpreter: Vec<PythonInterpreter>,
pub pypi_validation: bool,
}
#[derive(Clone, Debug)]
pub struct BuildContext {
pub project: ProjectContext,
pub artifact: ArtifactContext,
pub python: PythonContext,
}
pub type BuiltWheelMetadata = (PathBuf, String);