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 #[serde(default)]
34 pub(crate) prefixes: HashMap<String, PathBuf>,
35}
36
37impl Default for ExternalDependencySearchConfig {
38 fn default() -> Self {
39 Self {
40 bin_patterns: default_bin_patterns(),
41 include_patterns: default_include_patterns(),
42 lib_patterns: default_lib_patterns(),
43 bin_subdir: default_bin_subdir(),
44 include_subdir: default_include_subdir(),
45 lib_subdirs: default_lib_subdirs(),
46 search_prefixes: default_prefixes(),
47 prefixes: HashMap::default(),
48 }
49 }
50}
51
52fn default_bin_patterns() -> Vec<String> {
53 vec!["?".into()]
54}
55
56fn default_include_patterns() -> Vec<String> {
57 vec!["?.h".into()]
58}
59
60#[cfg(target_family = "unix")]
61fn default_lib_patterns() -> Vec<String> {
62 #[cfg(target_os = "macos")]
63 {
64 vec!["lib?.dylib".to_string(), "lib?.a".to_string()]
65 }
66
67 #[cfg(not(target_os = "macos"))]
68 {
69 vec!["lib?.so".to_string(), "lib?.a".to_string()]
70 }
71}
72
73#[cfg(target_family = "windows")]
74fn default_lib_patterns() -> Vec<String> {
75 vec!["?.dll".to_string(), "?.lib".to_string()]
76}
77
78#[cfg(target_family = "unix")]
79fn default_prefixes() -> Vec<PathBuf> {
80 use std::path::PathBuf;
81
82 #[cfg(target_os = "macos")]
83 {
84 vec![
85 PathBuf::from("/usr"),
86 PathBuf::from("/usr/local"),
87 PathBuf::from("/opt/local"),
88 PathBuf::from("/opt/homebrew"),
89 PathBuf::from("/opt"),
90 ]
91 }
92
93 #[cfg(not(target_os = "macos"))]
94 {
95 vec![
96 PathBuf::from("/usr"),
97 PathBuf::from("/usr/local"),
98 PathBuf::from("/opt/local"),
99 PathBuf::from("/opt"),
100 ]
101 }
102}
103
104#[cfg(target_family = "windows")]
105fn default_prefixes() -> Vec<PathBuf> {
106 vec![
107 PathBuf::from(r"C:\Program Files"),
108 PathBuf::from(r"C:\Program Files (x86)"),
109 ]
110}
111
112fn default_bin_subdir() -> String {
113 "bin".into()
114}
115
116fn default_include_subdir() -> String {
117 "include".into()
118}
119
120fn default_lib_subdirs() -> Vec<PathBuf> {
121 vec!["lib".into(), "lib64".into()]
122}