Auto merge of #4046 - jmatraszek:fix_rust_41797, r=alexcrichton

Change inferring bin's name logic

Should fix rust-lang/rust#41797.
This commit is contained in:
bors 2017-05-15 20:28:27 +00:00
commit d5bfd58a03
2 changed files with 79 additions and 3 deletions

View file

@ -1422,11 +1422,25 @@ fn inferred_bin_path(bin: &TomlBinTarget,
}
return Path::new("src").join("bin").join(&format!("main.rs")).to_path_buf()
}
// here we have multiple bins, so they are expected to be located inside src/bin
Path::new("src").join("bin").join(&format!("{}.rs", bin.name())).to_path_buf()
// bin_len > 1
let path = Path::new("src").join("bin").join(&format!("{}.rs", bin.name()));
if package_root.join(&path).exists() {
return path.to_path_buf()
}
let path = Path::new("src").join(&format!("{}.rs", bin.name()));
if package_root.join(&path).exists() {
return path.to_path_buf()
}
let path = Path::new("src").join("bin").join(&format!("main.rs"));
if package_root.join(&path).exists() {
return path.to_path_buf()
}
return Path::new("src").join(&format!("main.rs")).to_path_buf()
}
fn build_profiles(profiles: &Option<TomlProfiles>) -> Profiles {

View file

@ -3010,6 +3010,68 @@ fn run_proper_binary_main_rs() {
execs().with_status(0));
}
#[test]
fn run_proper_alias_binary_from_src() {
let p = project("foo")
.file("Cargo.toml", r#"
[package]
name = "foo"
authors = []
version = "0.0.0"
[[bin]]
name = "foo"
[[bin]]
name = "bar"
"#)
.file("src/foo.rs", r#"
fn main() {
println!("foo");
}
"#).file("src/bar.rs", r#"
fn main() {
println!("bar");
}
"#);
assert_that(p.cargo_process("build")
.arg("--all"),
execs().with_status(0)
);
assert_that(process(&p.bin("foo")),
execs().with_status(0).with_stdout("foo\n"));
assert_that(process(&p.bin("bar")),
execs().with_status(0).with_stdout("bar\n"));
}
#[test]
fn run_proper_alias_binary_main_rs() {
let p = project("foo")
.file("Cargo.toml", r#"
[package]
name = "foo"
authors = []
version = "0.0.0"
[[bin]]
name = "foo"
[[bin]]
name = "bar"
"#)
.file("src/main.rs", r#"
fn main() {
println!("main");
}
"#);
assert_that(p.cargo_process("build")
.arg("--all"),
execs().with_status(0)
);
assert_that(process(&p.bin("foo")),
execs().with_status(0).with_stdout("main\n"));
assert_that(process(&p.bin("bar")),
execs().with_status(0).with_stdout("main\n"));
}
#[test]
fn run_proper_binary_main_rs_as_foo() {
let p = project("foo")