Added default value for package_id attribute when encoding metadata for lib crates

This commit is contained in:
Andrei Formiga 2013-11-08 16:51:40 -03:00
parent ffcbd8d767
commit cf24280a3c
2 changed files with 18 additions and 15 deletions
src/librustc
back
metadata

@ -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,

@ -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)
};
for &mi in items.iter().filter(|mi| "name" != mi.name() && "vers" != mi.name()) {
let mut meta_items = ~[name_item, vers_item, pkgid_item];
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);