Added default value for package_id attribute when encoding metadata for lib crates
This commit is contained in:
parent
ffcbd8d767
commit
cf24280a3c
src/librustc
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user