about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2014-07-05 12:37:43 -0700
committerAlex Crichton <alex@alexcrichton.com>2014-07-05 12:46:42 -0700
commit56f71015515490b65b5fbb46ff0bbc7d7af82450 (patch)
tree23adf899f04d42d55b35334a7c29d3be3f5a6e97
parent15b680ae86eefae754c3a348d89207fa100b4ca6 (diff)
downloadrust-56f71015515490b65b5fbb46ff0bbc7d7af82450.tar.gz
rust-56f71015515490b65b5fbb46ff0bbc7d7af82450.zip
rustc: Default #[crate_name] on input, not output
-rw-r--r--src/librustc/back/link.rs21
-rw-r--r--src/librustc/driver/driver.rs5
-rw-r--r--src/librustc/driver/mod.rs3
-rw-r--r--src/librustdoc/clean/mod.rs9
-rw-r--r--src/librustdoc/core.rs7
-rw-r--r--src/test/compile-fail/bad-crate-id2.rs2
-rw-r--r--src/test/run-make/weird-output-filenames/Makefile15
7 files changed, 29 insertions, 33 deletions
diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs
index c306a184ca1..f1856850701 100644
--- a/src/librustc/back/link.rs
+++ b/src/librustc/back/link.rs
@@ -11,7 +11,7 @@
 use back::archive::{Archive, METADATA_FILENAME};
 use back::rpath;
 use back::svh::Svh;
-use driver::driver::{CrateTranslation, OutputFilenames};
+use driver::driver::{CrateTranslation, OutputFilenames, Input, FileInput};
 use driver::config::NoDebugInfo;
 use driver::session::Session;
 use driver::config;
