about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorAndrei Formiga <archimedes_siracusa@hotmail.com>2013-11-08 16:51:40 -0300
committerAndrei Formiga <archimedes_siracusa@hotmail.com>2013-11-08 17:42:46 -0300
commitcf24280a3c84d2ef2df73e810da409a0f8474919 (patch)
treedf6c51de1a248ed9edf7d1e4dc7e8a0ebbef9ddb /src
parentffcbd8d767bec1382e401120f01f94fce8851ced (diff)
downloadrust-cf24280a3c84d2ef2df73e810da409a0f8474919.tar.gz
rust-cf24280a3c84d2ef2df73e810da409a0f8474919.zip
Added default value for package_id attribute when encoding metadata for lib crates
Diffstat (limited to 'src')
-rw-r--r--src/librustc/back/link.rs14
-rw-r--r--src/librustc/metadata/encoder.rs19
2 files changed, 18 insertions, 15 deletions
diff --git a/src/librustc/back/link.rs b/src/librustc/back/link.rs
index ab0763aac9e..b88966c0ab2 100644
--- a/src/librustc/back/link.rs
+++ b/src/librustc/back/link.rs
@@ -634,20 +634,12 @@ pub fn build_link_meta(sess: Session,
         }
     }
 
-    fn crate_meta_pkgid(sess: Session, output: &Path, opt_pkg_id: Option<@str>)
+    fn crate_meta_pkgid(sess: Session, name: @str, opt_pkg_id: Option<@str>)
         -> @str {
         match opt_pkg_id {
             Some(v) if !v.is_empty() => v,
             _ => {
-                let pkg_id = session::expect(sess,
-                                             output.filestem_str(),
-                                             || format!("output file name `{}` doesn't\
-                                                      appear to have a stem",
-                                                     output.display())).to_managed();
-                if pkg_id.is_empty() {
-                    sess.fatal("missing crate link meta `package_id`, and the \
-                                inferred name is blank");
-                }
+                let pkg_id = name.clone();
                 warn_missing(sess, "package_id", pkg_id);
                 pkg_id
             }
@@ -662,7 +654,7 @@ pub fn build_link_meta(sess: Session,
     } = provided_link_metas(sess, c);
     let name = crate_meta_name(sess, output, opt_name);
     let vers = crate_meta_vers(sess, opt_vers);
-    let pkg_id = crate_meta_pkgid(sess, output, opt_pkg_id);
+    let pkg_id = crate_meta_pkgid(sess, name, opt_pkg_id);
     let dep_hashes = cstore::get_dep_hashes(sess.cstore);
     let extras_hash =
         crate_meta_extras_hash(symbol_hasher, cmh_items,
diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs
index 1ad7e416342..0f328d33748 100644
--- a/src/librustc/metadata/encoder.rs
+++ b/src/librustc/metadata/encoder.rs
@@ -1487,8 +1487,8 @@ fn encode_attributes(ebml_w: &mut writer::Encoder, attrs: &[Attribute]) {
 
 // So there's a special crate attribute called 'link' which defines the
 // metadata that Rust cares about for linking crates. This attribute requires
-// 'name' and 'vers' items, so if the user didn't provide them we will throw
-// them in anyway with default values.
+// 'name', 'vers' and 'package_id' items, so if the user didn't provide them we
+// will throw them in anyway with default values.
 fn synthesize_crate_attrs(ecx: &EncodeContext,
                           crate: &Crate) -> ~[Attribute] {
 
@@ -1505,9 +1505,20 @@ fn synthesize_crate_attrs(ecx: &EncodeContext,
             attr::mk_name_value_item_str(@"vers",
                                          ecx.link_meta.vers);
 
-        let mut meta_items = ~[name_item, vers_item];
+        let pkgid_item = match ecx.link_meta.package_id {
+                Some(pkg_id) =>  attr::mk_name_value_item_str(@"package_id",
+                                                              pkg_id),
+                // uses package_id equal to name;
+                // this should never happen here but package_id is an Option
+                // FIX: change package_id in LinkMeta to @str instead of Option<@str>
+                _ => attr::mk_name_value_item_str(@"package_id",
+                                                  ecx.link_meta.name)
+        };
+
+        let mut meta_items = ~[name_item, vers_item, pkgid_item];
 
-        for &mi in items.iter().filter(|mi| "name" != mi.name() && "vers" != mi.name()) {
+        for &mi in items.iter().filter(|mi| "name" != mi.name() && "vers" != mi.name() &&
+                                            "package_id" != mi.name()) {
             meta_items.push(mi);
         }
         let link_item = attr::mk_list_item(@"link", meta_items);