feat: add support for customizable installation directories in build flags

This commit is contained in:
2026-03-08 21:11:50 -05:00
parent be0288440a
commit a10c7227be
9 changed files with 648 additions and 26 deletions
+88
View File
@@ -1274,6 +1274,72 @@ pub fn spec_to_minimal_toml(spec: &PackageSpec) -> anyhow::Result<String> {
Value::String(spec.build.flags.bindir.clone()),
);
}
if !spec.build.flags.sbindir.is_empty() {
flags_tbl.insert(
"sbindir".into(),
Value::String(spec.build.flags.sbindir.clone()),
);
}
if !spec.build.flags.libdir.is_empty() {
flags_tbl.insert(
"libdir".into(),
Value::String(spec.build.flags.libdir.clone()),
);
}
if !spec.build.flags.libexecdir.is_empty() {
flags_tbl.insert(
"libexecdir".into(),
Value::String(spec.build.flags.libexecdir.clone()),
);
}
if !spec.build.flags.sysconfdir.is_empty() {
flags_tbl.insert(
"sysconfdir".into(),
Value::String(spec.build.flags.sysconfdir.clone()),
);
}
if !spec.build.flags.localstatedir.is_empty() {
flags_tbl.insert(
"localstatedir".into(),
Value::String(spec.build.flags.localstatedir.clone()),
);
}
if !spec.build.flags.sharedstatedir.is_empty() {
flags_tbl.insert(
"sharedstatedir".into(),
Value::String(spec.build.flags.sharedstatedir.clone()),
);
}
if !spec.build.flags.includedir.is_empty() {
flags_tbl.insert(
"includedir".into(),
Value::String(spec.build.flags.includedir.clone()),
);
}
if !spec.build.flags.datarootdir.is_empty() {
flags_tbl.insert(
"datarootdir".into(),
Value::String(spec.build.flags.datarootdir.clone()),
);
}
if !spec.build.flags.datadir.is_empty() {
flags_tbl.insert(
"datadir".into(),
Value::String(spec.build.flags.datadir.clone()),
);
}
if !spec.build.flags.mandir.is_empty() {
flags_tbl.insert(
"mandir".into(),
Value::String(spec.build.flags.mandir.clone()),
);
}
if !spec.build.flags.infodir.is_empty() {
flags_tbl.insert(
"infodir".into(),
Value::String(spec.build.flags.infodir.clone()),
);
}
if !spec.build.flags.binary_type.is_empty() {
flags_tbl.insert(
"binary_type".into(),
@@ -1497,6 +1563,17 @@ mod tests {
ltoflags: vec!["-flto=auto".into()],
target: "x86_64-unknown-linux-gnu".into(),
keep: vec!["etc/locale.gen".into()],
sbindir: "/usr/sbin".into(),
libdir: "/usr/lib64".into(),
libexecdir: "/usr/libexec".into(),
sysconfdir: "/etc/custom".into(),
localstatedir: "/var/custom".into(),
sharedstatedir: "/var/lib/custom".into(),
includedir: "/usr/include/custom".into(),
datarootdir: "/usr/share/root".into(),
datadir: "/usr/share/custom".into(),
mandir: "/usr/share/custom/man".into(),
infodir: "/usr/share/custom/info".into(),
use_lto: false,
no_flags: true,
no_strip: true,
@@ -1560,6 +1637,17 @@ mod tests {
assert!(toml.contains("target = \"x86_64-unknown-linux-gnu\""));
assert!(toml.contains("keep = ["));
assert!(toml.contains("\"etc/locale.gen\""));
assert!(toml.contains("sbindir = \"/usr/sbin\""));
assert!(toml.contains("libdir = \"/usr/lib64\""));
assert!(toml.contains("libexecdir = \"/usr/libexec\""));
assert!(toml.contains("sysconfdir = \"/etc/custom\""));
assert!(toml.contains("localstatedir = \"/var/custom\""));
assert!(toml.contains("sharedstatedir = \"/var/lib/custom\""));
assert!(toml.contains("includedir = \"/usr/include/custom\""));
assert!(toml.contains("datarootdir = \"/usr/share/root\""));
assert!(toml.contains("datadir = \"/usr/share/custom\""));
assert!(toml.contains("mandir = \"/usr/share/custom/man\""));
assert!(toml.contains("infodir = \"/usr/share/custom/info\""));
assert!(toml.contains("use_lto = false"));
assert!(toml.contains("no_flags = true"));
assert!(toml.contains("no_strip = true"));