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:
bors 2017-06-08 06:02:04 +00:00
commit 76eea743b4
1 changed files with 11 additions and 9 deletions

View File

@ -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();