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