From 4709a50483b44a3fe1638da209eab9d09e3184ea Mon Sep 17 00:00:00 2001 From: Sapphire Date: Mon, 5 May 2025 00:12:42 -0500 Subject: [PATCH 1/3] fix: xrizer deps --- src/depcheck/mod.rs | 1 + src/depcheck/xrizer_deps.rs | 57 +++++++++++++++++++++++++++++++++++++ src/profile.rs | 14 +++++++-- 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 src/depcheck/xrizer_deps.rs diff --git a/src/depcheck/mod.rs b/src/depcheck/mod.rs index 002a8c8..e46b1e7 100644 --- a/src/depcheck/mod.rs +++ b/src/depcheck/mod.rs @@ -6,6 +6,7 @@ pub mod mercury_deps; pub mod monado_deps; pub mod openhmd_deps; pub mod wivrn_deps; +pub mod xrizer_deps; use crate::linux_distro::LinuxDistro; use std::{collections::HashMap, env, fmt::Display, path::Path}; diff --git a/src/depcheck/xrizer_deps.rs b/src/depcheck/xrizer_deps.rs new file mode 100644 index 0000000..ec48b4b --- /dev/null +++ b/src/depcheck/xrizer_deps.rs @@ -0,0 +1,57 @@ +use super::{DepType, Dependency, DependencyCheckResult}; +use crate::linux_distro::LinuxDistro; +use std::collections::HashMap; + +fn xrizer_deps() -> Vec { + vec![ + Dependency { + name: "glslc".into(), + dep_type: DepType::Executable, + filename: "glslc".into(), + packages: HashMap::from([ + (LinuxDistro::Arch, "shaderc".into()), + (LinuxDistro::Debian, "glslc".into()), + (LinuxDistro::Fedora, "glslc".into()), + (LinuxDistro::Alpine, "glslc".into()), + (LinuxDistro::Gentoo, "dev-util/glslang".into()), + (LinuxDistro::Suse, "shaderc".into()), + ]), + }, + Dependency { + name: "libxcb-glx".into(), + dep_type: DepType::Include, + filename: "xcb/glx.h".into(), + packages: HashMap::from([ + (LinuxDistro::Arch, "libxcb".into()), + (LinuxDistro::Debian, "libxcb-glx0-dev".into()), + (LinuxDistro::Fedora, "libxcb-devel".into()), + (LinuxDistro::Gentoo, "x11-libs/libxcb".into()), + (LinuxDistro::Suse, "libxcb-devel".into()), + ]), + }, + Dependency { + name: "libclang".into(), + dep_type: DepType::SharedObject, + filename: "libclang.so".into(), + packages: HashMap::from([ + (LinuxDistro::Arch, "clang".into()), + (LinuxDistro::Debian, "libclang-19-dev".into()), + (LinuxDistro::Fedora, "clang19-devel".into()), + (LinuxDistro::Gentoo, "llvm-core/clang-runtime".into()), + (LinuxDistro::Suse, "clang19-devel".into()), + ]), + }, + ] +} + +pub fn check_xrizer_deps() -> Vec { + Dependency::check_many(xrizer_deps()) +} + +pub fn get_missing_xrizer_deps() -> Vec { + check_xrizer_deps() + .iter() + .filter(|res| !res.found) + .map(|res| res.dependency.clone()) + .collect() +} diff --git a/src/profile.rs b/src/profile.rs index a3344df..a8cb283 100644 --- a/src/profile.rs +++ b/src/profile.rs @@ -2,7 +2,8 @@ use crate::{ depcheck::{ basalt_deps::get_missing_basalt_deps, libsurvive_deps::get_missing_libsurvive_deps, mercury_deps::get_missing_mercury_deps, monado_deps::get_missing_monado_deps, - openhmd_deps::get_missing_openhmd_deps, wivrn_deps::get_missing_wivrn_deps, Dependency, + openhmd_deps::get_missing_openhmd_deps, wivrn_deps::get_missing_wivrn_deps, + xrizer_deps::get_missing_xrizer_deps, Dependency, }, file_builders::active_runtime_json::ActiveRuntime, paths::{get_data_dir, BWRAP_SYSTEM_PREFIX, SYSTEM_PREFIX}, @@ -282,6 +283,15 @@ impl OvrCompatibilityModuleType { pub fn iter() -> Iter<'static, Self> { [Self::Opencomposite, Self::Xrizer, Self::Vapor].iter() } + + pub fn get_missing_deps(&self) -> Vec { + match self { + OvrCompatibilityModuleType::Xrizer => get_missing_xrizer_deps(), + OvrCompatibilityModuleType::Opencomposite | OvrCompatibilityModuleType::Vapor => { + Vec::default() + } + } + } } impl FromStr for OvrCompatibilityModuleType { @@ -737,7 +747,7 @@ impl Profile { if self.features.mercury_enabled { missing_deps.extend(get_missing_mercury_deps()); } - // no listed deps for opencomp + missing_deps.extend(self.ovr_comp.mod_type.get_missing_deps()); } missing_deps.sort_unstable(); missing_deps.dedup(); // dedup only works if sorted, hence the above From 27d37198c7876cb4d91d305414200c61e5677ac9 Mon Sep 17 00:00:00 2001 From: Gabriele Musco Date: Sat, 10 May 2025 10:35:19 +0200 Subject: [PATCH 2/3] fix: refactor and optimize missing dependency filtering --- src/depcheck/basalt_deps.rs | 8 ++------ src/depcheck/libsurvive_deps.rs | 8 ++------ src/depcheck/mercury_deps.rs | 10 ++++------ src/depcheck/mod.rs | 18 ++++++++++++++++++ src/depcheck/monado_deps.rs | 8 ++------ src/depcheck/openhmd_deps.rs | 8 ++------ src/depcheck/wivrn_deps.rs | 8 ++------ src/depcheck/xrizer_deps.rs | 8 ++------ 8 files changed, 34 insertions(+), 42 deletions(-) diff --git a/src/depcheck/basalt_deps.rs b/src/depcheck/basalt_deps.rs index 2a05826..00a29b6 100644 --- a/src/depcheck/basalt_deps.rs +++ b/src/depcheck/basalt_deps.rs @@ -1,7 +1,7 @@ use super::{ boost_deps::boost_deps, common::{dep_cmake, dep_eigen, dep_gpp, dep_libgl, dep_ninja, dep_opencv}, - DepType, Dependency, DependencyCheckResult, + DepType, DepcheckResultGetMissing, Dependency, DependencyCheckResult, }; use crate::linux_distro::LinuxDistro; use std::collections::HashMap; @@ -181,9 +181,5 @@ pub fn check_basalt_deps() -> Vec { } pub fn get_missing_basalt_deps() -> Vec { - check_basalt_deps() - .iter() - .filter(|res| !res.found) - .map(|res| res.dependency.clone()) - .collect() + check_basalt_deps().filter_missing_deps() } diff --git a/src/depcheck/libsurvive_deps.rs b/src/depcheck/libsurvive_deps.rs index c9e8d9c..46eec55 100644 --- a/src/depcheck/libsurvive_deps.rs +++ b/src/depcheck/libsurvive_deps.rs @@ -1,6 +1,6 @@ use super::{ common::{dep_cmake, dep_eigen, dep_gcc, dep_git, dep_gpp, dep_ninja}, - Dependency, DependencyCheckResult, + DepcheckResultGetMissing, Dependency, DependencyCheckResult, }; fn libsurvive_deps() -> Vec { @@ -19,9 +19,5 @@ pub fn check_libsurvive_deps() -> Vec { } pub fn get_missing_libsurvive_deps() -> Vec { - check_libsurvive_deps() - .iter() - .filter(|res| !res.found) - .map(|res| res.dependency.clone()) - .collect() + check_libsurvive_deps().filter_missing_deps() } diff --git a/src/depcheck/mercury_deps.rs b/src/depcheck/mercury_deps.rs index cad3c80..a7e59be 100644 --- a/src/depcheck/mercury_deps.rs +++ b/src/depcheck/mercury_deps.rs @@ -1,4 +1,6 @@ -use super::{common::dep_opencv, DepType, Dependency, DependencyCheckResult}; +use super::{ + common::dep_opencv, DepType, DepcheckResultGetMissing, Dependency, DependencyCheckResult, +}; use crate::linux_distro::LinuxDistro; use std::collections::HashMap; @@ -39,9 +41,5 @@ pub fn check_mercury_deps() -> Vec { } pub fn get_missing_mercury_deps() -> Vec { - check_mercury_deps() - .iter() - .filter(|res| !res.found) - .map(|res| res.dependency.clone()) - .collect() + check_mercury_deps().filter_missing_deps() } diff --git a/src/depcheck/mod.rs b/src/depcheck/mod.rs index e46b1e7..92154bb 100644 --- a/src/depcheck/mod.rs +++ b/src/depcheck/mod.rs @@ -109,6 +109,24 @@ impl Display for DependencyCheckResult { } } +pub trait DepcheckResultGetMissing { + fn filter_missing_deps(self) -> Vec; +} + +impl DepcheckResultGetMissing for Vec { + fn filter_missing_deps(self) -> Vec { + self.into_iter() + .filter_map(|res| { + if !res.found { + Some(res.dependency) + } else { + None + } + }) + .collect() + } +} + fn shared_obj_paths() -> Vec { vec![ "/lib".into(), diff --git a/src/depcheck/monado_deps.rs b/src/depcheck/monado_deps.rs index b4894da..e1cd9f9 100644 --- a/src/depcheck/monado_deps.rs +++ b/src/depcheck/monado_deps.rs @@ -4,7 +4,7 @@ use super::{ dep_libgl, dep_libudev, dep_libx11, dep_libxcb, dep_ninja, dep_openxr, dep_vulkan_headers, dep_vulkan_icd_loader, }, - DepType, Dependency, DependencyCheckResult, + DepType, DepcheckResultGetMissing, Dependency, DependencyCheckResult, }; use crate::{depcheck::common::dep_libxrandr, linux_distro::LinuxDistro}; use std::collections::HashMap; @@ -131,9 +131,5 @@ pub fn check_monado_deps() -> Vec { } pub fn get_missing_monado_deps() -> Vec { - check_monado_deps() - .iter() - .filter(|res| !res.found) - .map(|res| res.dependency.clone()) - .collect() + check_monado_deps().filter_missing_deps() } diff --git a/src/depcheck/openhmd_deps.rs b/src/depcheck/openhmd_deps.rs index 819324f..d31d013 100644 --- a/src/depcheck/openhmd_deps.rs +++ b/src/depcheck/openhmd_deps.rs @@ -1,6 +1,6 @@ use super::{ common::{dep_gcc, dep_git, dep_gpp, dep_ninja}, - Dependency, DependencyCheckResult, + DepcheckResultGetMissing, Dependency, DependencyCheckResult, }; use crate::linux_distro::LinuxDistro; use std::collections::HashMap; @@ -31,9 +31,5 @@ pub fn check_openhmd_deps() -> Vec { } pub fn get_missing_openhmd_deps() -> Vec { - check_openhmd_deps() - .iter() - .filter(|res| !res.found) - .map(|res| res.dependency.clone()) - .collect() + check_openhmd_deps().filter_missing_deps() } diff --git a/src/depcheck/wivrn_deps.rs b/src/depcheck/wivrn_deps.rs index acf9a35..9126272 100644 --- a/src/depcheck/wivrn_deps.rs +++ b/src/depcheck/wivrn_deps.rs @@ -4,7 +4,7 @@ use super::{ dep_libudev, dep_libx11, dep_libxcb, dep_ninja, dep_openxr, dep_vulkan_headers, dep_vulkan_icd_loader, }, - DepType, Dependency, DependencyCheckResult, + DepType, DepcheckResultGetMissing, Dependency, DependencyCheckResult, }; use crate::{ depcheck::common::{dep_libgl, dep_libxrandr}, @@ -270,9 +270,5 @@ pub fn check_wivrn_deps() -> Vec { } pub fn get_missing_wivrn_deps() -> Vec { - check_wivrn_deps() - .iter() - .filter(|res| !res.found) - .map(|res| res.dependency.clone()) - .collect() + check_wivrn_deps().filter_missing_deps() } diff --git a/src/depcheck/xrizer_deps.rs b/src/depcheck/xrizer_deps.rs index ec48b4b..83134c1 100644 --- a/src/depcheck/xrizer_deps.rs +++ b/src/depcheck/xrizer_deps.rs @@ -1,4 +1,4 @@ -use super::{DepType, Dependency, DependencyCheckResult}; +use super::{DepType, DepcheckResultGetMissing, Dependency, DependencyCheckResult}; use crate::linux_distro::LinuxDistro; use std::collections::HashMap; @@ -49,9 +49,5 @@ pub fn check_xrizer_deps() -> Vec { } pub fn get_missing_xrizer_deps() -> Vec { - check_xrizer_deps() - .iter() - .filter(|res| !res.found) - .map(|res| res.dependency.clone()) - .collect() + check_xrizer_deps().filter_missing_deps() } From fc4a2d3993d4cfd363537114b491b5b3da937e3a Mon Sep 17 00:00:00 2001 From: Gabriele Musco Date: Sat, 10 May 2025 10:39:53 +0200 Subject: [PATCH 3/3] fix: deduplicate glslc dependency --- src/depcheck/common.rs | 16 ++++++++++++++++ src/depcheck/monado_deps.rs | 19 +++++-------------- src/depcheck/xrizer_deps.rs | 16 ++-------------- 3 files changed, 23 insertions(+), 28 deletions(-) diff --git a/src/depcheck/common.rs b/src/depcheck/common.rs index dcae582..901d0ff 100644 --- a/src/depcheck/common.rs +++ b/src/depcheck/common.rs @@ -319,3 +319,19 @@ pub fn dep_getcap_setcap() -> Dependency { ]), } } + +pub fn dep_glslc() -> Dependency { + Dependency { + name: "glslc".into(), + dep_type: DepType::Executable, + filename: "glslc".into(), + packages: HashMap::from([ + (LinuxDistro::Arch, "shaderc".into()), + (LinuxDistro::Debian, "glslc".into()), + (LinuxDistro::Fedora, "glslc".into()), + (LinuxDistro::Alpine, "shaderc".into()), + (LinuxDistro::Gentoo, "media-libs/shaderc".into()), + (LinuxDistro::Suse, "shaderc".into()), + ]), + } +} diff --git a/src/depcheck/monado_deps.rs b/src/depcheck/monado_deps.rs index e1cd9f9..f9e1b9b 100644 --- a/src/depcheck/monado_deps.rs +++ b/src/depcheck/monado_deps.rs @@ -6,7 +6,10 @@ use super::{ }, DepType, DepcheckResultGetMissing, Dependency, DependencyCheckResult, }; -use crate::{depcheck::common::dep_libxrandr, linux_distro::LinuxDistro}; +use crate::{ + depcheck::common::{dep_glslc, dep_libxrandr}, + linux_distro::LinuxDistro, +}; use std::collections::HashMap; fn monado_deps() -> Vec { @@ -60,19 +63,7 @@ fn monado_deps() -> Vec { dep_ninja(), dep_gcc(), dep_gpp(), - Dependency { - name: "glslc".into(), - dep_type: DepType::Executable, - filename: "glslc".into(), - packages: HashMap::from([ - (LinuxDistro::Arch, "shaderc".into()), - (LinuxDistro::Debian, "glslc".into()), - (LinuxDistro::Fedora, "glslc".into()), - (LinuxDistro::Alpine, "shaderc".into()), - (LinuxDistro::Gentoo, "media-libs/shaderc".into()), - (LinuxDistro::Suse, "shaderc".into()), - ]), - }, + dep_glslc(), dep_glslang_validator(), Dependency { name: "sdl2".into(), diff --git a/src/depcheck/xrizer_deps.rs b/src/depcheck/xrizer_deps.rs index 83134c1..a43bd20 100644 --- a/src/depcheck/xrizer_deps.rs +++ b/src/depcheck/xrizer_deps.rs @@ -1,22 +1,10 @@ use super::{DepType, DepcheckResultGetMissing, Dependency, DependencyCheckResult}; -use crate::linux_distro::LinuxDistro; +use crate::{depcheck::common::dep_glslc, linux_distro::LinuxDistro}; use std::collections::HashMap; fn xrizer_deps() -> Vec { vec![ - Dependency { - name: "glslc".into(), - dep_type: DepType::Executable, - filename: "glslc".into(), - packages: HashMap::from([ - (LinuxDistro::Arch, "shaderc".into()), - (LinuxDistro::Debian, "glslc".into()), - (LinuxDistro::Fedora, "glslc".into()), - (LinuxDistro::Alpine, "glslc".into()), - (LinuxDistro::Gentoo, "dev-util/glslang".into()), - (LinuxDistro::Suse, "shaderc".into()), - ]), - }, + dep_glslc(), Dependency { name: "libxcb-glx".into(), dep_type: DepType::Include,