diff options
author | robojumper <[email protected]> | 2020-05-04 12:29:09 +0100 |
---|---|---|
committer | robojumper <[email protected]> | 2020-05-04 12:29:09 +0100 |
commit | 2980ba1fde50a6fc8863750b9dd7f09e3c1227ce (patch) | |
tree | 6b90bc58f5f7dc661d71d3a4a499ae028a9f43ed /crates/ra_project_model/src/cargo_workspace.rs | |
parent | 6a48a94d47bfd6a340cbdb3f68b5bce4167c8168 (diff) |
Support build.rs cargo:rustc-cfg
Diffstat (limited to 'crates/ra_project_model/src/cargo_workspace.rs')
-rw-r--r-- | crates/ra_project_model/src/cargo_workspace.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/crates/ra_project_model/src/cargo_workspace.rs b/crates/ra_project_model/src/cargo_workspace.rs index 362ee30fe..afbd30164 100644 --- a/crates/ra_project_model/src/cargo_workspace.rs +++ b/crates/ra_project_model/src/cargo_workspace.rs | |||
@@ -83,6 +83,7 @@ pub struct PackageData { | |||
83 | pub dependencies: Vec<PackageDependency>, | 83 | pub dependencies: Vec<PackageDependency>, |
84 | pub edition: Edition, | 84 | pub edition: Edition, |
85 | pub features: Vec<String>, | 85 | pub features: Vec<String>, |
86 | pub cfgs: Vec<PathBuf>, | ||
86 | pub out_dir: Option<PathBuf>, | 87 | pub out_dir: Option<PathBuf>, |
87 | pub proc_macro_dylib_path: Option<PathBuf>, | 88 | pub proc_macro_dylib_path: Option<PathBuf>, |
88 | } | 89 | } |
@@ -165,10 +166,12 @@ impl CargoWorkspace { | |||
165 | })?; | 166 | })?; |
166 | 167 | ||
167 | let mut out_dir_by_id = FxHashMap::default(); | 168 | let mut out_dir_by_id = FxHashMap::default(); |
169 | let mut cfgs = FxHashMap::default(); | ||
168 | let mut proc_macro_dylib_paths = FxHashMap::default(); | 170 | let mut proc_macro_dylib_paths = FxHashMap::default(); |
169 | if cargo_features.load_out_dirs_from_check { | 171 | if cargo_features.load_out_dirs_from_check { |
170 | let resources = load_extern_resources(cargo_toml, cargo_features)?; | 172 | let resources = load_extern_resources(cargo_toml, cargo_features)?; |
171 | out_dir_by_id = resources.out_dirs; | 173 | out_dir_by_id = resources.out_dirs; |
174 | cfgs = resources.cfgs; | ||
172 | proc_macro_dylib_paths = resources.proc_dylib_paths; | 175 | proc_macro_dylib_paths = resources.proc_dylib_paths; |
173 | } | 176 | } |
174 | 177 | ||
@@ -194,6 +197,7 @@ impl CargoWorkspace { | |||
194 | edition, | 197 | edition, |
195 | dependencies: Vec::new(), | 198 | dependencies: Vec::new(), |
196 | features: Vec::new(), | 199 | features: Vec::new(), |
200 | cfgs: cfgs.get(&id).cloned().unwrap_or_default(), | ||
197 | out_dir: out_dir_by_id.get(&id).cloned(), | 201 | out_dir: out_dir_by_id.get(&id).cloned(), |
198 | proc_macro_dylib_path: proc_macro_dylib_paths.get(&id).cloned(), | 202 | proc_macro_dylib_path: proc_macro_dylib_paths.get(&id).cloned(), |
199 | }); | 203 | }); |
@@ -275,6 +279,7 @@ impl CargoWorkspace { | |||
275 | pub struct ExternResources { | 279 | pub struct ExternResources { |
276 | out_dirs: FxHashMap<PackageId, PathBuf>, | 280 | out_dirs: FxHashMap<PackageId, PathBuf>, |
277 | proc_dylib_paths: FxHashMap<PackageId, PathBuf>, | 281 | proc_dylib_paths: FxHashMap<PackageId, PathBuf>, |
282 | cfgs: FxHashMap<PackageId, Vec<PathBuf>>, | ||
278 | } | 283 | } |
279 | 284 | ||
280 | pub fn load_extern_resources( | 285 | pub fn load_extern_resources( |
@@ -300,8 +305,9 @@ pub fn load_extern_resources( | |||
300 | for message in cargo_metadata::parse_messages(output.stdout.as_slice()) { | 305 | for message in cargo_metadata::parse_messages(output.stdout.as_slice()) { |
301 | if let Ok(message) = message { | 306 | if let Ok(message) = message { |
302 | match message { | 307 | match message { |
303 | Message::BuildScriptExecuted(BuildScript { package_id, out_dir, .. }) => { | 308 | Message::BuildScriptExecuted(BuildScript { package_id, out_dir, cfgs, .. }) => { |
304 | res.out_dirs.insert(package_id, out_dir); | 309 | res.out_dirs.insert(package_id.clone(), out_dir); |
310 | res.cfgs.insert(package_id, cfgs); | ||
305 | } | 311 | } |
306 | 312 | ||
307 | Message::CompilerArtifact(message) => { | 313 | Message::CompilerArtifact(message) => { |