1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
use {
crate::licensing::LicensedComponents,
std::{
collections::{BTreeMap, BTreeSet},
path::PathBuf,
},
tugger_file_manifest::FileData,
};
#[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,
}
}
}