1
Fork 0

Add PackageManager trait

This commit is contained in:
Joshua Goins 2023-01-21 15:26:53 -05:00
parent 4aa4534167
commit bd6ae53767

View file

@ -5,6 +5,112 @@ use std::process::Command;
use fancy_regex::Regex; use fancy_regex::Regex;
use std::env; use std::env;
trait PackageManager {
fn provides(file: String) -> Vec<String>;
fn transform_cmake(cmake_package: String) -> String;
fn transform_pkgconfig(cmake_package: String) -> String;
}
struct ArchLinux {}
impl PackageManager for ArchLinux {
fn provides(file: String) -> Vec<String> {
vec![
"pacman".to_string(),
"-F".to_string(),
file
]
}
fn transform_cmake(cmake_package: String) -> String {
format!("*/{}.cmake", cmake_package)
}
fn transform_pkgconfig(cmake_package: String) -> String {
format!("*/{}.pc", cmake_package)
}
}
struct Fedora {}
impl PackageManager for Fedora {
fn provides(file: String) -> Vec<String> {
vec![
"dnf".to_string(),
"provides".to_string(),
file
]
}
fn transform_cmake(cmake_package: String) -> String {
format!("cmake({})", cmake_package)
}
fn transform_pkgconfig(cmake_package: String) -> String {
format!("pkgconfig({})", cmake_package)
}
}
struct Debian {}
impl PackageManager for Debian {
fn provides(file: String) -> Vec<String> {
vec![
"dpkg".to_string(),
"-S".to_string(),
file
]
}
fn transform_cmake(cmake_package: String) -> String {
format!("*/{}.cmake", cmake_package)
}
fn transform_pkgconfig(cmake_package: String) -> String {
format!("*/{}.pc", cmake_package)
}
}
struct OpenSUSE {}
impl PackageManager for OpenSUSE {
fn provides(file: String) -> Vec<String> {
vec![
"zypper".to_string(),
"se".to_string(),
"--provides".to_string(),
"--match-exact".to_string(),
file
]
}
fn transform_cmake(cmake_package: String) -> String {
format!("cmake({})", cmake_package)
}
fn transform_pkgconfig(cmake_package: String) -> String {
format!("pkgconfig({})", cmake_package)
}
}
struct Gentoo {}
impl PackageManager for Gentoo {
fn provides(file: String) -> Vec<String> {
vec![
"e-file".to_string(),
file
]
}
fn transform_cmake(cmake_package: String) -> String {
format!("{}.cmake", cmake_package)
}
fn transform_pkgconfig(cmake_package: String) -> String {
format!("{}.pc", cmake_package)
}
}
#[derive(Debug)] #[derive(Debug)]
enum PackageType { enum PackageType {
CMakeModule, CMakeModule,