@@ -545,10 +545,9 @@ pub mod write {
  *    system linkers understand.
  */
 
-// FIXME (#9639): This needs to handle non-utf8 `out_filestem` values
 pub fn find_crate_name(sess: Option<&Session>,
                        attrs: &[ast::Attribute],
-                       out_filestem: &str) -> String {
+                       input: &Input) -> String {
     use syntax::crateid::CrateId;
 
     let validate = |s: String, span: Option<Span>| {
@@ -591,11 +590,17 @@ pub fn find_crate_name(sess: Option<&Session>,
         }
         None => {}
     }
-    return validate(from_str(out_filestem).unwrap_or_else(|| {
-        let mut s = out_filestem.chars().filter(|c| c.is_XID_continue());
-        from_str(s.collect::<String>().as_slice())
-            .or(from_str("rust-out")).unwrap()
-    }), None)
+    match *input {
+        FileInput(ref path) => {
+            match path.filestem_str() {
+                Some(s) => return validate(s.to_string(), None),
+                None => {}
+            }
+        }
+        _ => {}
+    }
+
+    "rust-out".to_string()
 }
 
 pub fn build_link_meta(sess: &Session, krate: &ast::Crate,
diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs
index 12efecb4a0b..16605c06017 100644
--- a/src/librustc/driver/driver.rs
+++ b/src/librustc/driver/driver.rs
@@ -77,7 +77,7 @@ pub fn compile_input(sess: Session,
                                                  krate.attrs.as_slice(),
                                                  &sess);
             let id = link::find_crate_name(Some(&sess), krate.attrs.as_slice(),
-                                           outputs.out_filestem.as_slice());
+                                           input);
             let (expanded_crate, ast_map)
                 = match phase_2_configure_and_expand(&sess, krate, id.as_slice()) {
                     None => return,
@@ -652,8 +652,7 @@ pub fn pretty_print_input(sess: Session,
                           ppm: PpMode,
                           ofile: Option<Path>) {
     let krate = phase_1_parse_input(&sess, cfg, input);
-    let id = link::find_crate_name(Some(&sess), krate.attrs.as_slice(),
-                                   input.filestem().as_slice());
+    let id = link::find_crate_name(Some(&sess), krate.attrs.as_slice(), input);
 
     let (krate, ast_map, is_expanded) = match ppm {
         PpmExpanded | PpmExpandedIdentified | PpmTyped | PpmFlowGraph(_) => {
diff --git a/src/librustc/driver/mod.rs b/src/librustc/driver/mod.rs
index cbbc8ebd8c8..807c2590566 100644
--- a/src/librustc/driver/mod.rs
+++ b/src/librustc/driver/mod.rs
@@ -303,8 +303,7 @@ fn print_crate_info(sess: &Session,
                                                        ofile,
                                                        attrs.as_slice(),
                                                        sess);
-        let id = link::find_crate_name(Some(sess), attrs.as_slice(),
-                                       t_outputs.out_filestem.as_slice());
+        let id = link::find_crate_name(Some(sess), attrs.as_slice(), input);
 
         if crate_name {
             println!("{}", id);
diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs
index 3cf8d6b3827..1ddd97e2ed4 100644
--- a/src/librustdoc/clean/mod.rs
+++ b/src/librustdoc/clean/mod.rs
@@ -119,14 +119,7 @@ impl<'a> Clean<Crate> for visit_ast::RustdocVisitor<'a> {
 
         // Figure out the name of this crate
         let input = driver::FileInput(cx.src.clone());
-        let t_outputs = driver::build_output_filenames(&input,
-                                                       &None,
-                                                       &None,
-                                                       self.attrs.as_slice(),
-                                                       cx.sess());
-        let name = link::find_crate_name(None,
-                                         self.attrs.as_slice(),
-                                         t_outputs.out_filestem.as_slice());
+        let name = link::find_crate_name(None, self.attrs.as_slice(), &input);
 
         // Clean the crate, translating the entire libsyntax AST to one that is
         // understood by rustdoc.
diff --git a/src/librustdoc/core.rs b/src/librustdoc/core.rs
index 058face151c..9ef671ef2fc 100644
--- a/src/librustdoc/core.rs
+++ b/src/librustdoc/core.rs
@@ -84,8 +84,7 @@ fn get_ast_and_resolve(cpath: &Path, libs: HashSet<Path>, cfgs: Vec<String>)
     use rustc::driver::driver::{FileInput,
                                 phase_1_parse_input,
                                 phase_2_configure_and_expand,
-                                phase_3_run_analysis_passes,
-                                build_output_filenames};
+                                phase_3_run_analysis_passes};
     use rustc::driver::config::build_configuration;
 
     let input = FileInput(cpath.clone());
@@ -118,10 +117,8 @@ fn get_ast_and_resolve(cpath: &Path, libs: HashSet<Path>, cfgs: Vec<String>)
 
     let krate = phase_1_parse_input(&sess, cfg, &input);
 
-    let t_outputs = build_output_filenames(&input, &None, &None,
-                                           krate.attrs.as_slice(), &sess);
     let name = link::find_crate_name(Some(&sess), krate.attrs.as_slice(),
-                                     t_outputs.out_filestem.as_slice());
+                                     &input);
 
     let (krate, ast_map)
         = phase_2_configure_and_expand(&sess, krate, name.as_slice())
diff --git a/src/test/compile-fail/bad-crate-id2.rs b/src/test/compile-fail/bad-crate-id2.rs
index fcbdc6d1f24..22e98b61c61 100644
--- a/src/test/compile-fail/bad-crate-id2.rs
+++ b/src/test/compile-fail/bad-crate-id2.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-extern crate bar = "#a"; //~ ERROR: invalid character in crate name: `#`
+extern crate bar = "#a"; //~ ERROR: invalid character `#` in crate name: `#a`
 
 fn main() {}
 
diff --git a/src/test/run-make/weird-output-filenames/Makefile b/src/test/run-make/weird-output-filenames/Makefile
index 37dcf9a6c4a..5d6e629ffc1 100644
--- a/src/test/run-make/weird-output-filenames/Makefile
+++ b/src/test/run-make/weird-output-filenames/Makefile
@@ -1,9 +1,12 @@
 -include ../tools.mk
 
 all:
-	$(RUSTC) foo.rs -o $(TMPDIR)/.foo 2>&1 \
-		| grep "invalid character in crate name:"
-	$(RUSTC) foo.rs -o $(TMPDIR)/.foo.bar 2>&1 \
-		| grep "invalid character in crate name:"
-	$(RUSTC) foo.rs -o $(TMPDIR)/+foo+bar 2>&1 \
-		| grep "invalid character in crate name:"
+	cp foo.rs $(TMPDIR)/.foo.rs
+	$(RUSTC) $(TMPDIR)/.foo.rs 2>&1 \
+		| grep "invalid character.*in crate name:"
+	cp foo.rs $(TMPDIR)/.foo.bar
+	$(RUSTC) $(TMPDIR)/.foo.bar 2>&1 \
+		| grep "invalid character.*in crate name:"
+	cp foo.rs $(TMPDIR)/+foo+bar
+	$(RUSTC) $(TMPDIR)/+foo+bar 2>&1 \
+		| grep "invalid character.*in crate name:"