Skip to content

Commit 28d1d60

Browse files
committed
Auto merge of #4054 - alexcrichton:beta-next, r=alexcrichton
[beta] Change inferring bin's name logic This is a backport of #4046
2 parents 03efb7f + 10341d8 commit 28d1d60

File tree

2 files changed

+78
-2
lines changed

2 files changed

+78
-2
lines changed

src/cargo/util/toml.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1431,11 +1431,25 @@ fn inferred_bin_path(bin: &TomlBinTarget,
14311431
}
14321432

14331433
return Path::new("src").join("bin").join(&format!("main.rs")).to_path_buf()
1434+
}
1435+
1436+
// bin_len > 1
1437+
let path = Path::new("src").join("bin").join(&format!("{}.rs", bin.name()));
1438+
if package_root.join(&path).exists() {
1439+
return path.to_path_buf()
1440+
}
1441+
1442+
let path = Path::new("src").join(&format!("{}.rs", bin.name()));
1443+
if package_root.join(&path).exists() {
1444+
return path.to_path_buf()
1445+
}
14341446

1447+
let path = Path::new("src").join("bin").join(&format!("main.rs"));
1448+
if package_root.join(&path).exists() {
1449+
return path.to_path_buf()
14351450
}
14361451

1437-
// here we have multiple bins, so they are expected to be located inside src/bin
1438-
Path::new("src").join("bin").join(&format!("{}.rs", bin.name())).to_path_buf()
1452+
return Path::new("src").join(&format!("main.rs")).to_path_buf()
14391453
}
14401454

14411455
fn build_profiles(profiles: &Option<TomlProfiles>) -> Profiles {

tests/build.rs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2870,6 +2870,68 @@ fn run_proper_binary_main_rs() {
28702870
execs().with_status(0));
28712871
}
28722872

2873+
#[test]
2874+
fn run_proper_alias_binary_from_src() {
2875+
let p = project("foo")
2876+
.file("Cargo.toml", r#"
2877+
[package]
2878+
name = "foo"
2879+
authors = []
2880+
version = "0.0.0"
2881+
[[bin]]
2882+
name = "foo"
2883+
[[bin]]
2884+
name = "bar"
2885+
"#)
2886+
.file("src/foo.rs", r#"
2887+
fn main() {
2888+
println!("foo");
2889+
}
2890+
"#).file("src/bar.rs", r#"
2891+
fn main() {
2892+
println!("bar");
2893+
}
2894+
"#);
2895+
2896+
assert_that(p.cargo_process("build")
2897+
.arg("--all"),
2898+
execs().with_status(0)
2899+
);
2900+
assert_that(process(&p.bin("foo")),
2901+
execs().with_status(0).with_stdout("foo\n"));
2902+
assert_that(process(&p.bin("bar")),
2903+
execs().with_status(0).with_stdout("bar\n"));
2904+
}
2905+
2906+
#[test]
2907+
fn run_proper_alias_binary_main_rs() {
2908+
let p = project("foo")
2909+
.file("Cargo.toml", r#"
2910+
[package]
2911+
name = "foo"
2912+
authors = []
2913+
version = "0.0.0"
2914+
[[bin]]
2915+
name = "foo"
2916+
[[bin]]
2917+
name = "bar"
2918+
"#)
2919+
.file("src/main.rs", r#"
2920+
fn main() {
2921+
println!("main");
2922+
}
2923+
"#);
2924+
2925+
assert_that(p.cargo_process("build")
2926+
.arg("--all"),
2927+
execs().with_status(0)
2928+
);
2929+
assert_that(process(&p.bin("foo")),
2930+
execs().with_status(0).with_stdout("main\n"));
2931+
assert_that(process(&p.bin("bar")),
2932+
execs().with_status(0).with_stdout("main\n"));
2933+
}
2934+
28732935
#[test]
28742936
fn run_proper_binary_main_rs_as_foo() {
28752937
let p = project("foo")

0 commit comments

Comments
 (0)