@@ -348,7 +348,7 @@ mod write {
348
348
* - Define CMETA as all the non-name, non-vers exported meta tags in the
349
349
* crate (in sorted order).
350
350
*
351
- * - Define CMH as hash(CMETA).
351
+ * - Define CMH as hash(CMETA + hashes of dependent crates ).
352
352
*
353
353
* - Compile our crate to lib CNAME-CMH-CVERS.so
354
354
*
@@ -395,7 +395,8 @@ fn build_link_meta(sess: session::session, c: ast::crate, output: str,
395
395
396
396
// This calculates CMH as defined above
397
397
fn crate_meta_extras_hash ( sha : sha1 , _crate : ast:: crate ,
398
- metas : provided_metas ) -> str {
398
+ metas : provided_metas ,
399
+ dep_hashes : [ str ] ) -> str {
399
400
fn len_and_str ( s : str ) -> str {
400
401
ret #fmt[ "%u_%s" , str:: byte_len ( s) , s] ;
401
402
}
@@ -421,6 +422,11 @@ fn build_link_meta(sess: session::session, c: ast::crate, output: str,
421
422
}
422
423
}
423
424
}
425
+
426
+ for dh in dep_hashes {
427
+ sha. input_str ( len_and_str ( dh) ) ;
428
+ }
429
+
424
430
ret truncated_sha1_result ( sha) ;
425
431
}
426
432
@@ -463,7 +469,9 @@ fn build_link_meta(sess: session::session, c: ast::crate, output: str,
463
469
let provided_metas = provided_link_metas ( sess, c) ;
464
470
let name = crate_meta_name ( sess, c, output, provided_metas) ;
465
471
let vers = crate_meta_vers ( sess, c, provided_metas) ;
466
- let extras_hash = crate_meta_extras_hash ( sha, c, provided_metas) ;
472
+ let dep_hashes = cstore:: get_dep_hashes ( sess. get_cstore ( ) ) ;
473
+ let extras_hash =
474
+ crate_meta_extras_hash ( sha, c, provided_metas, dep_hashes) ;
467
475
468
476
ret { name : name, vers : vers, extras_hash : extras_hash} ;
469
477
}
0 commit comments