diff --git a/0009-Relocate-unset-tmp.patch b/0009-Relocate-unset-tmp.patch new file mode 100644 index 0000000..58c58db --- /dev/null +++ b/0009-Relocate-unset-tmp.patch @@ -0,0 +1,38 @@ +diff --git a/compiler/rustc_codegen_ssa/src/back/link.rs b/compiler/rustc_codegen_ssa/src/back/link.rs +index dd9d277fb..160e472cf 100644 +--- a/compiler/rustc_codegen_ssa/src/back/link.rs ++++ b/compiler/rustc_codegen_ssa/src/back/link.rs +@@ -48,7 +48,7 @@ use std::ffi::OsString; + use std::fs::{read, File, OpenOptions}; + use std::io::{BufWriter, Write}; + use std::ops::Deref; +-use std::path::{Path, PathBuf}; ++use std::path::{MAIN_SEPARATOR, Path, PathBuf}; + use std::process::{ExitStatus, Output, Stdio}; + use std::{env, fmt, fs, io, mem, str}; + +@@ -95,11 +95,24 @@ pub fn link_binary<'a>( + }); + + if outputs.outputs.should_link() { ++ let mut clear_tmp = false; ++ if env::var_os("TMPDIR").is_none() && env::var_os("HOME").is_some() { ++ let home_tmp = env::var_os("HOME").unwrap(); ++ let home_tmp = format!("{}{}{}", home_tmp.to_string_lossy(), MAIN_SEPARATOR, ".tmp"); ++ env::set_var("TMPDIR", &home_tmp); ++ if !Path::new(&home_tmp).exists() { ++ let _ = fs::create_dir_all(home_tmp); ++ } ++ clear_tmp = true; ++ } + let tmpdir = TempFileBuilder::new() + .prefix("rustc") + .tempdir() + .unwrap_or_else(|error| sess.emit_fatal(errors::CreateTempDir { error })); + let path = MaybeTempDir::new(tmpdir, sess.opts.cg.save_temps); ++ if clear_tmp { ++ env::remove_var("TMP"); ++ } + let output = out_filename( + sess, + crate_type, diff --git a/rust.spec b/rust.spec index 49e5c87..c055ad0 100644 --- a/rust.spec +++ b/rust.spec @@ -77,6 +77,7 @@ Patch5: 0005-Provide-ENV-controls-to-bypass-some-sb2-calls-betwee.patch Patch6: 0006-Scratchbox2-needs-to-be-able-to-tell-cargo-the-defau.patch Patch7: 0007-Disable-aarch64-outline-atomics-for-now.patch Patch8: 0008-Revert-Use-statx-s-64-bit-times-on-32-bit-linux-gnu.patch +Patch9: 0009-Relocate-unset-tmp.patch # This is the real rustc spec - the stub one appears near the end. %ifarch %ix86