feat: add support for customizable installation directories in build flags
This commit is contained in:
@@ -162,10 +162,29 @@ fn meson_setup_args(
|
||||
env_vars: &[(String, String)],
|
||||
) -> Vec<String> {
|
||||
let mut args = Vec::new();
|
||||
let dirs = crate::builder::install_dirs(flags);
|
||||
|
||||
if !has_option(&flags.configure, "--prefix") {
|
||||
args.push(format!("--prefix={}", flags.prefix));
|
||||
}
|
||||
for (option, value) in [
|
||||
("--bindir", dirs.bindir),
|
||||
("--sbindir", dirs.sbindir),
|
||||
("--libdir", dirs.libdir),
|
||||
("--libexecdir", dirs.libexecdir),
|
||||
("--sysconfdir", dirs.sysconfdir),
|
||||
("--localstatedir", dirs.localstatedir),
|
||||
("--sharedstatedir", dirs.sharedstatedir),
|
||||
("--includedir", dirs.includedir),
|
||||
("--datarootdir", dirs.datarootdir),
|
||||
("--datadir", dirs.datadir),
|
||||
("--mandir", dirs.mandir),
|
||||
("--infodir", dirs.infodir),
|
||||
] {
|
||||
if !has_option(&flags.configure, option) {
|
||||
args.push(format!("{option}={value}"));
|
||||
}
|
||||
}
|
||||
if !has_option(&flags.configure, "--buildtype") {
|
||||
args.push("--buildtype=release".to_string());
|
||||
}
|
||||
@@ -275,6 +294,23 @@ mod tests {
|
||||
assert!(args.iter().any(|a| a == "--buildtype=release"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_meson_setup_args_include_install_dirs() {
|
||||
let args = meson_setup_args(&BuildFlags::default(), None, &[]);
|
||||
assert!(args.iter().any(|a| a == "--bindir=/usr/bin"));
|
||||
assert!(args.iter().any(|a| a == "--sbindir=/usr/bin"));
|
||||
assert!(args.iter().any(|a| a == "--libdir=/usr/lib"));
|
||||
assert!(args.iter().any(|a| a == "--libexecdir=/usr/lib"));
|
||||
assert!(args.iter().any(|a| a == "--sysconfdir=/etc"));
|
||||
assert!(args.iter().any(|a| a == "--localstatedir=/var"));
|
||||
assert!(args.iter().any(|a| a == "--sharedstatedir=/var/lib"));
|
||||
assert!(args.iter().any(|a| a == "--includedir=/usr/include"));
|
||||
assert!(args.iter().any(|a| a == "--datarootdir=/usr/share"));
|
||||
assert!(args.iter().any(|a| a == "--datadir=/usr/share"));
|
||||
assert!(args.iter().any(|a| a == "--mandir=/usr/share/man"));
|
||||
assert!(args.iter().any(|a| a == "--infodir=/usr/share/info"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_meson_setup_args_honor_explicit_prefix() {
|
||||
let flags = BuildFlags {
|
||||
@@ -288,6 +324,24 @@ mod tests {
|
||||
assert!(args.iter().any(|a| a == "--prefix=/opt"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_meson_setup_args_honor_explicit_install_dirs() {
|
||||
let flags = BuildFlags {
|
||||
configure: vec![
|
||||
"--sbindir=/sbin".to_string(),
|
||||
"--libdir=/custom/lib".to_string(),
|
||||
"--datadir=/custom/share".to_string(),
|
||||
],
|
||||
..BuildFlags::default()
|
||||
};
|
||||
|
||||
let args = meson_setup_args(&flags, None, &[]);
|
||||
assert!(!args.iter().any(|a| a == "--sbindir=/usr/bin"));
|
||||
assert!(!args.iter().any(|a| a == "--libdir=/usr/lib"));
|
||||
assert!(!args.iter().any(|a| a == "--datadir=/usr/share"));
|
||||
assert!(args.iter().any(|a| a == "--bindir=/usr/bin"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_resolve_build_dir_uses_flag() {
|
||||
let flags = BuildFlags {
|
||||
|
||||
Reference in New Issue
Block a user