This commit is contained in:
Aleksey Kladov 2020-11-17 15:25:46 +01:00
parent bd4d375a64
commit e88b5fe916

View file

@ -304,14 +304,14 @@ fn cargo_to_crate_graph(
for pkg in cargo.packages() { for pkg in cargo.packages() {
let mut lib_tgt = None; let mut lib_tgt = None;
for &tgt in cargo[pkg].targets.iter() { for &tgt in cargo[pkg].targets.iter() {
if let Some(crate_id) = add_target_crate_root( if let Some(file_id) = load(&cargo[tgt].root) {
&mut crate_graph, let crate_id = add_target_crate_root(
&cargo[pkg], &mut crate_graph,
&cargo[tgt], &cargo[pkg],
&cfg_options, &cfg_options,
proc_macro_client, proc_macro_client,
load, file_id,
) { );
if cargo[tgt].kind == TargetKind::Lib { if cargo[tgt].kind == TargetKind::Lib {
lib_tgt = Some((crate_id, cargo[tgt].name.clone())); lib_tgt = Some((crate_id, cargo[tgt].name.clone()));
pkg_to_lib_crate.insert(pkg, crate_id); pkg_to_lib_crate.insert(pkg, crate_id);
@ -380,14 +380,14 @@ fn cargo_to_crate_graph(
continue; continue;
} }
if let Some(crate_id) = add_target_crate_root( if let Some(file_id) = load(&rustc_workspace[tgt].root) {
&mut crate_graph, let crate_id = add_target_crate_root(
&rustc_workspace[pkg], &mut crate_graph,
&rustc_workspace[tgt], &rustc_workspace[pkg],
&cfg_options, &cfg_options,
proc_macro_client, proc_macro_client,
load, file_id,
) { );
pkg_to_lib_crate.insert(pkg, crate_id); pkg_to_lib_crate.insert(pkg, crate_id);
// Add dependencies on the core / std / alloc for rustc // Add dependencies on the core / std / alloc for rustc
for (name, krate) in public_deps.iter() { for (name, krate) in public_deps.iter() {
@ -432,49 +432,45 @@ fn cargo_to_crate_graph(
fn add_target_crate_root( fn add_target_crate_root(
crate_graph: &mut CrateGraph, crate_graph: &mut CrateGraph,
pkg: &cargo_workspace::PackageData, pkg: &cargo_workspace::PackageData,
tgt: &cargo_workspace::TargetData,
cfg_options: &CfgOptions, cfg_options: &CfgOptions,
proc_macro_client: &ProcMacroClient, proc_macro_client: &ProcMacroClient,
load: &mut dyn FnMut(&AbsPath) -> Option<FileId>, file_id: FileId,
) -> Option<CrateId> { ) -> CrateId {
let root = tgt.root.as_path(); let edition = pkg.edition;
if let Some(file_id) = load(root) { let cfg_options = {
let edition = pkg.edition; let mut opts = cfg_options.clone();
let cfg_options = { for feature in pkg.features.iter() {
let mut opts = cfg_options.clone(); opts.insert_key_value("feature".into(), feature.into());
for feature in pkg.features.iter() { }
opts.insert_key_value("feature".into(), feature.into()); opts.extend(pkg.cfgs.iter().cloned());
} opts
opts.extend(pkg.cfgs.iter().cloned()); };
opts let mut env = Env::default();
}; if let Some(out_dir) = &pkg.out_dir {
let mut env = Env::default(); // NOTE: cargo and rustc seem to hide non-UTF-8 strings from env! and option_env!()
if let Some(out_dir) = &pkg.out_dir { if let Some(out_dir) = out_dir.to_str().map(|s| s.to_owned()) {
// NOTE: cargo and rustc seem to hide non-UTF-8 strings from env! and option_env!() env.set("OUT_DIR", out_dir);
if let Some(out_dir) = out_dir.to_str().map(|s| s.to_owned()) {
env.set("OUT_DIR", out_dir);
}
} }
let proc_macro = pkg
.proc_macro_dylib_path
.as_ref()
.map(|it| proc_macro_client.by_dylib_path(&it))
.unwrap_or_default();
let display_name = CrateDisplayName::from_canonical_name(pkg.name.clone());
let crate_id = crate_graph.add_crate_root(
file_id,
edition,
Some(display_name),
cfg_options,
env,
proc_macro.clone(),
);
return Some(crate_id);
} }
None let proc_macro = pkg
.proc_macro_dylib_path
.as_ref()
.map(|it| proc_macro_client.by_dylib_path(&it))
.unwrap_or_default();
let display_name = CrateDisplayName::from_canonical_name(pkg.name.clone());
let crate_id = crate_graph.add_crate_root(
file_id,
edition,
Some(display_name),
cfg_options,
env,
proc_macro.clone(),
);
crate_id
} }
fn sysroot_to_crate_graph( fn sysroot_to_crate_graph(
crate_graph: &mut CrateGraph, crate_graph: &mut CrateGraph,
sysroot: &Sysroot, sysroot: &Sysroot,