Auto merge of #42481 - brson:wingnu, r=alexcrichton
Fix setting PATH during linkage on windows-gnu This makes the behavior almost exactly the same as before the VS2017 patch, except that on MSVC builds the host bin path is no longer added to PATH. I am not sure that's actually necessary on any platform. r? @alexcrichton Fixes https://github.com/rust-lang/rust/issues/42422
This commit is contained in:
commit
76eea743b4
|
@ -141,17 +141,20 @@ pub fn build_link_meta(incremental_hashes_map: &IncrementalHashesMap) -> LinkMet
|
|||
return r;
|
||||
}
|
||||
|
||||
// The third parameter is for an env vars, used to set up the path for MSVC
|
||||
// to find its DLLs
|
||||
// The third parameter is for env vars, used on windows to set up the
|
||||
// path for MSVC to find its DLLs, and gcc to find its bundled
|
||||
// toolchain
|
||||
pub fn get_linker(sess: &Session) -> (String, Command, Vec<(OsString, OsString)>) {
|
||||
let envs = vec![("PATH".into(), command_path(sess))];
|
||||
|
||||
if let Some(ref linker) = sess.opts.cg.linker {
|
||||
(linker.clone(), Command::new(linker), vec![])
|
||||
(linker.clone(), Command::new(linker), envs)
|
||||
} else if sess.target.target.options.is_like_msvc {
|
||||
let (cmd, envs) = msvc_link_exe_cmd(sess);
|
||||
("link.exe".to_string(), cmd, envs)
|
||||
} else {
|
||||
(sess.target.target.options.linker.clone(),
|
||||
Command::new(&sess.target.target.options.linker), vec![])
|
||||
let linker = &sess.target.target.options.linker;
|
||||
(linker.clone(), Command::new(&linker), envs)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -182,7 +185,7 @@ pub fn get_ar_prog(sess: &Session) -> String {
|
|||
})
|
||||
}
|
||||
|
||||
fn command_path(sess: &Session, extra: Option<PathBuf>) -> OsString {
|
||||
fn command_path(sess: &Session) -> OsString {
|
||||
// The compiler's sysroot often has some bundled tools, so add it to the
|
||||
// PATH for the child.
|
||||
let mut new_path = sess.host_filesearch(PathKind::All)
|
||||
|
@ -190,7 +193,6 @@ fn command_path(sess: &Session, extra: Option<PathBuf>) -> OsString {
|
|||
if let Some(path) = env::var_os("PATH") {
|
||||
new_path.extend(env::split_paths(&path));
|
||||
}
|
||||
new_path.extend(extra);
|
||||
env::join_paths(new_path).unwrap()
|
||||
}
|
||||
|
||||
|
@ -451,7 +453,7 @@ fn archive_config<'a>(sess: &'a Session,
|
|||
src: input.map(|p| p.to_path_buf()),
|
||||
lib_search_paths: archive_search_paths(sess),
|
||||
ar_prog: get_ar_prog(sess),
|
||||
command_path: command_path(sess, None),
|
||||
command_path: command_path(sess),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -727,7 +729,7 @@ fn link_natively(sess: &Session,
|
|||
|
||||
// The invocations of cc share some flags across platforms
|
||||
let (pname, mut cmd, envs) = get_linker(sess);
|
||||
// This will set PATH on MSVC
|
||||
// This will set PATH on windows
|
||||
cmd.envs(envs);
|
||||
|
||||
let root = sess.target_filesearch(PathKind::Native).get_lib_path();
|
||||
|
|
Loading…
Reference in New Issue