Skip to content

Commit 9e9813a

Browse files
committed
Add tests for CARGO_BUILD_TYPE duplicate shared deps.
1 parent 26f6f95 commit 9e9813a

File tree

1 file changed

+200
-0
lines changed

1 file changed

+200
-0
lines changed

tests/testsuite/build_script.rs

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2216,6 +2216,206 @@ fn test_duplicate_deps() {
22162216
p.cargo("build").run();
22172217
}
22182218

2219+
#[cargo_test]
2220+
fn test_duplicate_shared_deps_native() {
2221+
let p = project()
2222+
.file(
2223+
"Cargo.toml",
2224+
r#"
2225+
[project]
2226+
name = "foo"
2227+
version = "0.1.0"
2228+
authors = []
2229+
build = "build.rs"
2230+
2231+
[dependencies]
2232+
bar = { path = 'bar' }
2233+
2234+
[build-dependencies]
2235+
bar = { path = 'bar' }
2236+
"#,
2237+
)
2238+
.file(
2239+
"src/main.rs",
2240+
r#"
2241+
extern crate bar;
2242+
fn main() { bar::do_nothing() }
2243+
"#,
2244+
)
2245+
.file(
2246+
"build.rs",
2247+
r#"
2248+
extern crate bar;
2249+
use std::env;
2250+
fn main() {
2251+
bar::do_nothing();
2252+
assert_eq!(env::var("DEP_FOO_FOO").unwrap(), "bar");
2253+
assert_eq!(env::var("CARGO_BUILD_TYPE").unwrap(), "native");
2254+
}
2255+
"#,
2256+
)
2257+
.file(
2258+
"bar/Cargo.toml",
2259+
r#"
2260+
[project]
2261+
name = "bar"
2262+
version = "0.1.0"
2263+
authors = []
2264+
links = "foo"
2265+
build = "build.rs"
2266+
"#,
2267+
)
2268+
.file(
2269+
"bar/build.rs",
2270+
r#"
2271+
use std::env;
2272+
fn main() {
2273+
println!("cargo:foo=bar");
2274+
assert_eq!(env::var("CARGO_BUILD_TYPE").unwrap(), "native");
2275+
}
2276+
"#,
2277+
)
2278+
.file("bar/src/lib.rs", "pub fn do_nothing() {}")
2279+
.build();
2280+
2281+
p.cargo("build -v").run();
2282+
}
2283+
2284+
#[cargo_test]
2285+
fn test_duplicate_shared_deps_host_cross() {
2286+
let target = rustc_host();
2287+
let p = project()
2288+
.file(
2289+
"Cargo.toml",
2290+
r#"
2291+
[project]
2292+
name = "foo"
2293+
version = "0.1.0"
2294+
authors = []
2295+
build = "build.rs"
2296+
2297+
[dependencies]
2298+
bar = { path = 'bar' }
2299+
2300+
[build-dependencies]
2301+
bar = { path = 'bar' }
2302+
"#,
2303+
)
2304+
.file(
2305+
"src/main.rs",
2306+
r#"
2307+
extern crate bar;
2308+
fn main() { bar::do_nothing() }
2309+
"#,
2310+
)
2311+
.file(
2312+
"build.rs",
2313+
r#"
2314+
extern crate bar;
2315+
use std::env;
2316+
fn main() {
2317+
bar::do_nothing();
2318+
assert_eq!(env::var("DEP_FOO_FOO").unwrap(), "bar");
2319+
assert_eq!(env::var("CARGO_BUILD_TYPE").unwrap(), "cross");
2320+
}
2321+
"#,
2322+
)
2323+
.file(
2324+
"bar/Cargo.toml",
2325+
r#"
2326+
[project]
2327+
name = "bar"
2328+
version = "0.1.0"
2329+
authors = []
2330+
links = "foo"
2331+
build = "build.rs"
2332+
"#,
2333+
)
2334+
.file(
2335+
"bar/build.rs",
2336+
r#"
2337+
use std::env;
2338+
fn main() {
2339+
println!("cargo:foo=bar");
2340+
assert_eq!(env::var("CARGO_BUILD_TYPE").unwrap(), "cross");
2341+
}
2342+
"#,
2343+
)
2344+
.file("bar/src/lib.rs", "pub fn do_nothing() {}")
2345+
.build();
2346+
2347+
p.cargo("build -v --target").arg(&target).run();
2348+
}
2349+
2350+
#[cargo_test]
2351+
fn test_duplicate_shared_deps_alt_cross() {
2352+
if cross_compile::disabled() {
2353+
return;
2354+
}
2355+
let cross_target = cross_compile::alternate();
2356+
let p = project()
2357+
.file(
2358+
"Cargo.toml",
2359+
r#"
2360+
[project]
2361+
name = "foo"
2362+
version = "0.1.0"
2363+
authors = []
2364+
build = "build.rs"
2365+
2366+
[dependencies]
2367+
bar = { path = 'bar' }
2368+
2369+
[build-dependencies]
2370+
bar = { path = 'bar' }
2371+
"#,
2372+
)
2373+
.file(
2374+
"src/main.rs",
2375+
r#"
2376+
extern crate bar;
2377+
fn main() { bar::do_nothing() }
2378+
"#,
2379+
)
2380+
.file(
2381+
"build.rs",
2382+
r#"
2383+
extern crate bar;
2384+
use std::env;
2385+
fn main() {
2386+
bar::do_nothing();
2387+
assert_eq!(env::var("DEP_FOO_FOO").unwrap(), "bar");
2388+
assert_eq!(env::var("CARGO_BUILD_TYPE").unwrap(), "cross");
2389+
}
2390+
"#,
2391+
)
2392+
.file(
2393+
"bar/Cargo.toml",
2394+
r#"
2395+
[project]
2396+
name = "bar"
2397+
version = "0.1.0"
2398+
authors = []
2399+
links = "foo"
2400+
build = "build.rs"
2401+
"#,
2402+
)
2403+
.file(
2404+
"bar/build.rs",
2405+
r#"
2406+
use std::env;
2407+
fn main() {
2408+
println!("cargo:foo=bar");
2409+
assert_eq!(env::var("CARGO_BUILD_TYPE").unwrap(), "cross");
2410+
}
2411+
"#,
2412+
)
2413+
.file("bar/src/lib.rs", "pub fn do_nothing() {}")
2414+
.build();
2415+
2416+
p.cargo("build --target").arg(&cross_target).run();
2417+
}
2418+
22192419
#[cargo_test]
22202420
fn cfg_feedback() {
22212421
let p = project()

0 commit comments

Comments
 (0)