@@ -2216,6 +2216,206 @@ fn test_duplicate_deps() {
2216
2216
p. cargo ( "build" ) . run ( ) ;
2217
2217
}
2218
2218
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
+
2219
2419
#[ cargo_test]
2220
2420
fn cfg_feedback ( ) {
2221
2421
let p = project ( )
0 commit comments