feat: extra profile flag for system profiles; disable building profiles that cannot be built

This commit is contained in:
Gabriele Musco 2024-08-01 09:45:12 +02:00
parent 9a5b0638ea
commit 281dabf534
4 changed files with 44 additions and 34 deletions

View file

@ -270,6 +270,8 @@ pub struct Profile {
pub prefix: PathBuf,
pub can_be_built: bool,
pub editable: bool,
#[serde(default)]
pub is_system: bool,
pub pull_on_build: bool,
#[serde(default = "LighthouseDriver::default")]
/// Only applicable for Monado
@ -335,6 +337,7 @@ impl Default for Profile {
uuid,
autostart_command: None,
skip_dependency_check: false,
is_system: false,
}
}
}

View file

@ -1,10 +1,8 @@
use std::collections::HashMap;
use crate::{
constants::APP_NAME,
paths::{data_monado_path, data_opencomposite_path, SYSTEM_PREFIX},
profile::{LighthouseDriver, Profile, ProfileFeatures, XRServiceType},
};
use std::collections::HashMap;
pub fn system_monado_profile() -> Profile {
let mut environment: HashMap<String, String> = HashMap::new();
@ -15,9 +13,10 @@ pub fn system_monado_profile() -> Profile {
environment.insert("XRT_CURATED_GUI".into(), "1".into());
environment.insert("U_PACING_APP_USE_MIN_FRAME_PERIOD".into(), "1".into());
Profile {
is_system: true,
prefix: SYSTEM_PREFIX.into(),
uuid: "system-monado-default".into(),
name: format!("System Monado - {name} Default", name = APP_NAME),
name: "System Monado".into(),
can_be_built: false,
// does it apply to system profiles?
xrservice_path: data_monado_path(),

View file

@ -1,10 +1,8 @@
use std::collections::HashMap;
use crate::{
constants::APP_NAME,
paths::{data_opencomposite_path, data_wivrn_path, SYSTEM_PREFIX},
profile::{Profile, ProfileFeatures, XRServiceType},
};
use std::collections::HashMap;
pub fn system_wivrn_profile() -> Profile {
let mut environment: HashMap<String, String> = HashMap::new();
@ -12,9 +10,10 @@ pub fn system_wivrn_profile() -> Profile {
environment.insert("XRT_CURATED_GUI".into(), "1".into());
environment.insert("U_PACING_APP_USE_MIN_FRAME_PERIOD".into(), "1".into());
Profile {
is_system: true,
prefix: SYSTEM_PREFIX.into(),
uuid: "system-wivrn-default".into(),
name: format!("System WiVRn - {name} Default", name = APP_NAME),
name: "System WiVRn".into(),
can_be_built: false,
// does it apply to system profiles?
xrservice_path: data_wivrn_path(),

View file

@ -419,33 +419,42 @@ impl AsyncComponent for App {
let mut missing_deps = vec![];
let mut jobs = VecDeque::<WorkerJob>::new();
// profile per se can't be built, but we still need opencomp
if profile.can_be_built {
missing_deps.extend(match profile.xrservice_type {
XRServiceType::Monado => get_missing_monado_deps(),
XRServiceType::Wivrn => get_missing_wivrn_deps(),
});
if profile.features.libsurvive.enabled {
missing_deps.extend(get_missing_libsurvive_deps());
jobs.extend(get_build_libsurvive_jobs(&profile, clean_build));
}
if profile.features.openhmd.enabled {
missing_deps.extend(get_missing_openhmd_deps());
jobs.extend(get_build_openhmd_jobs(&profile, clean_build));
}
if profile.features.basalt.enabled {
missing_deps.extend(get_missing_basalt_deps());
jobs.extend(get_build_basalt_jobs(&profile, clean_build));
}
if profile.features.mercury_enabled {
missing_deps.extend(get_missing_mercury_deps());
jobs.extend(get_build_mercury_jobs(&profile));
}
jobs.extend(match profile.xrservice_type {
XRServiceType::Monado => get_build_monado_jobs(&profile, clean_build),
XRServiceType::Wivrn => get_build_wivrn_jobs(&profile, clean_build),
});
// no listed deps for opencomp
if !profile.can_be_built {
alert(
"This profile cannot be built",
if profile.is_system {
Some("This is a system profile: it assumes you have everything already installed in your system using your distro package manager or other means.")
} else {
None
},
Some(&self.app_win.clone().upcast()),
);
return;
}
missing_deps.extend(match profile.xrservice_type {
XRServiceType::Monado => get_missing_monado_deps(),
XRServiceType::Wivrn => get_missing_wivrn_deps(),
});
if profile.features.libsurvive.enabled {
missing_deps.extend(get_missing_libsurvive_deps());
jobs.extend(get_build_libsurvive_jobs(&profile, clean_build));
}
if profile.features.openhmd.enabled {
missing_deps.extend(get_missing_openhmd_deps());
jobs.extend(get_build_openhmd_jobs(&profile, clean_build));
}
if profile.features.basalt.enabled {
missing_deps.extend(get_missing_basalt_deps());
jobs.extend(get_build_basalt_jobs(&profile, clean_build));
}
if profile.features.mercury_enabled {
missing_deps.extend(get_missing_mercury_deps());
jobs.extend(get_build_mercury_jobs(&profile));
}
jobs.extend(match profile.xrservice_type {
XRServiceType::Monado => get_build_monado_jobs(&profile, clean_build),
XRServiceType::Wivrn => get_build_wivrn_jobs(&profile, clean_build),
});
jobs.extend(get_build_opencomposite_jobs(&profile, clean_build));
if !(self.skip_depcheck || profile.skip_dependency_check || missing_deps.is_empty())
{