1
1
use rustc_data_structures:: fx:: FxHashSet ;
2
+ use rustc_data_structures:: temp_dir:: MaybeTempDir ;
2
3
use rustc_fs_util:: fix_windows_verbatim_for_gcc;
3
4
use rustc_hir:: def_id:: CrateNum ;
4
5
use rustc_middle:: middle:: cstore:: { EncodedMetadata , LibSource , NativeLib } ;
@@ -23,7 +24,7 @@ use super::rpath::{self, RPathConfig};
23
24
use crate :: { looks_like_rust_object_file, CodegenResults , CrateInfo , METADATA_FILENAME } ;
24
25
25
26
use cc:: windows_registry;
26
- use tempfile:: { Builder as TempFileBuilder , TempDir } ;
27
+ use tempfile:: Builder as TempFileBuilder ;
27
28
28
29
use std:: ffi:: OsString ;
29
30
use std:: path:: { Path , PathBuf } ;
@@ -70,35 +71,29 @@ pub fn link_binary<'a, B: ArchiveBuilder<'a>>(
70
71
}
71
72
} ) ;
72
73
73
- let tmpdir = TempFileBuilder :: new ( )
74
- . prefix ( "rustc" )
75
- . tempdir ( )
76
- . unwrap_or_else ( |err| sess. fatal ( & format ! ( "couldn't create a temp dir: {}" , err) ) ) ;
77
-
78
74
if outputs. outputs . should_codegen ( ) {
75
+ let tmpdir = TempFileBuilder :: new ( )
76
+ . prefix ( "rustc" )
77
+ . tempdir ( )
78
+ . unwrap_or_else ( |err| sess. fatal ( & format ! ( "couldn't create a temp dir: {}" , err) ) ) ;
79
+ let path = MaybeTempDir :: new ( tmpdir, sess. opts . cg . save_temps ) ;
79
80
let out_filename = out_filename ( sess, crate_type, outputs, crate_name) ;
80
81
match crate_type {
81
82
CrateType :: Rlib => {
82
83
let _timer = sess. timer ( "link_rlib" ) ;
83
- link_rlib :: < B > (
84
- sess,
85
- codegen_results,
86
- RlibFlavor :: Normal ,
87
- & out_filename,
88
- & tmpdir,
89
- )
90
- . build ( ) ;
84
+ link_rlib :: < B > ( sess, codegen_results, RlibFlavor :: Normal , & out_filename, & path)
85
+ . build ( ) ;
91
86
}
92
87
CrateType :: Staticlib => {
93
- link_staticlib :: < B > ( sess, codegen_results, & out_filename, & tmpdir ) ;
88
+ link_staticlib :: < B > ( sess, codegen_results, & out_filename, & path ) ;
94
89
}
95
90
_ => {
96
91
link_natively :: < B > (
97
92
sess,
98
93
crate_type,
99
94
& out_filename,
100
95
codegen_results,
101
- tmpdir . path ( ) ,
96
+ path. as_ref ( ) ,
102
97
target_cpu,
103
98
) ;
104
99
}
@@ -107,10 +102,6 @@ pub fn link_binary<'a, B: ArchiveBuilder<'a>>(
107
102
sess. parse_sess . span_diagnostic . emit_artifact_notification ( & out_filename, "link" ) ;
108
103
}
109
104
}
110
-
111
- if sess. opts . cg . save_temps {
112
- let _ = tmpdir. into_path ( ) ;
113
- }
114
105
}
115
106
116
107
// Remove the temporary object file and metadata if we aren't saving temps
@@ -279,8 +270,8 @@ pub fn each_linked_rlib(
279
270
/// building an `.rlib` (stomping over one another), or writing an `.rmeta` into a
280
271
/// directory being searched for `extern crate` (observing an incomplete file).
281
272
/// The returned path is the temporary file containing the complete metadata.
282
- pub fn emit_metadata ( sess : & Session , metadata : & EncodedMetadata , tmpdir : & TempDir ) -> PathBuf {
283
- let out_filename = tmpdir. path ( ) . join ( METADATA_FILENAME ) ;
273
+ pub fn emit_metadata ( sess : & Session , metadata : & EncodedMetadata , tmpdir : & MaybeTempDir ) -> PathBuf {
274
+ let out_filename = tmpdir. as_ref ( ) . join ( METADATA_FILENAME ) ;
284
275
let result = fs:: write ( & out_filename, & metadata. raw_data ) ;
285
276
286
277
if let Err ( e) = result {
@@ -301,7 +292,7 @@ fn link_rlib<'a, B: ArchiveBuilder<'a>>(
301
292
codegen_results : & CodegenResults ,
302
293
flavor : RlibFlavor ,
303
294
out_filename : & Path ,
304
- tmpdir : & TempDir ,
295
+ tmpdir : & MaybeTempDir ,
305
296
) -> B {
306
297
info ! ( "preparing rlib to {:?}" , out_filename) ;
307
298
let mut ab = <B as ArchiveBuilder >:: new ( sess, out_filename, None ) ;
@@ -406,7 +397,7 @@ fn link_staticlib<'a, B: ArchiveBuilder<'a>>(
406
397
sess : & ' a Session ,
407
398
codegen_results : & CodegenResults ,
408
399
out_filename : & Path ,
409
- tempdir : & TempDir ,
400
+ tempdir : & MaybeTempDir ,
410
401
) {
411
402
let mut ab =
412
403
link_rlib :: < B > ( sess, codegen_results, RlibFlavor :: StaticlibBase , out_filename, tempdir) ;
0 commit comments