Avoid using env::temp when linking a binary
This keeps all build artefacts (even temporary ones) within the build directory.
This commit is contained in:
parent
eb171a227f
commit
b5c473e414
3 changed files with 11 additions and 14 deletions
|
|
@ -103,17 +103,18 @@ pub fn link_binary(
|
|||
});
|
||||
|
||||
if outputs.outputs.should_link() {
|
||||
let tmpdir = TempDirBuilder::new()
|
||||
.prefix("rustc")
|
||||
.tempdir()
|
||||
.unwrap_or_else(|error| sess.dcx().emit_fatal(errors::CreateTempDir { error }));
|
||||
let path = MaybeTempDir::new(tmpdir, sess.opts.cg.save_temps);
|
||||
let output = out_filename(
|
||||
sess,
|
||||
crate_type,
|
||||
outputs,
|
||||
codegen_results.crate_info.local_crate_name,
|
||||
);
|
||||
let tmpdir = TempDirBuilder::new()
|
||||
.prefix("rustc")
|
||||
.tempdir_in(output.parent().unwrap_or_else(|| Path::new(".")))
|
||||
.unwrap_or_else(|error| sess.dcx().emit_fatal(errors::CreateTempDir { error }));
|
||||
let path = MaybeTempDir::new(tmpdir, sess.opts.cg.save_temps);
|
||||
|
||||
let crate_name = format!("{}", codegen_results.crate_info.local_crate_name);
|
||||
let out_filename = output.file_for_writing(
|
||||
outputs,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
use std::ffi::{CString, OsStr};
|
||||
use std::path::{Path, PathBuf, absolute};
|
||||
use std::{env, fs, io};
|
||||
use std::{fs, io};
|
||||
|
||||
use tempfile::TempDir;
|
||||
|
||||
|
|
@ -139,8 +139,4 @@ impl<'a, 'b> TempDirBuilder<'a, 'b> {
|
|||
}
|
||||
self.builder.tempdir_in(dir)
|
||||
}
|
||||
|
||||
pub fn tempdir(&self) -> io::Result<TempDir> {
|
||||
self.tempdir_in(env::temp_dir())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
//@ needs-target-std
|
||||
//
|
||||
// When the TMP (on Windows) or TMPDIR (on Unix) variable is set to an invalid
|
||||
// or non-existing directory, this used to cause an internal compiler error (ICE). After the
|
||||
// addition of proper error handling in #28430, this test checks that the expected message is
|
||||
// printed.
|
||||
// or non-existing directory, this used to cause an internal compiler error (ICE).
|
||||
// See https://github.com/rust-lang/rust/issues/14698
|
||||
|
||||
use run_make_support::{is_windows, rustc};
|
||||
|
|
@ -18,5 +16,7 @@ fn main() {
|
|||
} else {
|
||||
rustc.env("TMPDIR", "fake");
|
||||
}
|
||||
rustc.input("foo.rs").run_fail().assert_stderr_contains("couldn't create a temp dir");
|
||||
let result = rustc.input("foo.rs").run_unchecked();
|
||||
// Ensure that rustc doesn't ICE by checking the exit code isn't 101.
|
||||
assert_ne!(result.status().code(), Some(101));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue