lux_lib/config/
external_deps.rs1use std::{collections::HashMap, path::PathBuf};
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
8#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
9pub struct ExternalDependencySearchConfig {
10 #[serde(default = "default_bin_patterns")]
12 pub(crate) bin_patterns: Vec<String>,
13 #[serde(default = "default_include_patterns")]
15 pub(crate) include_patterns: Vec<String>,
16 #[serde(default = "default_lib_patterns")]
18 pub(crate) lib_patterns: Vec<String>,
19 #[serde(default = "default_bin_subdir")]
21 pub(crate) bin_subdir: String,
22 #[serde(default = "default_include_subdir")]
24 pub(crate) include_subdir: String,
25 #[serde(default = "default_lib_subdirs")]
27 pub(crate) lib_subdirs: Vec<PathBuf>,
28 #[serde(default = "default_prefixes")]
30 pub(crate) search_prefixes: Vec<PathBuf>,
31 pub(crate) prefixes: HashMap<String, PathBuf>,
34}
35
36impl Default for ExternalDependencySearchConfig {
37 fn default() -> Self {
38 Self {
39 bin_patterns: default_bin_patterns(),
40 include_patterns: default_include_patterns(),
41 lib_patterns: default_lib_patterns(),
42 bin_subdir: default_bin_subdir(),
43 include_subdir: default_include_subdir(),
44 lib_subdirs: default_lib_subdirs(),
45 search_prefixes: default_prefixes(),
46 prefixes: HashMap::default(),
47 }
48 }
49}
50
51fn default_bin_patterns() -> Vec<String> {
52 vec!["?".into()]
53}
54
55fn default_include_patterns() -> Vec<String> {
56 vec!["?.h".into()]
57}
58
59#[cfg(target_family = "unix")]
60fn default_lib_patterns() -> Vec<String> {
61 #[cfg(target_os = "macos")]
62 {
63 vec!["lib?.dylib".to_string(), "lib?.a".to_string()]
64 }
65
66 #[cfg(not(target_os = "macos"))]
67 {
68 vec!["lib?.so".to_string(), "lib?.a".to_string()]
69 }
70}
71
72#[cfg(target_family = "windows")]
73fn default_lib_patterns() -> Vec<String> {
74 vec!["?.dll".to_string(), "?.lib".to_string()]
75}
76
77#[cfg(target_family = "unix")]
78fn default_prefixes() -> Vec<PathBuf> {
79 use std::path::PathBuf;
80
81 #[cfg(target_os = "macos")]
82 {
83 vec![
84 PathBuf::from("/usr"),
85 PathBuf::from("/usr/local"),
86 PathBuf::from("/opt/local"),
87 PathBuf::from("/opt/homebrew"),
88 PathBuf::from("/opt"),
89 ]
90 }
91
92 #[cfg(not(target_os = "macos"))]
93 {
94 vec![
95 PathBuf::from("/usr"),
96 PathBuf::from("/usr/local"),
97 PathBuf::from("/opt/local"),
98 PathBuf::from("/opt"),
99 ]
100 }
101}
102
103#[cfg(target_family = "windows")]
104fn default_prefixes() -> Vec<PathBuf> {
105 vec![
106 PathBuf::from(r"C:\Program Files"),
107 PathBuf::from(r"C:\Program Files (x86)"),
108 ]
109}
110
111fn default_bin_subdir() -> String {
112 "bin".into()
113}
114
115fn default_include_subdir() -> String {
116 "include".into()
117}
118
119fn default_lib_subdirs() -> Vec<PathBuf> {
120 vec!["lib".into(), "lib64".into()]
121}