@@ -2343,6 +2343,206 @@ fn test_duplicate_deps() {
23432343 p. cargo ( "build" ) . run ( ) ;
23442344}
23452345
2346+ #[ cargo_test]
2347+ fn test_duplicate_shared_deps_native ( ) {
2348+ let p = project ( )
2349+ . file (
2350+ "Cargo.toml" ,
2351+ r#"
2352+ [project]
2353+ name = "foo"
2354+ version = "0.1.0"
2355+ authors = []
2356+ build = "build.rs"
2357+
2358+ [dependencies]
2359+ bar = { path = 'bar' }
2360+
2361+ [build-dependencies]
2362+ bar = { path = 'bar' }
2363+ "# ,
2364+ )
2365+ . file (
2366+ "src/main.rs" ,
2367+ r#"
2368+ extern crate bar;
2369+ fn main() { bar::do_nothing() }
2370+ "# ,
2371+ )
2372+ . file (
2373+ "build.rs" ,
2374+ r#"
2375+ extern crate bar;
2376+ use std::env;
2377+ fn main() {
2378+ bar::do_nothing();
2379+ assert_eq!(env::var("DEP_FOO_FOO").unwrap(), "bar");
2380+ assert_eq!(env::var("CARGO_BUILD_TYPE").unwrap(), "native");
2381+ }
2382+ "# ,
2383+ )
2384+ . file (
2385+ "bar/Cargo.toml" ,
2386+ r#"
2387+ [project]
2388+ name = "bar"
2389+ version = "0.1.0"
2390+ authors = []
2391+ links = "foo"
2392+ build = "build.rs"
2393+ "# ,
2394+ )
2395+ . file (
2396+ "bar/build.rs" ,
2397+ r#"
2398+ use std::env;
2399+ fn main() {
2400+ println!("cargo:foo=bar");
2401+ assert_eq!(env::var("CARGO_BUILD_TYPE").unwrap(), "native");
2402+ }
2403+ "# ,
2404+ )
2405+ . file ( "bar/src/lib.rs" , "pub fn do_nothing() {}" )
2406+ . build ( ) ;
2407+
2408+ p. cargo ( "build -v" ) . run ( ) ;
2409+ }
2410+
2411+ #[ cargo_test]
2412+ fn test_duplicate_shared_deps_host_cross ( ) {
2413+ let target = rustc_host ( ) ;
2414+ let p = project ( )
2415+ . file (
2416+ "Cargo.toml" ,
2417+ r#"
2418+ [project]
2419+ name = "foo"
2420+ version = "0.1.0"
2421+ authors = []
2422+ build = "build.rs"
2423+
2424+ [dependencies]
2425+ bar = { path = 'bar' }
2426+
2427+ [build-dependencies]
2428+ bar = { path = 'bar' }
2429+ "# ,
2430+ )
2431+ . file (
2432+ "src/main.rs" ,
2433+ r#"
2434+ extern crate bar;
2435+ fn main() { bar::do_nothing() }
2436+ "# ,
2437+ )
2438+ . file (
2439+ "build.rs" ,
2440+ r#"
2441+ extern crate bar;
2442+ use std::env;
2443+ fn main() {
2444+ bar::do_nothing();
2445+ assert_eq!(env::var("DEP_FOO_FOO").unwrap(), "bar");
2446+ assert_eq!(env::var("CARGO_BUILD_TYPE").unwrap(), "cross");
2447+ }
2448+ "# ,
2449+ )
2450+ . file (
2451+ "bar/Cargo.toml" ,
2452+ r#"
2453+ [project]
2454+ name = "bar"
2455+ version = "0.1.0"
2456+ authors = []
2457+ links = "foo"
2458+ build = "build.rs"
2459+ "# ,
2460+ )
2461+ . file (
2462+ "bar/build.rs" ,
2463+ r#"
2464+ use std::env;
2465+ fn main() {
2466+ println!("cargo:foo=bar");
2467+ assert_eq!(env::var("CARGO_BUILD_TYPE").unwrap(), "cross");
2468+ }
2469+ "# ,
2470+ )
2471+ . file ( "bar/src/lib.rs" , "pub fn do_nothing() {}" )
2472+ . build ( ) ;
2473+
2474+ p. cargo ( "build -v --target" ) . arg ( & target) . run ( ) ;
2475+ }
2476+
2477+ #[ cargo_test]
2478+ fn test_duplicate_shared_deps_alt_cross ( ) {
2479+ if cross_compile:: disabled ( ) {
2480+ return ;
2481+ }
2482+ let cross_target = cross_compile:: alternate ( ) ;
2483+ let p = project ( )
2484+ . file (
2485+ "Cargo.toml" ,
2486+ r#"
2487+ [project]
2488+ name = "foo"
2489+ version = "0.1.0"
2490+ authors = []
2491+ build = "build.rs"
2492+
2493+ [dependencies]
2494+ bar = { path = 'bar' }
2495+
2496+ [build-dependencies]
2497+ bar = { path = 'bar' }
2498+ "# ,
2499+ )
2500+ . file (
2501+ "src/main.rs" ,
2502+ r#"
2503+ extern crate bar;
2504+ fn main() { bar::do_nothing() }
2505+ "# ,
2506+ )
2507+ . file (
2508+ "build.rs" ,
2509+ r#"
2510+ extern crate bar;
2511+ use std::env;
2512+ fn main() {
2513+ bar::do_nothing();
2514+ assert_eq!(env::var("DEP_FOO_FOO").unwrap(), "bar");
2515+ assert_eq!(env::var("CARGO_BUILD_TYPE").unwrap(), "cross");
2516+ }
2517+ "# ,
2518+ )
2519+ . file (
2520+ "bar/Cargo.toml" ,
2521+ r#"
2522+ [project]
2523+ name = "bar"
2524+ version = "0.1.0"
2525+ authors = []
2526+ links = "foo"
2527+ build = "build.rs"
2528+ "# ,
2529+ )
2530+ . file (
2531+ "bar/build.rs" ,
2532+ r#"
2533+ use std::env;
2534+ fn main() {
2535+ println!("cargo:foo=bar");
2536+ assert_eq!(env::var("CARGO_BUILD_TYPE").unwrap(), "cross");
2537+ }
2538+ "# ,
2539+ )
2540+ . file ( "bar/src/lib.rs" , "pub fn do_nothing() {}" )
2541+ . build ( ) ;
2542+
2543+ p. cargo ( "build --target" ) . arg ( & cross_target) . run ( ) ;
2544+ }
2545+
23462546#[ cargo_test]
23472547fn cfg_feedback ( ) {
23482548 let p = project ( )
0 commit comments