let (kind, test, e) = errors.pop().unwrap();
Ok((Test::UnitTest(kind, test), vec![e]))
} else {
- Ok((Test::Multiple, errors.into_iter().map((|(_, _, e)| e)).collect()))
+ Ok((Test::Multiple, errors.into_iter().map(|(_, _, e)| e).collect()))
}
}
fn maybe_get_tool(&self, tool: &str) -> CargoResult<Option<PathBuf>> {
let var = tool.chars().flat_map(|c| c.to_uppercase()).collect::<String>();
if let Some(tool_path) = env::var_os(&var) {
- return Ok(Some(PathBuf::from(tool_path)));
+ let maybe_relative = match tool_path.to_str() {
+ Some(s) => s.contains("/") || s.contains("\\"),
+ None => false,
+ };
+ let path = if maybe_relative {
+ self.cwd.join(tool_path)
+ } else {
+ PathBuf::from(tool_path)
+ };
+ return Ok(Some(path))
}
let var = format!("build.{}", tool);
extern crate cargotest;
extern crate hamcrest;
+use std::env;
+use std::fs::{self, File};
use std::io::{Read, Write};
-use std::fs::File;
use cargotest::sleep_ms;
use cargotest::support::{project, execs, git};
assert_that(p.cargo("build").arg("--frozen").env("CARGO_HOME", p.root()),
execs().with_status(0));
}
+
+#[test]
+fn relative_rustc() {
+ let p = project("the_exe")
+ .file("Cargo.toml", r#"
+ [package]
+ name = "foo"
+ version = "0.1.0"
+ "#)
+ .file("src/main.rs", r#"
+ use std::process::Command;
+ use std::env;
+
+ fn main() {
+ let mut cmd = Command::new("rustc");
+ for arg in env::args_os().skip(1) {
+ cmd.arg(arg);
+ }
+ std::process::exit(cmd.status().unwrap().code().unwrap());
+ }
+ "#)
+ .build();
+ assert_that(p.cargo("build"), execs().with_status(0));
+
+ let src = p.root()
+ .join("target/debug/foo")
+ .with_extension(env::consts::EXE_EXTENSION);
+
+ Package::new("a", "0.1.0").publish();
+
+ let p = project("lib")
+ .file("Cargo.toml", r#"
+ [package]
+ name = "lib"
+ version = "0.1.0"
+
+ [dependencies]
+ a = "0.1"
+ "#)
+ .file("src/lib.rs", "")
+ .build();
+
+ fs::copy(&src, p.root().join(src.file_name().unwrap())).unwrap();
+
+ let file = format!("./foo{}", env::consts::EXE_SUFFIX);
+ assert_that(p.cargo("build").env("RUSTC", &file),
+ execs().with_status(0));
+}