@@ -1487,8 +1487,8 @@ fn encode_attributes(ebml_w: &mut writer::Encoder, attrs: &[Attribute]) {
1487
1487
1488
1488
// So there's a special crate attribute called 'link' which defines the
1489
1489
// 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.
1492
1492
fn synthesize_crate_attrs ( ecx : & EncodeContext ,
1493
1493
crate : & Crate ) -> ~[ Attribute ] {
1494
1494
@@ -1505,9 +1505,20 @@ fn synthesize_crate_attrs(ecx: &EncodeContext,
1505
1505
attr:: mk_name_value_item_str ( @"vers",
1506
1506
ecx. link_meta . vers ) ;
1507
1507
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] ;
1509
1519
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 ( ) ) {
1511
1522
meta_items. push ( mi) ;
1512
1523
}
1513
1524
let link_item = attr:: mk_list_item ( @"link", meta_items) ;
0 commit comments