@@ -2343,6 +2343,206 @@ fn test_duplicate_deps() {
2343
2343
p. cargo ( "build" ) . run ( ) ;
2344
2344
}
2345
2345
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
+
2346
2546
#[ cargo_test]
2347
2547
fn cfg_feedback ( ) {
2348
2548
let p = project ( )
0 commit comments