Skip to content

Commit

Permalink
Only set cwd for test process, not compiler
Browse files Browse the repository at this point in the history
  • Loading branch information
richard-uk1 committed Jul 17, 2017
1 parent c35030a commit 5aa8cc8
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 11 deletions.
23 changes: 21 additions & 2 deletions src/tools/compiletest/src/procsrv.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,14 @@
// except according to those terms.

use std::env;
use std::ffi::OsString;
use std::io::prelude::*;
use std::io;
use std::path::PathBuf;
use std::process::{Child, Command, ExitStatus, Output, Stdio};

/// Get the name of the environment variable that holds dynamic library
/// locations
pub fn dylib_env_var() -> &'static str {
if cfg!(windows) {
"PATH"
Expand All @@ -26,11 +29,13 @@ pub fn dylib_env_var() -> &'static str {
}
}

/// Add `lib_path` and `aux_path` (if it is `Some`) to the dynamic library
/// env var
fn add_target_env(cmd: &mut Command, lib_path: &str, aux_path: Option<&str>) {
// Need to be sure to put both the lib_path and the aux path in the dylib
// search path for the child.
let var = dylib_env_var();
let mut path = env::split_paths(&env::var_os(var).unwrap_or_default())
let mut path = env::split_paths(&env::var_os(var).unwrap_or(OsString::new()))
.collect::<Vec<_>>();
if let Some(p) = aux_path {
path.insert(0, PathBuf::from(p))
Expand All @@ -42,12 +47,26 @@ fn add_target_env(cmd: &mut Command, lib_path: &str, aux_path: Option<&str>) {
cmd.env(var, newpath);
}

/// Represents exit status, stdout and stderr of a completed process
pub struct Result {
pub status: ExitStatus,
pub out: String,
pub err: String,
}

/// Runs a test program
///
/// # Params
/// - `lib_path` Path to search for required library
/// - `prog` command to run
/// - `aux_path` Optional extra path to search for required
/// auxiliary libraries
/// - `args` List of arguments to pass to `prog`
/// - `env` List of environment variables to set, `.0` is variable name,
/// `.1` is value
/// - `input` String to be fed as stdin
/// - `current_dir` Optional working dir to run command in
///
pub fn run(lib_path: &str,
prog: &str,
aux_path: Option<&str>,
Expand All @@ -69,7 +88,6 @@ pub fn run(lib_path: &str,
}
if let Some(cwd) = current_dir {
cmd.current_dir(cwd);
panic!("Backtrace");
}

let mut process = cmd.spawn()?;
Expand All @@ -85,6 +103,7 @@ pub fn run(lib_path: &str,
})
}

/// Same as `run`, but return process rather than waiting on completion
pub fn run_background(lib_path: &str,
prog: &str,
aux_path: Option<&str>,
Expand Down
28 changes: 19 additions & 9 deletions src/tools/compiletest/src/runtest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,8 @@ impl<'test> TestCx<'test> {
self.props.exec_env.clone(),
self.config.compile_lib_path.to_str().unwrap(),
Some(aux_dir.to_str().unwrap()),
Some(src))
Some(src),
None)
}

fn make_pp_args(&self,
Expand Down Expand Up @@ -690,6 +691,7 @@ actual:\n\
environment,
self.config.run_lib_path.to_str().unwrap(),
None,
None,
None);
}
}
Expand Down Expand Up @@ -1235,15 +1237,21 @@ actual:\n\
env,
self.config.run_lib_path.to_str().unwrap(),
Some(aux_dir.to_str().unwrap()),
None,
None)
}
_ => {
let aux_dir = self.aux_output_dir_name();
let working_dir =
Some(self.output_base_name()
.parent().unwrap()
.to_str().unwrap().to_owned());
self.compose_and_run(self.make_run_args(),
env,
self.config.run_lib_path.to_str().unwrap(),
Some(aux_dir.to_str().unwrap()),
None)
None,
working_dir)
}
}
}
Expand Down Expand Up @@ -1321,6 +1329,7 @@ actual:\n\
Vec::new(),
aux_cx.config.compile_lib_path.to_str().unwrap(),
Some(aux_dir.to_str().unwrap()),
None,
None);
if !auxres.status.success() {
self.fatal_proc_rec(
Expand All @@ -1334,16 +1343,18 @@ actual:\n\
self.props.rustc_env.clone(),
self.config.compile_lib_path.to_str().unwrap(),
Some(aux_dir.to_str().unwrap()),
input)
input,
None)
}

fn compose_and_run(&self,
ProcArgs{ args, prog }: ProcArgs,
procenv: Vec<(String, String)> ,
lib_path: &str,
aux_path: Option<&str>,
input: Option<String>) -> ProcRes {
self.program_output(lib_path, prog, aux_path, args, procenv, input)
input: Option<String>,
working_dir: Option<String>) -> ProcRes {
self.program_output(lib_path, prog, aux_path, args, procenv, input, working_dir)
}

fn make_compile_args(&self,
Expand Down Expand Up @@ -1536,7 +1547,8 @@ actual:\n\
aux_path: Option<&str>,
args: Vec<String>,
env: Vec<(String, String)>,
input: Option<String>)
input: Option<String>,
working_dir: Option<String>)
-> ProcRes {
let cmdline =
{
Expand All @@ -1546,8 +1558,6 @@ actual:\n\
logv(self.config, format!("executing {}", cmdline));
cmdline
};
let working_dir =
Some(self.output_base_name().parent().unwrap().to_str().unwrap().to_owned());

let procsrv::Result {
out,
Expand Down Expand Up @@ -1723,7 +1733,7 @@ actual:\n\
args: vec![format!("-input-file={}", irfile.to_str().unwrap()),
self.testpaths.file.to_str().unwrap().to_owned()]
};
self.compose_and_run(proc_args, Vec::new(), "", None, None)
self.compose_and_run(proc_args, Vec::new(), "", None, None, None)
}

fn run_codegen_test(&self) {
Expand Down

0 comments on commit 5aa8cc8

Please sign in to comment.