Skip to content

Commit cf24280

Browse files
committed
Added default value for package_id attribute when encoding metadata for lib crates
1 parent ffcbd8d commit cf24280

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

src/librustc/back/link.rs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -634,20 +634,12 @@ pub fn build_link_meta(sess: Session,
634634
}
635635
}
636636

637-
fn crate_meta_pkgid(sess: Session, output: &Path, opt_pkg_id: Option<@str>)
637+
fn crate_meta_pkgid(sess: Session, name: @str, opt_pkg_id: Option<@str>)
638638
-> @str {
639639
match opt_pkg_id {
640640
Some(v) if !v.is_empty() => v,
641641
_ => {
642-
let pkg_id = session::expect(sess,
643-
output.filestem_str(),
644-
|| format!("output file name `{}` doesn't\
645-
appear to have a stem",
646-
output.display())).to_managed();
647-
if pkg_id.is_empty() {
648-
sess.fatal("missing crate link meta `package_id`, and the \
649-
inferred name is blank");
650-
}
642+
let pkg_id = name.clone();
651643
warn_missing(sess, "package_id", pkg_id);
652644
pkg_id
653645
}
@@ -662,7 +654,7 @@ pub fn build_link_meta(sess: Session,
662654
} = provided_link_metas(sess, c);
663655
let name = crate_meta_name(sess, output, opt_name);
664656
let vers = crate_meta_vers(sess, opt_vers);
665-
let pkg_id = crate_meta_pkgid(sess, output, opt_pkg_id);
657+
let pkg_id = crate_meta_pkgid(sess, name, opt_pkg_id);
666658
let dep_hashes = cstore::get_dep_hashes(sess.cstore);
667659
let extras_hash =
668660
crate_meta_extras_hash(symbol_hasher, cmh_items,

src/librustc/metadata/encoder.rs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1487,8 +1487,8 @@ fn encode_attributes(ebml_w: &mut writer::Encoder, attrs: &[Attribute]) {
14871487

14881488
// So there's a special crate attribute called 'link' which defines the
14891489
// metadata that Rust cares about for linking crates. This attribute requires
1490-
// 'name' and 'vers' items, so if the user didn't provide them we will throw
1491-
// them in anyway with default values.
1490+
// 'name', 'vers' and 'package_id' items, so if the user didn't provide them we
1491+
// will throw them in anyway with default values.
14921492
fn synthesize_crate_attrs(ecx: &EncodeContext,
14931493
crate: &Crate) -> ~[Attribute] {
14941494

@@ -1505,9 +1505,20 @@ fn synthesize_crate_attrs(ecx: &EncodeContext,
15051505
attr::mk_name_value_item_str(@"vers",
15061506
ecx.link_meta.vers);
15071507

1508-
let mut meta_items = ~[name_item, vers_item];
1508+
let pkgid_item = match ecx.link_meta.package_id {
1509+
Some(pkg_id) => attr::mk_name_value_item_str(@"package_id",
1510+
pkg_id),
1511+
// uses package_id equal to name;
1512+
// this should never happen here but package_id is an Option
1513+
// FIX: change package_id in LinkMeta to @str instead of Option<@str>
1514+
_ => attr::mk_name_value_item_str(@"package_id",
1515+
ecx.link_meta.name)
1516+
};
1517+
1518+
let mut meta_items = ~[name_item, vers_item, pkgid_item];
15091519

1510-
for &mi in items.iter().filter(|mi| "name" != mi.name() && "vers" != mi.name()) {
1520+
for &mi in items.iter().filter(|mi| "name" != mi.name() && "vers" != mi.name() &&
1521+
"package_id" != mi.name()) {
15111522
meta_items.push(mi);
15121523
}
15131524
let link_item = attr::mk_list_item(@"link", meta_items);

0 commit comments

Comments
 (0)