@@ -9,6 +9,7 @@ use rustc::hir::lowering::lower_crate;
9
9
use rustc:: hir:: def_id:: { CrateNum , LOCAL_CRATE } ;
10
10
use rustc:: lint;
11
11
use rustc:: middle:: { self , reachable, resolve_lifetime, stability} ;
12
+ use rustc:: middle:: cstore:: CrateStore ;
12
13
use rustc:: middle:: privacy:: AccessLevels ;
13
14
use rustc:: ty:: { self , AllArenas , Resolutions , TyCtxt , GlobalCtxt } ;
14
15
use rustc:: ty:: steal:: Steal ;
@@ -657,7 +658,8 @@ fn escape_dep_filename(filename: &FileName) -> String {
657
658
filename. to_string ( ) . replace ( " " , "\\ " )
658
659
}
659
660
660
- fn write_out_deps ( sess : & Session , outputs : & OutputFilenames , out_filenames : & [ PathBuf ] ) {
661
+ fn write_out_deps ( compiler : & Compiler , outputs : & OutputFilenames , out_filenames : & [ PathBuf ] ) {
662
+ let sess = & compiler. sess ;
661
663
// Write out dependency rules to the dep-info file if requested
662
664
if !sess. opts . output_types . contains_key ( & OutputType :: DepInfo ) {
663
665
return ;
@@ -667,13 +669,28 @@ fn write_out_deps(sess: &Session, outputs: &OutputFilenames, out_filenames: &[Pa
667
669
let result = ( || -> io:: Result < ( ) > {
668
670
// Build a list of files used to compile the output and
669
671
// write Makefile-compatible dependency rules
670
- let files: Vec < String > = sess. source_map ( )
672
+ let mut files: Vec < String > = sess. source_map ( )
671
673
. files ( )
672
674
. iter ( )
673
675
. filter ( |fmap| fmap. is_real_file ( ) )
674
676
. filter ( |fmap| !fmap. is_imported ( ) )
675
677
. map ( |fmap| escape_dep_filename ( & fmap. name ) )
676
678
. collect ( ) ;
679
+
680
+ for cnum in compiler. cstore . crates_untracked ( ) {
681
+ let metadata = compiler. cstore . crate_data_as_rc_any ( cnum) ;
682
+ let metadata = metadata. downcast_ref :: < cstore:: CrateMetadata > ( ) . unwrap ( ) ;
683
+ if let Some ( ( path, _) ) = & metadata. source . dylib {
684
+ files. push ( escape_dep_filename ( & FileName :: Real ( path. clone ( ) ) ) ) ;
685
+ }
686
+ if let Some ( ( path, _) ) = & metadata. source . rlib {
687
+ files. push ( escape_dep_filename ( & FileName :: Real ( path. clone ( ) ) ) ) ;
688
+ }
689
+ if let Some ( ( path, _) ) = & metadata. source . rmeta {
690
+ files. push ( escape_dep_filename ( & FileName :: Real ( path. clone ( ) ) ) ) ;
691
+ }
692
+ }
693
+
677
694
let mut file = fs:: File :: create ( & deps_filename) ?;
678
695
for path in out_filenames {
679
696
writeln ! ( file, "{}: {}\n " , path. display( ) , files. join( " " ) ) ?;
@@ -742,7 +759,7 @@ pub fn prepare_outputs(
742
759
}
743
760
}
744
761
745
- write_out_deps ( sess , & outputs, & output_paths) ;
762
+ write_out_deps ( compiler , & outputs, & output_paths) ;
746
763
747
764
let only_dep_info = sess. opts . output_types . contains_key ( & OutputType :: DepInfo )
748
765
&& sess. opts . output_types . len ( ) == 1 ;
0 commit comments