Skip to content

Commit

Permalink
Use --emit=metadata rather than --crate-type=metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
nrc committed Jan 4, 2017
1 parent 71e996e commit 655decc
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 51 deletions.
70 changes: 29 additions & 41 deletions src/cargo/ops/cargo_rustc/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,6 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
unit: &Unit<'a>,
crate_types: &mut BTreeSet<String>)
-> CargoResult<()> {
if unit.profile.check {
crate_types.insert("metadata".to_string());
}
for target in unit.pkg.manifest().targets() {
crate_types.extend(target.rustc_crate_types().iter().map(|s| {
if *s == "lib" {
Expand Down Expand Up @@ -180,11 +177,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
.env_remove("RUST_LOG");

for crate_type in crate_types {
// Here and below we'll skip the metadata crate-type because it is
// not supported by older compilers. We'll do this one manually.
if crate_type != "metadata" {
process.arg("--crate-type").arg(crate_type);
}
process.arg("--crate-type").arg(crate_type);
}
if kind == Kind::Target {
process.arg("--target").arg(&self.target_triple());
Expand Down Expand Up @@ -216,9 +209,6 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
map.insert(crate_type.to_string(), None);
continue;
}
if crate_type == "metadata" {
continue;
}
let line = match lines.next() {
Some(line) => line,
None => bail!("malformed output when learning about \
Expand All @@ -235,12 +225,6 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
map.insert(crate_type.to_string(), Some((prefix.to_string(), suffix.to_string())));
}

// Manually handle the metadata case. If it is not supported by the
// compiler we'll error out elsewhere.
if crate_types.contains("metadata") {
map.insert("metadata".to_string(), Some(("lib".to_owned(), ".rmeta".to_owned())));
}

let cfg = if has_cfg {
Some(try!(lines.map(Cfg::from_str).collect()))
} else {
Expand Down Expand Up @@ -502,32 +486,36 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
let mut ret = Vec::new();
let mut unsupported = Vec::new();
{
let mut add = |crate_type: &str, linkable: bool| -> CargoResult<()> {
let crate_type = if crate_type == "lib" {"rlib"} else {crate_type};
match info.crate_types.get(crate_type) {
Some(&Some((ref prefix, ref suffix))) => {
let filename = out_dir.join(format!("{}{}{}", prefix, stem, suffix));
let link_dst = link_stem.clone().map(|(ld, ls)| {
ld.join(format!("{}{}{}", prefix, ls, suffix))
});
ret.push((filename, link_dst, linkable));
Ok(())
}
// not supported, don't worry about it
Some(&None) => {
unsupported.push(crate_type.to_string());
Ok(())
}
None => {
bail!("failed to learn about crate-type `{}` early on",
crate_type)
}
}
};

if unit.profile.check {
add("metadata", true)?;
let filename = out_dir.join(format!("lib{}.rmeta", stem));
let link_dst = link_stem.clone().map(|(ld, ls)| {
ld.join(format!("lib{}.rmeta", ls))
});
ret.push((filename, link_dst, true));
} else {
let mut add = |crate_type: &str, linkable: bool| -> CargoResult<()> {
let crate_type = if crate_type == "lib" {"rlib"} else {crate_type};
match info.crate_types.get(crate_type) {
Some(&Some((ref prefix, ref suffix))) => {
let filename = out_dir.join(format!("{}{}{}", prefix, stem, suffix));
let link_dst = link_stem.clone().map(|(ld, ls)| {
ld.join(format!("{}{}{}", prefix, ls, suffix))
});
ret.push((filename, link_dst, linkable));
Ok(())
}
// not supported, don't worry about it
Some(&None) => {
unsupported.push(crate_type.to_string());
Ok(())
}
None => {
bail!("failed to learn about crate-type `{}` early on",
crate_type)
}
}
};

match *unit.target.kind() {
TargetKind::Example |
TargetKind::Bin |
Expand Down
18 changes: 9 additions & 9 deletions src/cargo/ops/cargo_rustc/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,6 @@ fn prepare_rustc(cx: &mut Context,
unit: &Unit) -> CargoResult<ProcessBuilder> {
let mut base = cx.compilation.rustc_process(unit.pkg)?;
build_base_args(cx, &mut base, unit, &crate_types);
build_plugin_args(&mut base, cx, unit);
build_deps_args(&mut base, cx, unit)?;
Ok(base)
}
Expand Down Expand Up @@ -566,14 +565,18 @@ fn build_base_args(cx: &mut Context,
cmd.arg("--error-format").arg("json");
}

if check {
cmd.arg("--crate-type").arg("metadata");
} else if !test {
if !test {
for crate_type in crate_types.iter() {
cmd.arg("--crate-type").arg(crate_type);
}
}

if check {
cmd.arg("--emit=dep-info,metadata");
} else {
cmd.arg("--emit=dep-info,link");
}

let prefer_dynamic = (unit.target.for_host() &&
!unit.target.is_custom_build()) ||
(crate_types.contains(&"dylib") &&
Expand Down Expand Up @@ -653,10 +656,9 @@ fn build_base_args(cx: &mut Context,
if rpath {
cmd.arg("-C").arg("rpath");
}
}

cmd.arg("--out-dir").arg(&cx.out_dir(unit));

fn build_plugin_args(cmd: &mut ProcessBuilder, cx: &mut Context, unit: &Unit) {
fn opt(cmd: &mut ProcessBuilder, key: &str, prefix: &str,
val: Option<&OsStr>) {
if let Some(val) = val {
Expand All @@ -666,9 +668,6 @@ fn build_plugin_args(cmd: &mut ProcessBuilder, cx: &mut Context, unit: &Unit) {
}
}

cmd.arg("--out-dir").arg(&cx.out_dir(unit));
cmd.arg("--emit=dep-info,link");

if unit.kind == Kind::Target {
opt(cmd, "--target", "", cx.requested_target().map(|s| s.as_ref()));
}
Expand All @@ -677,6 +676,7 @@ fn build_plugin_args(cmd: &mut ProcessBuilder, cx: &mut Context, unit: &Unit) {
opt(cmd, "-C", "linker=", cx.linker(unit.kind).map(|s| s.as_ref()));
}


fn build_deps_args(cmd: &mut ProcessBuilder, cx: &mut Context, unit: &Unit)
-> CargoResult<()> {
cmd.arg("-L").arg(&{
Expand Down
2 changes: 1 addition & 1 deletion src/cargo/util/cfg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ impl FromStr for Cfg {
let mut p = Parser::new(s);
let e = p.cfg()?;
if p.t.next().is_some() {
bail!("malformed cfg value or key/value pair")
bail!("malformed cfg value or key/value pair: `{}`", s)
}
Ok(e)
}
Expand Down

0 comments on commit 655decc

Please sign in to comment.