feat: Enhance package specification to support case-insensitive flags and add C++ compiler configuration

This commit is contained in:
2026-02-16 23:24:26 -06:00
parent 9a00608104
commit af0571c33b
2 changed files with 138 additions and 18 deletions
+21 -1
View File
@@ -103,7 +103,8 @@ impl PackageSpec {
fn apply_flags_table(&mut self, table: &toml::map::Map<String, toml::Value>) {
for (k, v) in table {
match k.as_str() {
// match case-insensitively for common keys (allow CXX/Cc etc.)
match k.to_lowercase().as_str() {
"cflags" => {
if let Some(arr) = v.as_array() {
self.build.flags.cflags = arr
@@ -131,6 +132,11 @@ impl PackageSpec {
self.build.flags.cc = s.to_string();
}
}
"cxx" => {
if let Some(s) = v.as_str() {
self.build.flags.cxx = s.to_string();
}
}
"ar" => {
if let Some(s) = v.as_str() {
self.build.flags.ar = s.to_string();
@@ -674,6 +680,9 @@ pub struct BuildFlags {
/// C compiler
#[serde(default = "default_cc")]
pub cc: String,
/// C++ compiler
#[serde(default = "default_cxx")]
pub cxx: String,
/// Archiver
#[serde(default = "default_ar")]
pub ar: String,
@@ -749,6 +758,7 @@ impl Default for BuildFlags {
ldflags: Vec::new(),
configure: Vec::new(),
cc: default_cc(),
cxx: default_cxx(),
ar: default_ar(),
libc: String::new(),
rootfs: default_rootfs(),
@@ -829,6 +839,16 @@ fn default_carch() -> String {
std::env::consts::ARCH.to_string()
}
fn default_cxx() -> String {
// Infer a sensible C++ compiler name from default_cc()
let cc = default_cc();
if cc.contains("clang") {
"clang++".to_string()
} else {
"g++".to_string()
}
}
/// Package dependencies
#[derive(Debug, Clone, Default, serde::Deserialize, serde::Serialize)]
pub struct Dependencies {