rustc: Fix naming output files with --crate-name

The output file was only being renamed based off #[crate_name], not #[crate_id]
or --crate-name. Both of these behaviors have been restored now.
This commit is contained in:
Alex Crichton 2014-07-07 19:04:34 -07:00
parent c175ed4425
commit 2c26a00f91
5 changed files with 54 additions and 5 deletions

View File

@ -903,10 +903,21 @@ pub fn build_output_filenames(input: &Input,
};
// If a crate name is present, we use it as the link name
let stem = match attr::find_crate_name(attrs) {
None => input.filestem(),
Some(name) => name.get().to_string(),
};
let stem = sess.opts.crate_name.clone().or_else(|| {
attr::find_crate_name(attrs).map(|n| n.get().to_string())
}).or_else(|| {
// NB: this clause can be removed once #[crate_id] is no longer
// deprecated.
//
// Also note that this will be warned about later so we don't
// warn about it here.
use syntax::crateid::CrateId;
attrs.iter().find(|at| at.check_name("crate_id"))
.and_then(|at| at.value_str())
.and_then(|s| from_str::<CrateId>(s.get()))
.map(|id| id.name)
}).unwrap_or(input.filestem());
OutputFilenames {
out_directory: dirpath,
out_filestem: stem,

View File

@ -575,12 +575,12 @@ impl LintPass for UnusedAttribute {
];
static CRATE_ATTRS: &'static [&'static str] = &[
"crate_name",
"crate_type",
"feature",
"no_start",
"no_main",
"no_std",
"crate_id",
"desc",
"comment",
"license",

View File

@ -0,0 +1,13 @@
-include ../tools.mk
all:
$(RUSTC) foo.rs
rm $(TMPDIR)/$(call BIN,foo)
$(RUSTC) foo.rs --crate-name bar
rm $(TMPDIR)/$(call BIN,bar)
$(RUSTC) foo1.rs
rm $(TMPDIR)/$(call BIN,foo)
$(RUSTC) foo1.rs --crate-name bar
rm $(TMPDIR)/$(call BIN,bar)
$(RUSTC) foo1.rs --crate-name bar -o $(TMPDIR)/bar1
rm $(TMPDIR)/$(call BIN,bar1)

View File

@ -0,0 +1,11 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
fn main() {}

View File

@ -0,0 +1,14 @@
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![crate_name = "foo"]
fn main() {}