use {
crate::licensing::LicensedComponents,
simple_file_manifest::FileData,
std::{
collections::{BTreeMap, BTreeSet},
path::PathBuf,
},
};
#[derive(Clone, Debug, Default, PartialEq)]
pub struct LibPythonBuildContext {
pub inittab_cflags: Option<Vec<String>>,
pub includes: BTreeMap<PathBuf, FileData>,
pub object_files: Vec<FileData>,
pub library_search_paths: BTreeSet<PathBuf>,
pub system_libraries: BTreeSet<String>,
pub dynamic_libraries: BTreeSet<String>,
pub static_libraries: BTreeSet<String>,
pub frameworks: BTreeSet<String>,
pub init_functions: BTreeMap<String, String>,
pub licensed_components: LicensedComponents,
}
impl LibPythonBuildContext {
pub fn merge(contexts: &[&Self]) -> Self {
let mut inittab_cflags = None;
let mut includes = BTreeMap::new();
let mut object_files = Vec::new();
let mut library_search_paths = BTreeSet::new();
let mut system_libraries = BTreeSet::new();
let mut dynamic_libraries = BTreeSet::new();
let mut static_libraries = BTreeSet::new();
let mut frameworks = BTreeSet::new();
let mut init_functions = BTreeMap::new();
let mut licensed_components = LicensedComponents::default();
for context in contexts {
if let Some(flags) = &context.inittab_cflags {
inittab_cflags = Some(flags.clone());
}
for (k, v) in &context.includes {
includes.insert(k.clone(), v.clone());
}
for o in &context.object_files {
object_files.push(o.clone());
}
for p in &context.library_search_paths {
library_search_paths.insert(p.clone());
}
for l in &context.system_libraries {
system_libraries.insert(l.clone());
}
for l in &context.dynamic_libraries {
dynamic_libraries.insert(l.clone());
}
for l in &context.static_libraries {
static_libraries.insert(l.clone());
}
for f in &context.frameworks {
frameworks.insert(f.clone());
}
for (k, v) in &context.init_functions {
init_functions.insert(k.clone(), v.clone());
}
for c in context.licensed_components.iter_components() {
licensed_components.add_component(c.clone());
}
}
Self {
inittab_cflags,
includes,
object_files,
library_search_paths,
system_libraries,
dynamic_libraries,
static_libraries,
frameworks,
init_functions,
licensed_components,
}
}
}