Hex Artifact Content
Not logged in

Artifact 4a644e610d7d1e509981d3de1a6c8c5af0e783a7:


0000: 65 78 74 65 72 6e 20 63 72 61 74 65 20 63 61 72  extern crate car
0010: 67 6f 74 65 73 74 3b 0a 65 78 74 65 72 6e 20 63  gotest;.extern c
0020: 72 61 74 65 20 68 61 6d 63 72 65 73 74 3b 0a 0a  rate hamcrest;..
0030: 75 73 65 20 73 74 64 3a 3a 66 73 3a 3a 7b 73 65  use std::fs::{se
0040: 6c 66 2c 20 46 69 6c 65 7d 3b 0a 75 73 65 20 73  lf, File};.use s
0050: 74 64 3a 3a 69 6f 3a 3a 70 72 65 6c 75 64 65 3a  td::io::prelude:
0060: 3a 2a 3b 0a 0a 75 73 65 20 63 61 72 67 6f 74 65  :*;..use cargote
0070: 73 74 3a 3a 7b 72 75 73 74 63 5f 68 6f 73 74 2c  st::{rustc_host,
0080: 20 73 6c 65 65 70 5f 6d 73 7d 3b 0a 75 73 65 20   sleep_ms};.use 
0090: 63 61 72 67 6f 74 65 73 74 3a 3a 73 75 70 70 6f  cargotest::suppo
00a0: 72 74 3a 3a 7b 70 72 6f 6a 65 63 74 2c 20 65 78  rt::{project, ex
00b0: 65 63 73 7d 3b 0a 75 73 65 20 63 61 72 67 6f 74  ecs};.use cargot
00c0: 65 73 74 3a 3a 73 75 70 70 6f 72 74 3a 3a 70 61  est::support::pa
00d0: 74 68 73 3a 3a 43 61 72 67 6f 50 61 74 68 45 78  ths::CargoPathEx
00e0: 74 3b 0a 75 73 65 20 63 61 72 67 6f 74 65 73 74  t;.use cargotest
00f0: 3a 3a 73 75 70 70 6f 72 74 3a 3a 72 65 67 69 73  ::support::regis
0100: 74 72 79 3a 3a 50 61 63 6b 61 67 65 3b 0a 75 73  try::Package;.us
0110: 65 20 68 61 6d 63 72 65 73 74 3a 3a 7b 61 73 73  e hamcrest::{ass
0120: 65 72 74 5f 74 68 61 74 2c 20 65 78 69 73 74 69  ert_that, existi
0130: 6e 67 5f 66 69 6c 65 2c 20 65 78 69 73 74 69 6e  ng_file, existin
0140: 67 5f 64 69 72 7d 3b 0a 0a 23 5b 74 65 73 74 5d  g_dir};..#[test]
0150: 0a 66 6e 20 63 75 73 74 6f 6d 5f 62 75 69 6c 64  .fn custom_build
0160: 5f 73 63 72 69 70 74 5f 66 61 69 6c 65 64 28 29  _script_failed()
0170: 20 7b 0a 20 20 20 20 6c 65 74 20 70 20 3d 20 70   {.    let p = p
0180: 72 6f 6a 65 63 74 28 22 66 6f 6f 22 29 0a 20 20  roject("foo").  
0190: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 43 61 72        .file("Car
01a0: 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20  go.toml", r#".  
01b0: 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65            [proje
01c0: 63 74 5d 0a 0a 20 20 20 20 20 20 20 20 20 20 20  ct]..           
01d0: 20 6e 61 6d 65 20 3d 20 22 66 6f 6f 22 0a 20 20   name = "foo".  
01e0: 20 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f            versio
01f0: 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20  n = "0.5.0".    
0200: 20 20 20 20 20 20 20 20 61 75 74 68 6f 72 73 20          authors 
0210: 3d 20 5b 22 77 79 63 61 74 73 40 65 78 61 6d 70  = ["wycats@examp
0220: 6c 65 2e 63 6f 6d 22 5d 0a 20 20 20 20 20 20 20  le.com"].       
0230: 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22 62 75       build = "bu
0240: 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20 20 20  ild.rs".        
0250: 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  "#).        .fil
0260: 65 28 22 73 72 63 2f 6d 61 69 6e 2e 72 73 22 2c  e("src/main.rs",
0270: 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20   r#".           
0280: 20 66 6e 20 6d 61 69 6e 28 29 20 7b 7d 0a 20 20   fn main() {}.  
0290: 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20        "#).      
02a0: 20 20 2e 66 69 6c 65 28 22 62 75 69 6c 64 2e 72    .file("build.r
02b0: 73 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20  s", r#".        
02c0: 20 20 20 20 66 6e 20 6d 61 69 6e 28 29 20 7b 0a      fn main() {.
02d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02e0: 73 74 64 3a 3a 70 72 6f 63 65 73 73 3a 3a 65 78  std::process::ex
02f0: 69 74 28 31 30 31 29 3b 0a 20 20 20 20 20 20 20  it(101);.       
0300: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 22       }.        "
0310: 23 29 3b 0a 20 20 20 20 61 73 73 65 72 74 5f 74  #);.    assert_t
0320: 68 61 74 28 70 2e 63 61 72 67 6f 5f 70 72 6f 63  hat(p.cargo_proc
0330: 65 73 73 28 22 62 75 69 6c 64 22 29 2e 61 72 67  ess("build").arg
0340: 28 22 2d 76 22 29 2c 0a 20 20 20 20 20 20 20 20  ("-v"),.        
0350: 20 20 20 20 20 20 20 20 65 78 65 63 73 28 29 2e          execs().
0360: 77 69 74 68 5f 73 74 61 74 75 73 28 31 30 31 29  with_status(101)
0370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0380: 20 20 20 20 20 20 20 20 2e 77 69 74 68 5f 73 74          .with_st
0390: 64 65 72 72 28 26 66 6f 72 6d 61 74 21 28 22 5c  derr(&format!("\
03a0: 0a 5b 43 4f 4d 50 49 4c 49 4e 47 5d 20 66 6f 6f  .[COMPILING] foo
03b0: 20 76 30 2e 35 2e 30 20 28 7b 75 72 6c 7d 29 0a   v0.5.0 ({url}).
03c0: 5b 52 55 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63  [RUNNING] `rustc
03d0: 20 2d 2d 63 72 61 74 65 2d 6e 61 6d 65 20 62 75   --crate-name bu
03e0: 69 6c 64 5f 73 63 72 69 70 74 5f 62 75 69 6c 64  ild_script_build
03f0: 20 62 75 69 6c 64 2e 72 73 20 2d 2d 63 72 61 74   build.rs --crat
0400: 65 2d 74 79 70 65 20 62 69 6e 20 5b 2e 2e 5d 60  e-type bin [..]`
0410: 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60 5b 2e 2e 5d  .[RUNNING] `[..]
0420: 5b 2f 5d 62 75 69 6c 64 2d 73 63 72 69 70 74 2d  [/]build-script-
0430: 62 75 69 6c 64 60 0a 5b 45 52 52 4f 52 5d 20 66  build`.[ERROR] f
0440: 61 69 6c 65 64 20 74 6f 20 72 75 6e 20 63 75 73  ailed to run cus
0450: 74 6f 6d 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e  tom build comman
0460: 64 20 66 6f 72 20 60 66 6f 6f 20 76 30 2e 35 2e  d for `foo v0.5.
0470: 30 20 28 7b 75 72 6c 7d 29 60 0a 70 72 6f 63 65  0 ({url})`.proce
0480: 73 73 20 64 69 64 6e 27 74 20 65 78 69 74 20 73  ss didn't exit s
0490: 75 63 63 65 73 73 66 75 6c 6c 79 3a 20 60 5b 2e  uccessfully: `[.
04a0: 2e 5d 5b 2f 5d 62 75 69 6c 64 2d 73 63 72 69 70  .][/]build-scrip
04b0: 74 2d 62 75 69 6c 64 60 20 28 65 78 69 74 20 63  t-build` (exit c
04c0: 6f 64 65 3a 20 31 30 31 29 22 2c 0a 75 72 6c 20  ode: 101)",.url 
04d0: 3d 20 70 2e 75 72 6c 28 29 29 29 29 3b 0a 7d 0a  = p.url())));.}.
04e0: 0a 23 5b 74 65 73 74 5d 0a 66 6e 20 63 75 73 74  .#[test].fn cust
04f0: 6f 6d 5f 62 75 69 6c 64 5f 65 6e 76 5f 76 61 72  om_build_env_var
0500: 73 28 29 20 7b 0a 20 20 20 20 6c 65 74 20 70 20  s() {.    let p 
0510: 3d 20 70 72 6f 6a 65 63 74 28 22 66 6f 6f 22 29  = project("foo")
0520: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
0530: 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22  Cargo.toml", r#"
0540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 72  .            [pr
0550: 6f 6a 65 63 74 5d 0a 0a 20 20 20 20 20 20 20 20  oject]..        
0560: 20 20 20 20 6e 61 6d 65 20 3d 20 22 66 6f 6f 22      name = "foo"
0570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72  .            ver
0580: 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20  sion = "0.5.0". 
0590: 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f             autho
05a0: 72 73 20 3d 20 5b 22 77 79 63 61 74 73 40 65 78  rs = ["wycats@ex
05b0: 61 6d 70 6c 65 2e 63 6f 6d 22 5d 0a 0a 20 20 20  ample.com"]..   
05c0: 20 20 20 20 20 20 20 20 20 5b 66 65 61 74 75 72           [featur
05d0: 65 73 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es].            
05e0: 62 61 72 5f 66 65 61 74 20 3d 20 5b 22 62 61 72  bar_feat = ["bar
05f0: 2f 66 6f 6f 22 5d 0a 0a 20 20 20 20 20 20 20 20  /foo"]..        
0600: 20 20 20 20 5b 64 65 70 65 6e 64 65 6e 63 69 65      [dependencie
0610: 73 2e 62 61 72 5d 0a 20 20 20 20 20 20 20 20 20  s.bar].         
0620: 20 20 20 70 61 74 68 20 3d 20 22 62 61 72 22 0a     path = "bar".
0630: 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20          "#).    
0640: 20 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6d      .file("src/m
0650: 61 69 6e 2e 72 73 22 2c 20 72 23 22 0a 20 20 20  ain.rs", r#".   
0660: 20 20 20 20 20 20 20 20 20 66 6e 20 6d 61 69 6e           fn main
0670: 28 29 20 7b 7d 0a 20 20 20 20 20 20 20 20 22 23  () {}.        "#
0680: 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28  ).        .file(
0690: 22 62 61 72 2f 43 61 72 67 6f 2e 74 6f 6d 6c 22  "bar/Cargo.toml"
06a0: 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  , r#".          
06b0: 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 0a 20 20 20    [project]..   
06c0: 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20           name = 
06d0: 22 62 61 72 22 0a 20 20 20 20 20 20 20 20 20 20  "bar".          
06e0: 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35    version = "0.5
06f0: 2e 30 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  .0".            
0700: 61 75 74 68 6f 72 73 20 3d 20 5b 22 77 79 63 61  authors = ["wyca
0710: 74 73 40 65 78 61 6d 70 6c 65 2e 63 6f 6d 22 5d  ts@example.com"]
0720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69  .            bui
0730: 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a  ld = "build.rs".
0740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 65  .            [fe
0750: 61 74 75 72 65 73 5d 0a 20 20 20 20 20 20 20 20  atures].        
0760: 20 20 20 20 66 6f 6f 20 3d 20 5b 5d 0a 20 20 20      foo = [].   
0770: 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20 20       "#).       
0780: 20 2e 66 69 6c 65 28 22 62 61 72 2f 73 72 63 2f   .file("bar/src/
0790: 6c 69 62 2e 72 73 22 2c 20 72 23 22 0a 20 20 20  lib.rs", r#".   
07a0: 20 20 20 20 20 20 20 20 20 70 75 62 20 66 6e 20           pub fn 
07b0: 68 65 6c 6c 6f 28 29 20 7b 7d 0a 20 20 20 20 20  hello() {}.     
07c0: 20 20 20 22 23 29 3b 0a 0a 20 20 20 20 6c 65 74     "#);..    let
07d0: 20 66 69 6c 65 5f 63 6f 6e 74 65 6e 74 20 3d 20   file_content = 
07e0: 66 6f 72 6d 61 74 21 28 72 23 22 0a 20 20 20 20  format!(r#".    
07f0: 20 20 20 20 20 20 20 20 75 73 65 20 73 74 64 3a          use std:
0800: 3a 65 6e 76 3b 0a 20 20 20 20 20 20 20 20 20 20  :env;.          
0810: 20 20 75 73 65 20 73 74 64 3a 3a 69 6f 3a 3a 70    use std::io::p
0820: 72 65 6c 75 64 65 3a 3a 2a 3b 0a 20 20 20 20 20  relude::*;.     
0830: 20 20 20 20 20 20 20 75 73 65 20 73 74 64 3a 3a         use std::
0840: 70 61 74 68 3a 3a 50 61 74 68 3b 0a 20 20 20 20  path::Path;.    
0850: 20 20 20 20 20 20 20 20 75 73 65 20 73 74 64 3a          use std:
0860: 3a 66 73 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  :fs;..          
0870: 20 20 66 6e 20 6d 61 69 6e 28 29 20 7b 7b 0a 20    fn main() {{. 
0880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
0890: 65 74 20 5f 74 61 72 67 65 74 20 3d 20 65 6e 76  et _target = env
08a0: 3a 3a 76 61 72 28 22 54 41 52 47 45 54 22 29 2e  ::var("TARGET").
08b0: 75 6e 77 72 61 70 28 29 3b 0a 20 20 20 20 20 20  unwrap();.      
08c0: 20 20 20 20 20 20 20 20 20 20 6c 65 74 20 5f 6e            let _n
08d0: 63 70 75 73 20 3d 20 65 6e 76 3a 3a 76 61 72 28  cpus = env::var(
08e0: 22 4e 55 4d 5f 4a 4f 42 53 22 29 2e 75 6e 77 72  "NUM_JOBS").unwr
08f0: 61 70 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ap();.          
0900: 20 20 20 20 20 20 6c 65 74 20 5f 64 69 72 20 3d        let _dir =
0910: 20 65 6e 76 3a 3a 76 61 72 28 22 43 41 52 47 4f   env::var("CARGO
0920: 5f 4d 41 4e 49 46 45 53 54 5f 44 49 52 22 29 2e  _MANIFEST_DIR").
0930: 75 6e 77 72 61 70 28 29 3b 0a 0a 20 20 20 20 20  unwrap();..     
0940: 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20 6f             let o
0950: 70 74 20 3d 20 65 6e 76 3a 3a 76 61 72 28 22 4f  pt = env::var("O
0960: 50 54 5f 4c 45 56 45 4c 22 29 2e 75 6e 77 72 61  PT_LEVEL").unwra
0970: 70 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  p();.           
0980: 20 20 20 20 20 61 73 73 65 72 74 5f 65 71 21 28       assert_eq!(
0990: 6f 70 74 2c 20 22 30 22 29 3b 0a 0a 20 20 20 20  opt, "0");..    
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20              let 
09b0: 6f 70 74 20 3d 20 65 6e 76 3a 3a 76 61 72 28 22  opt = env::var("
09c0: 50 52 4f 46 49 4c 45 22 29 2e 75 6e 77 72 61 70  PROFILE").unwrap
09d0: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ();.            
09e0: 20 20 20 20 61 73 73 65 72 74 5f 65 71 21 28 6f      assert_eq!(o
09f0: 70 74 2c 20 22 64 65 62 75 67 22 29 3b 0a 0a 20  pt, "debug");.. 
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
0a10: 65 74 20 64 65 62 75 67 20 3d 20 65 6e 76 3a 3a  et debug = env::
0a20: 76 61 72 28 22 44 45 42 55 47 22 29 2e 75 6e 77  var("DEBUG").unw
0a30: 72 61 70 28 29 3b 0a 20 20 20 20 20 20 20 20 20  rap();.         
0a40: 20 20 20 20 20 20 20 61 73 73 65 72 74 5f 65 71         assert_eq
0a50: 21 28 64 65 62 75 67 2c 20 22 74 72 75 65 22 29  !(debug, "true")
0a60: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
0a70: 20 20 20 6c 65 74 20 6f 75 74 20 3d 20 65 6e 76     let out = env
0a80: 3a 3a 76 61 72 28 22 4f 55 54 5f 44 49 52 22 29  ::var("OUT_DIR")
0a90: 2e 75 6e 77 72 61 70 28 29 3b 0a 20 20 20 20 20  .unwrap();.     
0aa0: 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72             asser
0ab0: 74 21 28 6f 75 74 2e 73 74 61 72 74 73 5f 77 69  t!(out.starts_wi
0ac0: 74 68 28 72 22 7b 30 7d 22 29 29 3b 0a 20 20 20  th(r"{0}"));.   
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
0ae0: 65 72 74 21 28 66 73 3a 3a 6d 65 74 61 64 61 74  ert!(fs::metadat
0af0: 61 28 26 6f 75 74 29 2e 6d 61 70 28 7c 6d 7c 20  a(&out).map(|m| 
0b00: 6d 2e 69 73 5f 64 69 72 28 29 29 2e 75 6e 77 72  m.is_dir()).unwr
0b10: 61 70 5f 6f 72 28 66 61 6c 73 65 29 29 3b 0a 0a  ap_or(false));..
0b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b30: 6c 65 74 20 5f 68 6f 73 74 20 3d 20 65 6e 76 3a  let _host = env:
0b40: 3a 76 61 72 28 22 48 4f 53 54 22 29 2e 75 6e 77  :var("HOST").unw
0b50: 72 61 70 28 29 3b 0a 0a 20 20 20 20 20 20 20 20  rap();..        
0b60: 20 20 20 20 20 20 20 20 6c 65 74 20 5f 66 65 61          let _fea
0b70: 74 20 3d 20 65 6e 76 3a 3a 76 61 72 28 22 43 41  t = env::var("CA
0b80: 52 47 4f 5f 46 45 41 54 55 52 45 5f 46 4f 4f 22  RGO_FEATURE_FOO"
0b90: 29 2e 75 6e 77 72 61 70 28 29 3b 0a 0a 20 20 20  ).unwrap();..   
0ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74               let
0bb0: 20 72 75 73 74 63 20 3d 20 65 6e 76 3a 3a 76 61   rustc = env::va
0bc0: 72 28 22 52 55 53 54 43 22 29 2e 75 6e 77 72 61  r("RUSTC").unwra
0bd0: 70 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  p();.           
0be0: 20 20 20 20 20 61 73 73 65 72 74 5f 65 71 21 28       assert_eq!(
0bf0: 72 75 73 74 63 2c 20 22 72 75 73 74 63 22 29 3b  rustc, "rustc");
0c00: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0c10: 20 20 6c 65 74 20 72 75 73 74 64 6f 63 20 3d 20    let rustdoc = 
0c20: 65 6e 76 3a 3a 76 61 72 28 22 52 55 53 54 44 4f  env::var("RUSTDO
0c30: 43 22 29 2e 75 6e 77 72 61 70 28 29 3b 0a 20 20  C").unwrap();.  
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
0c50: 73 65 72 74 5f 65 71 21 28 72 75 73 74 64 6f 63  sert_eq!(rustdoc
0c60: 2c 20 22 72 75 73 74 64 6f 63 22 29 3b 0a 20 20  , "rustdoc");.  
0c70: 20 20 20 20 20 20 20 20 20 20 7d 7d 0a 20 20 20            }}.   
0c80: 20 20 20 20 20 22 23 2c 0a 20 20 20 20 20 20 20       "#,.       
0c90: 20 70 2e 72 6f 6f 74 28 29 2e 6a 6f 69 6e 28 22   p.root().join("
0ca0: 74 61 72 67 65 74 22 29 2e 6a 6f 69 6e 28 22 64  target").join("d
0cb0: 65 62 75 67 22 29 2e 6a 6f 69 6e 28 22 62 75 69  ebug").join("bui
0cc0: 6c 64 22 29 2e 64 69 73 70 6c 61 79 28 29 29 3b  ld").display());
0cd0: 0a 0a 20 20 20 20 6c 65 74 20 70 20 3d 20 70 2e  ..    let p = p.
0ce0: 66 69 6c 65 28 22 62 61 72 2f 62 75 69 6c 64 2e  file("bar/build.
0cf0: 72 73 22 2c 20 26 66 69 6c 65 5f 63 6f 6e 74 65  rs", &file_conte
0d00: 6e 74 29 3b 0a 0a 0a 20 20 20 20 61 73 73 65 72  nt);...    asser
0d10: 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f 70  t_that(p.cargo_p
0d20: 72 6f 63 65 73 73 28 22 62 75 69 6c 64 22 29 2e  rocess("build").
0d30: 61 72 67 28 22 2d 2d 66 65 61 74 75 72 65 73 22  arg("--features"
0d40: 29 2e 61 72 67 28 22 62 61 72 5f 66 65 61 74 22  ).arg("bar_feat"
0d50: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
0d60: 20 20 20 65 78 65 63 73 28 29 2e 77 69 74 68 5f     execs().with_
0d70: 73 74 61 74 75 73 28 30 29 29 3b 0a 7d 0a 0a 23  status(0));.}..#
0d80: 5b 74 65 73 74 5d 0a 66 6e 20 63 75 73 74 6f 6d  [test].fn custom
0d90: 5f 62 75 69 6c 64 5f 73 63 72 69 70 74 5f 77 72  _build_script_wr
0da0: 6f 6e 67 5f 72 75 73 74 63 5f 66 6c 61 67 73 28  ong_rustc_flags(
0db0: 29 20 7b 0a 20 20 20 20 6c 65 74 20 70 20 3d 20  ) {.    let p = 
0dc0: 70 72 6f 6a 65 63 74 28 22 66 6f 6f 22 29 0a 20  project("foo"). 
0dd0: 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 43 61         .file("Ca
0de0: 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20  rgo.toml", r#". 
0df0: 20 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a             [proj
0e00: 65 63 74 5d 0a 0a 20 20 20 20 20 20 20 20 20 20  ect]..          
0e10: 20 20 6e 61 6d 65 20 3d 20 22 66 6f 6f 22 0a 20    name = "foo". 
0e20: 20 20 20 20 20 20 20 20 20 20 20 76 65 72 73 69             versi
0e30: 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20  on = "0.5.0".   
0e40: 20 20 20 20 20 20 20 20 20 61 75 74 68 6f 72 73           authors
0e50: 20 3d 20 5b 22 77 79 63 61 74 73 40 65 78 61 6d   = ["wycats@exam
0e60: 70 6c 65 2e 63 6f 6d 22 5d 0a 20 20 20 20 20 20  ple.com"].      
0e70: 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22 62        build = "b
0e80: 75 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20 20  uild.rs".       
0e90: 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69   "#).        .fi
0ea0: 6c 65 28 22 73 72 63 2f 6d 61 69 6e 2e 72 73 22  le("src/main.rs"
0eb0: 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  , r#".          
0ec0: 20 20 66 6e 20 6d 61 69 6e 28 29 20 7b 7d 0a 20    fn main() {}. 
0ed0: 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20         "#).     
0ee0: 20 20 20 2e 66 69 6c 65 28 22 62 75 69 6c 64 2e     .file("build.
0ef0: 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20  rs", r#".       
0f00: 20 20 20 20 20 66 6e 20 6d 61 69 6e 28 29 20 7b       fn main() {
0f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0f20: 20 70 72 69 6e 74 6c 6e 21 28 22 63 61 72 67 6f   println!("cargo
0f30: 3a 72 75 73 74 63 2d 66 6c 61 67 73 3d 2d 61 61  :rustc-flags=-aa
0f40: 61 20 2d 62 62 62 22 29 3b 0a 20 20 20 20 20 20  a -bbb");.      
0f50: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
0f60: 22 23 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74  "#);..    assert
0f70: 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f 70 72  _that(p.cargo_pr
0f80: 6f 63 65 73 73 28 22 62 75 69 6c 64 22 29 2c 0a  ocess("build"),.
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fa0: 65 78 65 63 73 28 29 2e 77 69 74 68 5f 73 74 61  execs().with_sta
0fb0: 74 75 73 28 31 30 31 29 0a 20 20 20 20 20 20 20  tus(101).       
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fd0: 2e 77 69 74 68 5f 73 74 64 65 72 72 5f 63 6f 6e  .with_stderr_con
0fe0: 74 61 69 6e 73 28 26 66 6f 72 6d 61 74 21 28 22  tains(&format!("
0ff0: 5c 0a 5b 45 52 52 4f 52 5d 20 4f 6e 6c 79 20 60  \.[ERROR] Only `
1000: 2d 6c 60 20 61 6e 64 20 60 2d 4c 60 20 66 6c 61  -l` and `-L` fla
1010: 67 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69  gs are allowed i
1020: 6e 20 62 75 69 6c 64 20 73 63 72 69 70 74 20 6f  n build script o
1030: 66 20 60 66 6f 6f 20 76 30 2e 35 2e 30 20 28 7b  f `foo v0.5.0 ({
1040: 7d 29 60 3a 20 5c 0a 60 2d 61 61 61 20 2d 62 62  })`: \.`-aaa -bb
1050: 62 60 22 2c 0a 70 2e 75 72 6c 28 29 29 29 29 3b  b`",.p.url())));
1060: 0a 7d 0a 0a 2f 2a 0a 23 5b 74 65 73 74 5d 0a 66  .}../*.#[test].f
1070: 6e 20 63 75 73 74 6f 6d 5f 62 75 69 6c 64 5f 73  n custom_build_s
1080: 63 72 69 70 74 5f 72 75 73 74 63 5f 66 6c 61 67  cript_rustc_flag
1090: 73 28 29 20 7b 0a 20 20 20 20 6c 65 74 20 70 20  s() {.    let p 
10a0: 3d 20 70 72 6f 6a 65 63 74 28 22 66 6f 6f 22 29  = project("foo")
10b0: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
10c0: 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22  Cargo.toml", r#"
10d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 72  .            [pr
10e0: 6f 6a 65 63 74 5d 0a 0a 20 20 20 20 20 20 20 20  oject]..        
10f0: 20 20 20 20 6e 61 6d 65 20 3d 20 22 62 61 72 22      name = "bar"
1100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72  .            ver
1110: 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20  sion = "0.5.0". 
1120: 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f             autho
1130: 72 73 20 3d 20 5b 22 77 79 63 61 74 73 40 65 78  rs = ["wycats@ex
1140: 61 6d 70 6c 65 2e 63 6f 6d 22 5d 0a 0a 20 20 20  ample.com"]..   
1150: 20 20 20 20 20 20 20 20 20 5b 64 65 70 65 6e 64           [depend
1160: 65 6e 63 69 65 73 2e 66 6f 6f 5d 0a 20 20 20 20  encies.foo].    
1170: 20 20 20 20 20 20 20 20 70 61 74 68 20 3d 20 22          path = "
1180: 66 6f 6f 22 0a 20 20 20 20 20 20 20 20 22 23 29  foo".        "#)
1190: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
11a0: 73 72 63 2f 6d 61 69 6e 2e 72 73 22 2c 20 72 23  src/main.rs", r#
11b0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6e  ".            fn
11c0: 20 6d 61 69 6e 28 29 20 7b 7d 0a 20 20 20 20 20   main() {}.     
11d0: 20 20 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e     "#).        .
11e0: 66 69 6c 65 28 22 66 6f 6f 2f 43 61 72 67 6f 2e  file("foo/Cargo.
11f0: 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20  toml", r#".     
1200: 20 20 20 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d         [project]
1210: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61  ..            na
1220: 6d 65 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20  me = "foo".     
1230: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d         version =
1240: 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20 20 20   "0.5.0".       
1250: 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b       authors = [
1260: 22 77 79 63 61 74 73 40 65 78 61 6d 70 6c 65 2e  "wycats@example.
1270: 63 6f 6d 22 5d 0a 20 20 20 20 20 20 20 20 20 20  com"].          
1280: 20 20 62 75 69 6c 64 20 3d 20 22 62 75 69 6c 64    build = "build
1290: 2e 72 73 22 0a 20 20 20 20 20 20 20 20 22 23 29  .rs".        "#)
12a0: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
12b0: 66 6f 6f 2f 73 72 63 2f 6c 69 62 2e 72 73 22 2c  foo/src/lib.rs",
12c0: 20 72 23 22 0a 20 20 20 20 20 20 20 20 22 23 29   r#".        "#)
12d0: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
12e0: 66 6f 6f 2f 62 75 69 6c 64 2e 72 73 22 2c 20 72  foo/build.rs", r
12f0: 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  #".            f
1300: 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20 20  n main() {.     
1310: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74             print
1320: 6c 6e 21 28 22 63 61 72 67 6f 3a 72 75 73 74 63  ln!("cargo:rustc
1330: 2d 66 6c 61 67 73 3d 2d 6c 20 6e 6f 6e 65 78 69  -flags=-l nonexi
1340: 73 74 69 6e 67 6c 69 62 20 2d 4c 20 2f 64 75 6d  stinglib -L /dum
1350: 6d 79 2f 70 61 74 68 31 20 2d 4c 20 2f 64 75 6d  my/path1 -L /dum
1360: 6d 79 2f 70 61 74 68 32 22 29 3b 0a 20 20 20 20  my/path2");.    
1370: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1380: 20 20 22 23 29 3b 0a 0a 20 20 20 20 2f 2f 20 54    "#);..    // T
1390: 4f 44 4f 3a 20 54 45 53 54 20 46 41 49 4c 53 20  ODO: TEST FAILS 
13a0: 42 45 43 41 55 53 45 20 4f 46 20 57 52 4f 4e 47  BECAUSE OF WRONG
13b0: 20 53 54 44 4f 55 54 20 28 62 75 74 20 6f 74 68   STDOUT (but oth
13c0: 65 72 77 69 73 65 2c 20 74 68 65 20 62 75 69 6c  erwise, the buil
13d0: 64 20 77 6f 72 6b 73 29 0a 20 20 20 20 61 73 73  d works).    ass
13e0: 65 72 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f  ert_that(p.cargo
13f0: 5f 70 72 6f 63 65 73 73 28 22 62 75 69 6c 64 22  _process("build"
1400: 29 2e 61 72 67 28 22 2d 2d 76 65 72 62 6f 73 65  ).arg("--verbose
1410: 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  "),.            
1420: 20 20 20 20 65 78 65 63 73 28 29 2e 77 69 74 68      execs().with
1430: 5f 73 74 61 74 75 73 28 31 30 31 29 0a 20 20 20  _status(101).   
1440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1450: 20 20 20 20 2e 77 69 74 68 5f 73 74 64 65 72 72      .with_stderr
1460: 28 26 66 6f 72 6d 61 74 21 28 22 5c 0a 5b 43 4f  (&format!("\.[CO
1470: 4d 50 49 4c 49 4e 47 5d 20 62 61 72 20 76 30 2e  MPILING] bar v0.
1480: 35 2e 30 20 28 7b 75 72 6c 7d 29 0a 5b 52 55 4e  5.0 ({url}).[RUN
1490: 4e 49 4e 47 5d 20 60 72 75 73 74 63 20 2d 2d 63  NING] `rustc --c
14a0: 72 61 74 65 2d 6e 61 6d 65 20 74 65 73 74 20 7b  rate-name test {
14b0: 64 69 72 7d 7b 73 65 70 7d 73 72 63 7b 73 65 70  dir}{sep}src{sep
14c0: 7d 6c 69 62 2e 72 73 20 2d 2d 63 72 61 74 65 2d  }lib.rs --crate-
14d0: 74 79 70 65 20 6c 69 62 20 2d 43 20 64 65 62 75  type lib -C debu
14e0: 67 69 6e 66 6f 3d 32 20 5c 0a 20 20 20 20 20 20  ginfo=2 \.      
14f0: 20 20 2d 43 20 6d 65 74 61 64 61 74 61 3d 5b 2e    -C metadata=[.
1500: 2e 5d 20 5c 0a 20 20 20 20 20 20 20 20 2d 43 20  .] \.        -C 
1510: 65 78 74 72 61 2d 66 69 6c 65 6e 61 6d 65 3d 2d  extra-filename=-
1520: 5b 2e 2e 5d 20 5c 0a 20 20 20 20 20 20 20 20 2d  [..] \.        -
1530: 2d 6f 75 74 2d 64 69 72 20 7b 64 69 72 7d 7b 73  -out-dir {dir}{s
1540: 65 70 7d 74 61 72 67 65 74 20 5c 0a 20 20 20 20  ep}target \.    
1550: 20 20 20 20 2d 2d 65 6d 69 74 3d 64 65 70 2d 69      --emit=dep-i
1560: 6e 66 6f 2c 6c 69 6e 6b 20 5c 0a 20 20 20 20 20  nfo,link \.     
1570: 20 20 20 2d 4c 20 7b 64 69 72 7d 7b 73 65 70 7d     -L {dir}{sep}
1580: 74 61 72 67 65 74 20 5c 0a 20 20 20 20 20 20 20  target \.       
1590: 20 2d 4c 20 7b 64 69 72 7d 7b 73 65 70 7d 74 61   -L {dir}{sep}ta
15a0: 72 67 65 74 7b 73 65 70 7d 64 65 70 73 60 0a 22  rget{sep}deps`."
15b0: 2c 20 73 65 70 20 3d 20 70 61 74 68 3a 3a 53 45  , sep = path::SE
15c0: 50 2c 0a 64 69 72 20 3d 20 70 2e 72 6f 6f 74 28  P,.dir = p.root(
15d0: 29 2e 64 69 73 70 6c 61 79 28 29 2c 0a 75 72 6c  ).display(),.url
15e0: 20 3d 20 70 2e 75 72 6c 28 29 2c 0a 29 29 29 3b   = p.url(),.)));
15f0: 0a 7d 0a 2a 2f 0a 0a 23 5b 74 65 73 74 5d 0a 66  .}.*/..#[test].f
1600: 6e 20 6c 69 6e 6b 73 5f 6e 6f 5f 62 75 69 6c 64  n links_no_build
1610: 5f 63 6d 64 28 29 20 7b 0a 20 20 20 20 6c 65 74  _cmd() {.    let
1620: 20 70 20 3d 20 70 72 6f 6a 65 63 74 28 22 66 6f   p = project("fo
1630: 6f 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  o").        .fil
1640: 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20  e("Cargo.toml", 
1650: 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  r#".            
1660: 5b 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20  [project].      
1670: 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 66 6f        name = "fo
1680: 6f 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 76  o".            v
1690: 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22  ersion = "0.5.0"
16a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74  .            aut
16b0: 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20  hors = [].      
16c0: 20 20 20 20 20 20 6c 69 6e 6b 73 20 3d 20 22 61        links = "a
16d0: 22 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20 20  ".        "#).  
16e0: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 73 72 63        .file("src
16f0: 2f 6c 69 62 2e 72 73 22 2c 20 22 22 29 3b 0a 0a  /lib.rs", "");..
1700: 20 20 20 20 61 73 73 65 72 74 5f 74 68 61 74 28      assert_that(
1710: 70 2e 63 61 72 67 6f 5f 70 72 6f 63 65 73 73 28  p.cargo_process(
1720: 22 62 75 69 6c 64 22 29 2c 0a 20 20 20 20 20 20  "build"),.      
1730: 20 20 20 20 20 20 20 20 20 20 65 78 65 63 73 28            execs(
1740: 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28 31 30  ).with_status(10
1750: 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1).             
1760: 20 20 20 20 20 20 20 20 20 20 2e 77 69 74 68 5f            .with_
1770: 73 74 64 65 72 72 28 22 5c 0a 5b 45 52 52 4f 52  stderr("\.[ERROR
1780: 5d 20 70 61 63 6b 61 67 65 20 60 66 6f 6f 20 76  ] package `foo v
1790: 30 2e 35 2e 30 20 28 66 69 6c 65 3a 2f 2f 5b 2e  0.5.0 (file://[.
17a0: 2e 5d 29 60 20 73 70 65 63 69 66 69 65 73 20 74  .])` specifies t
17b0: 68 61 74 20 69 74 20 6c 69 6e 6b 73 20 74 6f 20  hat it links to 
17c0: 60 61 60 20 62 75 74 20 64 6f 65 73 20 5c 0a 6e  `a` but does \.n
17d0: 6f 74 20 68 61 76 65 20 61 20 63 75 73 74 6f 6d  ot have a custom
17e0: 20 62 75 69 6c 64 20 73 63 72 69 70 74 0a 22 29   build script.")
17f0: 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66 6e  );.}..#[test].fn
1800: 20 6c 69 6e 6b 73 5f 64 75 70 6c 69 63 61 74 65   links_duplicate
1810: 73 28 29 20 7b 0a 20 20 20 20 6c 65 74 20 70 20  s() {.    let p 
1820: 3d 20 70 72 6f 6a 65 63 74 28 22 66 6f 6f 22 29  = project("foo")
1830: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
1840: 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22  Cargo.toml", r#"
1850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 72  .            [pr
1860: 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20 20 20 20  oject].         
1870: 20 20 20 6e 61 6d 65 20 3d 20 22 66 6f 6f 22 0a     name = "foo".
1880: 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 73              vers
1890: 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20  ion = "0.5.0".  
18a0: 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f 72            author
18b0: 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20 20  s = [].         
18c0: 20 20 20 6c 69 6e 6b 73 20 3d 20 22 61 22 0a 20     links = "a". 
18d0: 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64             build
18e0: 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 0a 20   = "build.rs".. 
18f0: 20 20 20 20 20 20 20 20 20 20 20 5b 64 65 70 65             [depe
1900: 6e 64 65 6e 63 69 65 73 2e 61 5d 0a 20 20 20 20  ndencies.a].    
1910: 20 20 20 20 20 20 20 20 70 61 74 68 20 3d 20 22          path = "
1920: 61 22 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20  a".        "#). 
1930: 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 73 72         .file("sr
1940: 63 2f 6c 69 62 2e 72 73 22 2c 20 22 22 29 0a 20  c/lib.rs", ""). 
1950: 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 62 75         .file("bu
1960: 69 6c 64 2e 72 73 22 2c 20 22 22 29 0a 20 20 20  ild.rs", "").   
1970: 20 20 20 20 20 2e 66 69 6c 65 28 22 61 2f 43 61       .file("a/Ca
1980: 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20  rgo.toml", r#". 
1990: 20 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a             [proj
19a0: 65 63 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20  ect].           
19b0: 20 6e 61 6d 65 20 3d 20 22 61 22 0a 20 20 20 20   name = "a".    
19c0: 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20          version 
19d0: 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20 20  = "0.5.0".      
19e0: 20 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20        authors = 
19f0: 5b 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  [].            l
1a00: 69 6e 6b 73 20 3d 20 22 61 22 0a 20 20 20 20 20  inks = "a".     
1a10: 20 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22         build = "
1a20: 62 75 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20  build.rs".      
1a30: 20 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66    "#).        .f
1a40: 69 6c 65 28 22 61 2f 73 72 63 2f 6c 69 62 2e 72  ile("a/src/lib.r
1a50: 73 22 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20  s", "").        
1a60: 2e 66 69 6c 65 28 22 61 2f 62 75 69 6c 64 2e 72  .file("a/build.r
1a70: 73 22 2c 20 22 22 29 3b 0a 0a 20 20 20 20 61 73  s", "");..    as
1a80: 73 65 72 74 5f 74 68 61 74 28 70 2e 63 61 72 67  sert_that(p.carg
1a90: 6f 5f 70 72 6f 63 65 73 73 28 22 62 75 69 6c 64  o_process("build
1aa0: 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  "),.            
1ab0: 20 20 20 20 65 78 65 63 73 28 29 2e 77 69 74 68      execs().with
1ac0: 5f 73 74 61 74 75 73 28 31 30 31 29 0a 20 20 20  _status(101).   
1ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae0: 20 20 20 20 2e 77 69 74 68 5f 73 74 64 65 72 72      .with_stderr
1af0: 28 22 5c 0a 5b 45 52 52 4f 52 5d 20 6e 61 74 69  ("\.[ERROR] nati
1b00: 76 65 20 6c 69 62 72 61 72 79 20 60 61 60 20 69  ve library `a` i
1b10: 73 20 62 65 69 6e 67 20 6c 69 6e 6b 65 64 20 74  s being linked t
1b20: 6f 20 62 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f  o by more than o
1b30: 6e 65 20 70 61 63 6b 61 67 65 2c 20 61 6e 64 20  ne package, and 
1b40: 63 61 6e 20 6f 6e 6c 79 20 62 65 20 5c 0a 6c 69  can only be \.li
1b50: 6e 6b 65 64 20 74 6f 20 62 79 20 6f 6e 65 20 70  nked to by one p
1b60: 61 63 6b 61 67 65 0a 0a 20 20 5b 2e 2e 5d 20 76  ackage..  [..] v
1b70: 30 2e 35 2e 30 20 28 66 69 6c 65 3a 2f 2f 5b 2e  0.5.0 (file://[.
1b80: 2e 5d 29 0a 20 20 5b 2e 2e 5d 20 76 30 2e 35 2e  .]).  [..] v0.5.
1b90: 30 20 28 66 69 6c 65 3a 2f 2f 5b 2e 2e 5d 29 0a  0 (file://[..]).
1ba0: 22 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a  "));.}..#[test].
1bb0: 66 6e 20 6f 76 65 72 72 69 64 65 73 5f 61 6e 64  fn overrides_and
1bc0: 5f 6c 69 6e 6b 73 28 29 20 7b 0a 20 20 20 20 6c  _links() {.    l
1bd0: 65 74 20 74 61 72 67 65 74 20 3d 20 72 75 73 74  et target = rust
1be0: 63 5f 68 6f 73 74 28 29 3b 0a 0a 20 20 20 20 6c  c_host();..    l
1bf0: 65 74 20 70 20 3d 20 70 72 6f 6a 65 63 74 28 22  et p = project("
1c00: 66 6f 6f 22 29 0a 20 20 20 20 20 20 20 20 2e 66  foo").        .f
1c10: 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22  ile("Cargo.toml"
1c20: 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  , r#".          
1c30: 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20    [project].    
1c40: 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22          name = "
1c50: 66 6f 6f 22 0a 20 20 20 20 20 20 20 20 20 20 20  foo".           
1c60: 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e   version = "0.5.
1c70: 30 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 61  0".            a
1c80: 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20  uthors = [].    
1c90: 20 20 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20          build = 
1ca0: 22 62 75 69 6c 64 2e 72 73 22 0a 0a 20 20 20 20  "build.rs"..    
1cb0: 20 20 20 20 20 20 20 20 5b 64 65 70 65 6e 64 65          [depende
1cc0: 6e 63 69 65 73 2e 61 5d 0a 20 20 20 20 20 20 20  ncies.a].       
1cd0: 20 20 20 20 20 70 61 74 68 20 3d 20 22 61 22 0a       path = "a".
1ce0: 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20          "#).    
1cf0: 20 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6c      .file("src/l
1d00: 69 62 2e 72 73 22 2c 20 22 22 29 0a 20 20 20 20  ib.rs", "").    
1d10: 20 20 20 20 2e 66 69 6c 65 28 22 62 75 69 6c 64      .file("build
1d20: 2e 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20 20  .rs", r#".      
1d30: 20 20 20 20 20 20 75 73 65 20 73 74 64 3a 3a 65        use std::e
1d40: 6e 76 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  nv;.            
1d50: 66 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20  fn main() {.    
1d60: 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65              asse
1d70: 72 74 5f 65 71 21 28 65 6e 76 3a 3a 76 61 72 28  rt_eq!(env::var(
1d80: 22 44 45 50 5f 46 4f 4f 5f 46 4f 4f 22 29 2e 6f  "DEP_FOO_FOO").o
1d90: 6b 28 29 2e 65 78 70 65 63 74 28 22 46 4f 4f 20  k().expect("FOO 
1da0: 6d 69 73 73 69 6e 67 22 29 2c 0a 20 20 20 20 20  missing"),.     
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc0: 20 20 20 20 20 20 22 62 61 72 22 29 3b 0a 20 20        "bar");.  
1dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
1de0: 73 65 72 74 5f 65 71 21 28 65 6e 76 3a 3a 76 61  sert_eq!(env::va
1df0: 72 28 22 44 45 50 5f 46 4f 4f 5f 42 41 52 22 29  r("DEP_FOO_BAR")
1e00: 2e 6f 6b 28 29 2e 65 78 70 65 63 74 28 22 42 41  .ok().expect("BA
1e10: 52 20 6d 69 73 73 69 6e 67 22 29 2c 0a 20 20 20  R missing"),.   
1e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e30: 20 20 20 20 20 20 20 20 22 62 61 7a 22 29 3b 0a          "baz");.
1e40: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
1e50: 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20        "#).      
1e60: 20 20 2e 66 69 6c 65 28 22 2e 63 61 72 67 6f 2f    .file(".cargo/
1e70: 63 6f 6e 66 69 67 22 2c 20 26 66 6f 72 6d 61 74  config", &format
1e80: 21 28 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  !(r#".          
1e90: 20 20 5b 74 61 72 67 65 74 2e 7b 7d 2e 66 6f 6f    [target.{}.foo
1ea0: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 75  ].            ru
1eb0: 73 74 63 2d 66 6c 61 67 73 20 3d 20 22 2d 4c 20  stc-flags = "-L 
1ec0: 66 6f 6f 20 2d 4c 20 62 61 72 22 0a 20 20 20 20  foo -L bar".    
1ed0: 20 20 20 20 20 20 20 20 66 6f 6f 20 3d 20 22 62          foo = "b
1ee0: 61 72 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  ar".            
1ef0: 62 61 72 20 3d 20 22 62 61 7a 22 0a 20 20 20 20  bar = "baz".    
1f00: 20 20 20 20 22 23 2c 20 74 61 72 67 65 74 29 29      "#, target))
1f10: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
1f20: 61 2f 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72  a/Cargo.toml", r
1f30: 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  #".            [
1f40: 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20 20  project].       
1f50: 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 61 22 0a       name = "a".
1f60: 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 73              vers
1f70: 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20  ion = "0.5.0".  
1f80: 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f 72            author
1f90: 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20 20  s = [].         
1fa0: 20 20 20 6c 69 6e 6b 73 20 3d 20 22 66 6f 6f 22     links = "foo"
1fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69  .            bui
1fc0: 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a  ld = "build.rs".
1fd0: 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20          "#).    
1fe0: 20 20 20 20 2e 66 69 6c 65 28 22 61 2f 73 72 63      .file("a/src
1ff0: 2f 6c 69 62 2e 72 73 22 2c 20 22 22 29 0a 20 20  /lib.rs", "").  
2000: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 61 2f 62        .file("a/b
2010: 75 69 6c 64 2e 72 73 22 2c 20 22 6e 6f 74 20 76  uild.rs", "not v
2020: 61 6c 69 64 20 72 75 73 74 20 63 6f 64 65 22 29  alid rust code")
2030: 3b 0a 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68  ;..    assert_th
2040: 61 74 28 70 2e 63 61 72 67 6f 5f 70 72 6f 63 65  at(p.cargo_proce
2050: 73 73 28 22 62 75 69 6c 64 22 29 2e 61 72 67 28  ss("build").arg(
2060: 22 2d 76 22 29 2c 0a 20 20 20 20 20 20 20 20 20  "-v"),.         
2070: 20 20 20 20 20 20 20 65 78 65 63 73 28 29 2e 77         execs().w
2080: 69 74 68 5f 73 74 61 74 75 73 28 30 29 0a 20 20  ith_status(0).  
2090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a0: 20 20 20 20 20 2e 77 69 74 68 5f 73 74 64 65 72       .with_stder
20b0: 72 28 22 5c 0a 5b 2e 2e 5d 0a 5b 2e 2e 5d 0a 5b  r("\.[..].[..].[
20c0: 2e 2e 5d 0a 5b 2e 2e 5d 0a 5b 2e 2e 5d 0a 5b 52  ..].[..].[..].[R
20d0: 55 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63 20 2d  UNNING] `rustc -
20e0: 2d 63 72 61 74 65 2d 6e 61 6d 65 20 66 6f 6f 20  -crate-name foo 
20f0: 5b 2e 2e 5d 20 2d 4c 20 66 6f 6f 20 2d 4c 20 62  [..] -L foo -L b
2100: 61 72 60 0a 5b 46 49 4e 49 53 48 45 44 5d 20 64  ar`.[FINISHED] d
2110: 65 76 20 5b 75 6e 6f 70 74 69 6d 69 7a 65 64 20  ev [unoptimized 
2120: 2b 20 64 65 62 75 67 69 6e 66 6f 5d 20 74 61 72  + debuginfo] tar
2130: 67 65 74 28 73 29 20 69 6e 20 5b 2e 2e 5d 0a 22  get(s) in [..]."
2140: 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66  ));.}..#[test].f
2150: 6e 20 75 6e 75 73 65 64 5f 6f 76 65 72 72 69 64  n unused_overrid
2160: 65 73 28 29 20 7b 0a 20 20 20 20 6c 65 74 20 74  es() {.    let t
2170: 61 72 67 65 74 20 3d 20 72 75 73 74 63 5f 68 6f  arget = rustc_ho
2180: 73 74 28 29 3b 0a 0a 20 20 20 20 6c 65 74 20 70  st();..    let p
2190: 20 3d 20 70 72 6f 6a 65 63 74 28 22 66 6f 6f 22   = project("foo"
21a0: 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28  ).        .file(
21b0: 22 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23  "Cargo.toml", r#
21c0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 70  ".            [p
21d0: 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20 20 20  roject].        
21e0: 20 20 20 20 6e 61 6d 65 20 3d 20 22 66 6f 6f 22      name = "foo"
21f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72  .            ver
2200: 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20  sion = "0.5.0". 
2210: 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f             autho
2220: 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20  rs = [].        
2230: 20 20 20 20 62 75 69 6c 64 20 3d 20 22 62 75 69      build = "bui
2240: 6c 64 2e 72 73 22 0a 20 20 20 20 20 20 20 20 22  ld.rs".        "
2250: 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  #).        .file
2260: 28 22 73 72 63 2f 6c 69 62 2e 72 73 22 2c 20 22  ("src/lib.rs", "
2270: 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  ").        .file
2280: 28 22 62 75 69 6c 64 2e 72 73 22 2c 20 22 66 6e  ("build.rs", "fn
2290: 20 6d 61 69 6e 28 29 20 7b 7d 22 29 0a 20 20 20   main() {}").   
22a0: 20 20 20 20 20 2e 66 69 6c 65 28 22 2e 63 61 72       .file(".car
22b0: 67 6f 2f 63 6f 6e 66 69 67 22 2c 20 26 66 6f 72  go/config", &for
22c0: 6d 61 74 21 28 72 23 22 0a 20 20 20 20 20 20 20  mat!(r#".       
22d0: 20 20 20 20 20 5b 74 61 72 67 65 74 2e 7b 7d 2e       [target.{}.
22e0: 66 6f 6f 5d 0a 20 20 20 20 20 20 20 20 20 20 20  foo].           
22f0: 20 72 75 73 74 63 2d 66 6c 61 67 73 20 3d 20 22   rustc-flags = "
2300: 2d 4c 20 66 6f 6f 20 2d 4c 20 62 61 72 22 0a 20  -L foo -L bar". 
2310: 20 20 20 20 20 20 20 20 20 20 20 66 6f 6f 20 3d             foo =
2320: 20 22 62 61 72 22 0a 20 20 20 20 20 20 20 20 20   "bar".         
2330: 20 20 20 62 61 72 20 3d 20 22 62 61 7a 22 0a 20     bar = "baz". 
2340: 20 20 20 20 20 20 20 22 23 2c 20 74 61 72 67 65         "#, targe
2350: 74 29 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74  t));..    assert
2360: 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f 70 72  _that(p.cargo_pr
2370: 6f 63 65 73 73 28 22 62 75 69 6c 64 22 29 2e 61  ocess("build").a
2380: 72 67 28 22 2d 76 22 29 2c 0a 20 20 20 20 20 20  rg("-v"),.      
2390: 20 20 20 20 20 20 20 20 20 20 65 78 65 63 73 28            execs(
23a0: 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30 29  ).with_status(0)
23b0: 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66 6e  );.}..#[test].fn
23c0: 20 6c 69 6e 6b 73 5f 70 61 73 73 65 73 5f 65 6e   links_passes_en
23d0: 76 5f 76 61 72 73 28 29 20 7b 0a 20 20 20 20 6c  v_vars() {.    l
23e0: 65 74 20 70 20 3d 20 70 72 6f 6a 65 63 74 28 22  et p = project("
23f0: 66 6f 6f 22 29 0a 20 20 20 20 20 20 20 20 2e 66  foo").        .f
2400: 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22  ile("Cargo.toml"
2410: 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  , r#".          
2420: 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20    [project].    
2430: 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22          name = "
2440: 66 6f 6f 22 0a 20 20 20 20 20 20 20 20 20 20 20  foo".           
2450: 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e   version = "0.5.
2460: 30 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 61  0".            a
2470: 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20  uthors = [].    
2480: 20 20 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20          build = 
2490: 22 62 75 69 6c 64 2e 72 73 22 0a 0a 20 20 20 20  "build.rs"..    
24a0: 20 20 20 20 20 20 20 20 5b 64 65 70 65 6e 64 65          [depende
24b0: 6e 63 69 65 73 2e 61 5d 0a 20 20 20 20 20 20 20  ncies.a].       
24c0: 20 20 20 20 20 70 61 74 68 20 3d 20 22 61 22 0a       path = "a".
24d0: 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20          "#).    
24e0: 20 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6c      .file("src/l
24f0: 69 62 2e 72 73 22 2c 20 22 22 29 0a 20 20 20 20  ib.rs", "").    
2500: 20 20 20 20 2e 66 69 6c 65 28 22 62 75 69 6c 64      .file("build
2510: 2e 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20 20  .rs", r#".      
2520: 20 20 20 20 20 20 75 73 65 20 73 74 64 3a 3a 65        use std::e
2530: 6e 76 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  nv;.            
2540: 66 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20  fn main() {.    
2550: 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65              asse
2560: 72 74 5f 65 71 21 28 65 6e 76 3a 3a 76 61 72 28  rt_eq!(env::var(
2570: 22 44 45 50 5f 46 4f 4f 5f 46 4f 4f 22 29 2e 75  "DEP_FOO_FOO").u
2580: 6e 77 72 61 70 28 29 2c 20 22 62 61 72 22 29 3b  nwrap(), "bar");
2590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25a0: 20 61 73 73 65 72 74 5f 65 71 21 28 65 6e 76 3a   assert_eq!(env:
25b0: 3a 76 61 72 28 22 44 45 50 5f 46 4f 4f 5f 42 41  :var("DEP_FOO_BA
25c0: 52 22 29 2e 75 6e 77 72 61 70 28 29 2c 20 22 62  R").unwrap(), "b
25d0: 61 7a 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  az");.          
25e0: 20 20 7d 0a 20 20 20 20 20 20 20 20 22 23 29 0a    }.        "#).
25f0: 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 61          .file("a
2600: 2f 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23  /Cargo.toml", r#
2610: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 70  ".            [p
2620: 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20 20 20  roject].        
2630: 20 20 20 20 6e 61 6d 65 20 3d 20 22 61 22 0a 20      name = "a". 
2640: 20 20 20 20 20 20 20 20 20 20 20 76 65 72 73 69             versi
2650: 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20  on = "0.5.0".   
2660: 20 20 20 20 20 20 20 20 20 61 75 74 68 6f 72 73           authors
2670: 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20 20 20   = [].          
2680: 20 20 6c 69 6e 6b 73 20 3d 20 22 66 6f 6f 22 0a    links = "foo".
2690: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c              buil
26a0: 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 20  d = "build.rs". 
26b0: 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20         "#).     
26c0: 20 20 20 2e 66 69 6c 65 28 22 61 2f 73 72 63 2f     .file("a/src/
26d0: 6c 69 62 2e 72 73 22 2c 20 22 22 29 0a 20 20 20  lib.rs", "").   
26e0: 20 20 20 20 20 2e 66 69 6c 65 28 22 61 2f 62 75       .file("a/bu
26f0: 69 6c 64 2e 72 73 22 2c 20 72 23 22 0a 20 20 20  ild.rs", r#".   
2700: 20 20 20 20 20 20 20 20 20 75 73 65 20 73 74 64           use std
2710: 3a 3a 65 6e 76 3b 0a 20 20 20 20 20 20 20 20 20  ::env;.         
2720: 20 20 20 66 6e 20 6d 61 69 6e 28 29 20 7b 0a 20     fn main() {. 
2730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
2740: 65 74 20 6c 69 62 20 3d 20 65 6e 76 3a 3a 76 61  et lib = env::va
2750: 72 28 22 43 41 52 47 4f 5f 4d 41 4e 49 46 45 53  r("CARGO_MANIFES
2760: 54 5f 4c 49 4e 4b 53 22 29 2e 75 6e 77 72 61 70  T_LINKS").unwrap
2770: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ();.            
2780: 20 20 20 20 61 73 73 65 72 74 5f 65 71 21 28 6c      assert_eq!(l
2790: 69 62 2c 20 22 66 6f 6f 22 29 3b 0a 0a 20 20 20  ib, "foo");..   
27a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69               pri
27b0: 6e 74 6c 6e 21 28 22 63 61 72 67 6f 3a 66 6f 6f  ntln!("cargo:foo
27c0: 3d 62 61 72 22 29 3b 0a 20 20 20 20 20 20 20 20  =bar");.        
27d0: 20 20 20 20 20 20 20 20 70 72 69 6e 74 6c 6e 21          println!
27e0: 28 22 63 61 72 67 6f 3a 62 61 72 3d 62 61 7a 22  ("cargo:bar=baz"
27f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
2800: 0a 20 20 20 20 20 20 20 20 22 23 29 3b 0a 0a 20  .        "#);.. 
2810: 20 20 20 61 73 73 65 72 74 5f 74 68 61 74 28 70     assert_that(p
2820: 2e 63 61 72 67 6f 5f 70 72 6f 63 65 73 73 28 22  .cargo_process("
2830: 62 75 69 6c 64 22 29 2e 61 72 67 28 22 2d 76 22  build").arg("-v"
2840: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
2850: 20 20 20 65 78 65 63 73 28 29 2e 77 69 74 68 5f     execs().with_
2860: 73 74 61 74 75 73 28 30 29 29 3b 0a 7d 0a 0a 23  status(0));.}..#
2870: 5b 74 65 73 74 5d 0a 66 6e 20 6f 6e 6c 79 5f 72  [test].fn only_r
2880: 65 72 75 6e 5f 62 75 69 6c 64 5f 73 63 72 69 70  erun_build_scrip
2890: 74 28 29 20 7b 0a 20 20 20 20 6c 65 74 20 70 20  t() {.    let p 
28a0: 3d 20 70 72 6f 6a 65 63 74 28 22 66 6f 6f 22 29  = project("foo")
28b0: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
28c0: 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22  Cargo.toml", r#"
28d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 72  .            [pr
28e0: 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20 20 20 20  oject].         
28f0: 20 20 20 6e 61 6d 65 20 3d 20 22 66 6f 6f 22 0a     name = "foo".
2900: 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 73              vers
2910: 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20  ion = "0.5.0".  
2920: 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f 72            author
2930: 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20 20  s = [].         
2940: 20 20 20 62 75 69 6c 64 20 3d 20 22 62 75 69 6c     build = "buil
2950: 64 2e 72 73 22 0a 20 20 20 20 20 20 20 20 22 23  d.rs".        "#
2960: 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28  ).        .file(
2970: 22 73 72 63 2f 6c 69 62 2e 72 73 22 2c 20 22 22  "src/lib.rs", ""
2980: 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28  ).        .file(
2990: 22 62 75 69 6c 64 2e 72 73 22 2c 20 72 23 22 0a  "build.rs", r#".
29a0: 20 20 20 20 20 20 20 20 20 20 20 20 66 6e 20 6d              fn m
29b0: 61 69 6e 28 29 20 7b 7d 0a 20 20 20 20 20 20 20  ain() {}.       
29c0: 20 22 23 29 3b 0a 0a 20 20 20 20 61 73 73 65 72   "#);..    asser
29d0: 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f 70  t_that(p.cargo_p
29e0: 72 6f 63 65 73 73 28 22 62 75 69 6c 64 22 29 2e  rocess("build").
29f0: 61 72 67 28 22 2d 76 22 29 2c 0a 20 20 20 20 20  arg("-v"),.     
2a00: 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63 73             execs
2a10: 28 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30  ().with_status(0
2a20: 29 29 3b 0a 20 20 20 20 70 2e 72 6f 6f 74 28 29  ));.    p.root()
2a30: 2e 6d 6f 76 65 5f 69 6e 74 6f 5f 74 68 65 5f 70  .move_into_the_p
2a40: 61 73 74 28 29 3b 0a 0a 20 20 20 20 46 69 6c 65  ast();..    File
2a50: 3a 3a 63 72 65 61 74 65 28 26 70 2e 72 6f 6f 74  ::create(&p.root
2a60: 28 29 2e 6a 6f 69 6e 28 22 73 6f 6d 65 2d 6e 65  ().join("some-ne
2a70: 77 2d 66 69 6c 65 22 29 29 2e 75 6e 77 72 61 70  w-file")).unwrap
2a80: 28 29 3b 0a 20 20 20 20 70 2e 72 6f 6f 74 28 29  ();.    p.root()
2a90: 2e 6d 6f 76 65 5f 69 6e 74 6f 5f 74 68 65 5f 70  .move_into_the_p
2aa0: 61 73 74 28 29 3b 0a 0a 20 20 20 20 61 73 73 65  ast();..    asse
2ab0: 72 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 28  rt_that(p.cargo(
2ac0: 22 62 75 69 6c 64 22 29 2e 61 72 67 28 22 2d 76  "build").arg("-v
2ad0: 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  "),.            
2ae0: 20 20 20 20 65 78 65 63 73 28 29 2e 77 69 74 68      execs().with
2af0: 5f 73 74 61 74 75 73 28 30 29 0a 20 20 20 20 20  _status(0).     
2b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b10: 20 20 2e 77 69 74 68 5f 73 74 64 65 72 72 28 22    .with_stderr("
2b20: 5c 0a 5b 43 4f 4d 50 49 4c 49 4e 47 5d 20 66 6f  \.[COMPILING] fo
2b30: 6f 20 76 30 2e 35 2e 30 20 28 66 69 6c 65 3a 2f  o v0.5.0 (file:/
2b40: 2f 5b 2e 2e 5d 29 0a 5b 52 55 4e 4e 49 4e 47 5d  /[..]).[RUNNING]
2b50: 20 60 5b 2e 2e 5d 5b 2f 5d 62 75 69 6c 64 2d 73   `[..][/]build-s
2b60: 63 72 69 70 74 2d 62 75 69 6c 64 60 0a 5b 52 55  cript-build`.[RU
2b70: 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63 20 2d 2d  NNING] `rustc --
2b80: 63 72 61 74 65 2d 6e 61 6d 65 20 66 6f 6f 20 5b  crate-name foo [
2b90: 2e 2e 5d 60 0a 5b 46 49 4e 49 53 48 45 44 5d 20  ..]`.[FINISHED] 
2ba0: 64 65 76 20 5b 75 6e 6f 70 74 69 6d 69 7a 65 64  dev [unoptimized
2bb0: 20 2b 20 64 65 62 75 67 69 6e 66 6f 5d 20 74 61   + debuginfo] ta
2bc0: 72 67 65 74 28 73 29 20 69 6e 20 5b 2e 2e 5d 0a  rget(s) in [..].
2bd0: 22 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a  "));.}..#[test].
2be0: 66 6e 20 72 65 62 75 69 6c 64 5f 63 6f 6e 74 69  fn rebuild_conti
2bf0: 6e 75 65 73 5f 74 6f 5f 70 61 73 73 5f 65 6e 76  nues_to_pass_env
2c00: 5f 76 61 72 73 28 29 20 7b 0a 20 20 20 20 6c 65  _vars() {.    le
2c10: 74 20 61 20 3d 20 70 72 6f 6a 65 63 74 28 22 61  t a = project("a
2c20: 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  ").        .file
2c30: 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72  ("Cargo.toml", r
2c40: 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  #".            [
2c50: 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20 20  project].       
2c60: 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 61 22 0a       name = "a".
2c70: 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 73              vers
2c80: 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20  ion = "0.5.0".  
2c90: 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f 72            author
2ca0: 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20 20  s = [].         
2cb0: 20 20 20 6c 69 6e 6b 73 20 3d 20 22 66 6f 6f 22     links = "foo"
2cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69  .            bui
2cd0: 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a  ld = "build.rs".
2ce0: 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20          "#).    
2cf0: 20 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6c      .file("src/l
2d00: 69 62 2e 72 73 22 2c 20 22 22 29 0a 20 20 20 20  ib.rs", "").    
2d10: 20 20 20 20 2e 66 69 6c 65 28 22 62 75 69 6c 64      .file("build
2d20: 2e 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20 20  .rs", r#".      
2d30: 20 20 20 20 20 20 75 73 65 20 73 74 64 3a 3a 74        use std::t
2d40: 69 6d 65 3a 3a 44 75 72 61 74 69 6f 6e 3b 0a 20  ime::Duration;. 
2d50: 20 20 20 20 20 20 20 20 20 20 20 66 6e 20 6d 61             fn ma
2d60: 69 6e 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20  in() {.         
2d70: 20 20 20 20 20 20 20 70 72 69 6e 74 6c 6e 21 28         println!(
2d80: 22 63 61 72 67 6f 3a 66 6f 6f 3d 62 61 72 22 29  "cargo:foo=bar")
2d90: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
2da0: 20 20 70 72 69 6e 74 6c 6e 21 28 22 63 61 72 67    println!("carg
2db0: 6f 3a 62 61 72 3d 62 61 7a 22 29 3b 0a 20 20 20  o:bar=baz");.   
2dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 64               std
2dd0: 3a 3a 74 68 72 65 61 64 3a 3a 73 6c 65 65 70 28  ::thread::sleep(
2de0: 44 75 72 61 74 69 6f 6e 3a 3a 66 72 6f 6d 5f 6d  Duration::from_m
2df0: 69 6c 6c 69 73 28 35 30 30 29 29 3b 0a 20 20 20  illis(500));.   
2e00: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
2e10: 20 20 20 22 23 29 3b 0a 20 20 20 20 61 2e 62 75     "#);.    a.bu
2e20: 69 6c 64 28 29 3b 0a 20 20 20 20 61 2e 72 6f 6f  ild();.    a.roo
2e30: 74 28 29 2e 6d 6f 76 65 5f 69 6e 74 6f 5f 74 68  t().move_into_th
2e40: 65 5f 70 61 73 74 28 29 3b 0a 0a 20 20 20 20 6c  e_past();..    l
2e50: 65 74 20 70 20 3d 20 70 72 6f 6a 65 63 74 28 22  et p = project("
2e60: 66 6f 6f 22 29 0a 20 20 20 20 20 20 20 20 2e 66  foo").        .f
2e70: 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22  ile("Cargo.toml"
2e80: 2c 20 26 66 6f 72 6d 61 74 21 28 72 23 22 0a 20  , &format!(r#". 
2e90: 20 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a             [proj
2ea0: 65 63 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20  ect].           
2eb0: 20 6e 61 6d 65 20 3d 20 22 66 6f 6f 22 0a 20 20   name = "foo".  
2ec0: 20 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f            versio
2ed0: 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20  n = "0.5.0".    
2ee0: 20 20 20 20 20 20 20 20 61 75 74 68 6f 72 73 20          authors 
2ef0: 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20 20 20 20  = [].           
2f00: 20 62 75 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e   build = "build.
2f10: 72 73 22 0a 0a 20 20 20 20 20 20 20 20 20 20 20  rs"..           
2f20: 20 5b 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 61   [dependencies.a
2f30: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61  ].            pa
2f40: 74 68 20 3d 20 27 7b 7d 27 0a 20 20 20 20 20 20  th = '{}'.      
2f50: 20 20 22 23 2c 20 61 2e 72 6f 6f 74 28 29 2e 64    "#, a.root().d
2f60: 69 73 70 6c 61 79 28 29 29 29 0a 20 20 20 20 20  isplay())).     
2f70: 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6c 69     .file("src/li
2f80: 62 2e 72 73 22 2c 20 22 22 29 0a 20 20 20 20 20  b.rs", "").     
2f90: 20 20 20 2e 66 69 6c 65 28 22 62 75 69 6c 64 2e     .file("build.
2fa0: 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20  rs", r#".       
2fb0: 20 20 20 20 20 75 73 65 20 73 74 64 3a 3a 65 6e       use std::en
2fc0: 76 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  v;.            f
2fd0: 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20 20  n main() {.     
2fe0: 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72             asser
2ff0: 74 5f 65 71 21 28 65 6e 76 3a 3a 76 61 72 28 22  t_eq!(env::var("
3000: 44 45 50 5f 46 4f 4f 5f 46 4f 4f 22 29 2e 75 6e  DEP_FOO_FOO").un
3010: 77 72 61 70 28 29 2c 20 22 62 61 72 22 29 3b 0a  wrap(), "bar");.
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3030: 61 73 73 65 72 74 5f 65 71 21 28 65 6e 76 3a 3a  assert_eq!(env::
3040: 76 61 72 28 22 44 45 50 5f 46 4f 4f 5f 42 41 52  var("DEP_FOO_BAR
3050: 22 29 2e 75 6e 77 72 61 70 28 29 2c 20 22 62 61  ").unwrap(), "ba
3060: 7a 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  z");.           
3070: 20 7d 0a 20 20 20 20 20 20 20 20 22 23 29 3b 0a   }.        "#);.
3080: 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68 61 74  .    assert_that
3090: 28 70 2e 63 61 72 67 6f 5f 70 72 6f 63 65 73 73  (p.cargo_process
30a0: 28 22 62 75 69 6c 64 22 29 2e 61 72 67 28 22 2d  ("build").arg("-
30b0: 76 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  v"),.           
30c0: 20 20 20 20 20 65 78 65 63 73 28 29 2e 77 69 74       execs().wit
30d0: 68 5f 73 74 61 74 75 73 28 30 29 29 3b 0a 20 20  h_status(0));.  
30e0: 20 20 70 2e 72 6f 6f 74 28 29 2e 6d 6f 76 65 5f    p.root().move_
30f0: 69 6e 74 6f 5f 74 68 65 5f 70 61 73 74 28 29 3b  into_the_past();
3100: 0a 0a 20 20 20 20 46 69 6c 65 3a 3a 63 72 65 61  ..    File::crea
3110: 74 65 28 26 70 2e 72 6f 6f 74 28 29 2e 6a 6f 69  te(&p.root().joi
3120: 6e 28 22 73 6f 6d 65 2d 6e 65 77 2d 66 69 6c 65  n("some-new-file
3130: 22 29 29 2e 75 6e 77 72 61 70 28 29 3b 0a 20 20  ")).unwrap();.  
3140: 20 20 70 2e 72 6f 6f 74 28 29 2e 6d 6f 76 65 5f    p.root().move_
3150: 69 6e 74 6f 5f 74 68 65 5f 70 61 73 74 28 29 3b  into_the_past();
3160: 0a 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68 61  ..    assert_tha
3170: 74 28 70 2e 63 61 72 67 6f 28 22 62 75 69 6c 64  t(p.cargo("build
3180: 22 29 2e 61 72 67 28 22 2d 76 22 29 2c 0a 20 20  ").arg("-v"),.  
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78                ex
31a0: 65 63 73 28 29 2e 77 69 74 68 5f 73 74 61 74 75  ecs().with_statu
31b0: 73 28 30 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74  s(0));.}..#[test
31c0: 5d 0a 66 6e 20 74 65 73 74 69 6e 67 5f 61 6e 64  ].fn testing_and
31d0: 5f 73 75 63 68 28 29 20 7b 0a 20 20 20 20 6c 65  _such() {.    le
31e0: 74 20 70 20 3d 20 70 72 6f 6a 65 63 74 28 22 66  t p = project("f
31f0: 6f 6f 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69  oo").        .fi
3200: 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c  le("Cargo.toml",
3210: 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20   r#".           
3220: 20 5b 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20   [project].     
3230: 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 66         name = "f
3240: 6f 6f 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  oo".            
3250: 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30  version = "0.5.0
3260: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 75  ".            au
3270: 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20  thors = [].     
3280: 20 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22         build = "
3290: 62 75 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20  build.rs".      
32a0: 20 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66    "#).        .f
32b0: 69 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72 73 22  ile("src/lib.rs"
32c0: 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66  , "").        .f
32d0: 69 6c 65 28 22 62 75 69 6c 64 2e 72 73 22 2c 20  ile("build.rs", 
32e0: 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  r#".            
32f0: 66 6e 20 6d 61 69 6e 28 29 20 7b 7d 0a 20 20 20  fn main() {}.   
3300: 20 20 20 20 20 22 23 29 3b 0a 0a 20 20 20 20 70       "#);..    p
3310: 72 69 6e 74 6c 6e 21 28 22 62 75 69 6c 64 22 29  rintln!("build")
3320: 3b 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68 61  ;.    assert_tha
3330: 74 28 70 2e 63 61 72 67 6f 5f 70 72 6f 63 65 73  t(p.cargo_proces
3340: 73 28 22 62 75 69 6c 64 22 29 2e 61 72 67 28 22  s("build").arg("
3350: 2d 76 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20  -v"),.          
3360: 20 20 20 20 20 20 65 78 65 63 73 28 29 2e 77 69        execs().wi
3370: 74 68 5f 73 74 61 74 75 73 28 30 29 29 3b 0a 20  th_status(0));. 
3380: 20 20 20 70 2e 72 6f 6f 74 28 29 2e 6d 6f 76 65     p.root().move
3390: 5f 69 6e 74 6f 5f 74 68 65 5f 70 61 73 74 28 29  _into_the_past()
33a0: 3b 0a 0a 20 20 20 20 46 69 6c 65 3a 3a 63 72 65  ;..    File::cre
33b0: 61 74 65 28 26 70 2e 72 6f 6f 74 28 29 2e 6a 6f  ate(&p.root().jo
33c0: 69 6e 28 22 73 72 63 2f 6c 69 62 2e 72 73 22 29  in("src/lib.rs")
33d0: 29 2e 75 6e 77 72 61 70 28 29 3b 0a 20 20 20 20  ).unwrap();.    
33e0: 70 2e 72 6f 6f 74 28 29 2e 6d 6f 76 65 5f 69 6e  p.root().move_in
33f0: 74 6f 5f 74 68 65 5f 70 61 73 74 28 29 3b 0a 0a  to_the_past();..
3400: 20 20 20 20 70 72 69 6e 74 6c 6e 21 28 22 74 65      println!("te
3410: 73 74 22 29 3b 0a 20 20 20 20 61 73 73 65 72 74  st");.    assert
3420: 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 28 22 74  _that(p.cargo("t
3430: 65 73 74 22 29 2e 61 72 67 28 22 2d 76 6a 31 22  est").arg("-vj1"
3440: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
3450: 20 20 20 65 78 65 63 73 28 29 2e 77 69 74 68 5f     execs().with_
3460: 73 74 61 74 75 73 28 30 29 0a 20 20 20 20 20 20  status(0).      
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3480: 20 2e 77 69 74 68 5f 73 74 64 65 72 72 28 22 5c   .with_stderr("\
3490: 0a 5b 43 4f 4d 50 49 4c 49 4e 47 5d 20 66 6f 6f  .[COMPILING] foo
34a0: 20 76 30 2e 35 2e 30 20 28 66 69 6c 65 3a 2f 2f   v0.5.0 (file://
34b0: 5b 2e 2e 5d 29 0a 5b 52 55 4e 4e 49 4e 47 5d 20  [..]).[RUNNING] 
34c0: 60 5b 2e 2e 5d 5b 2f 5d 62 75 69 6c 64 2d 73 63  `[..][/]build-sc
34d0: 72 69 70 74 2d 62 75 69 6c 64 60 0a 5b 52 55 4e  ript-build`.[RUN
34e0: 4e 49 4e 47 5d 20 60 72 75 73 74 63 20 2d 2d 63  NING] `rustc --c
34f0: 72 61 74 65 2d 6e 61 6d 65 20 66 6f 6f 20 5b 2e  rate-name foo [.
3500: 2e 5d 60 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60 72  .]`.[RUNNING] `r
3510: 75 73 74 63 20 2d 2d 63 72 61 74 65 2d 6e 61 6d  ustc --crate-nam
3520: 65 20 66 6f 6f 20 5b 2e 2e 5d 60 0a 5b 46 49 4e  e foo [..]`.[FIN
3530: 49 53 48 45 44 5d 20 64 65 76 20 5b 75 6e 6f 70  ISHED] dev [unop
3540: 74 69 6d 69 7a 65 64 20 2b 20 64 65 62 75 67 69  timized + debugi
3550: 6e 66 6f 5d 20 74 61 72 67 65 74 28 73 29 20 69  nfo] target(s) i
3560: 6e 20 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e 47 5d  n [..].[RUNNING]
3570: 20 60 5b 2e 2e 5d 5b 2f 5d 66 6f 6f 2d 5b 2e 2e   `[..][/]foo-[..
3580: 5d 5b 45 58 45 5d 60 0a 5b 44 4f 43 54 45 53 54  ][EXE]`.[DOCTEST
3590: 5d 20 66 6f 6f 0a 5b 52 55 4e 4e 49 4e 47 5d 20  ] foo.[RUNNING] 
35a0: 60 72 75 73 74 64 6f 63 20 2d 2d 74 65 73 74 20  `rustdoc --test 
35b0: 5b 2e 2e 5d 60 22 29 0a 20 20 20 20 20 20 20 20  [..]`").        
35c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
35d0: 77 69 74 68 5f 73 74 64 6f 75 74 28 22 0a 72 75  with_stdout(".ru
35e0: 6e 6e 69 6e 67 20 30 20 74 65 73 74 73 0a 0a 74  nning 0 tests..t
35f0: 65 73 74 20 72 65 73 75 6c 74 3a 20 6f 6b 2e 20  est result: ok. 
3600: 30 20 70 61 73 73 65 64 3b 20 30 20 66 61 69 6c  0 passed; 0 fail
3610: 65 64 3b 20 30 20 69 67 6e 6f 72 65 64 3b 20 30  ed; 0 ignored; 0
3620: 20 6d 65 61 73 75 72 65 64 0a 0a 0a 72 75 6e 6e   measured...runn
3630: 69 6e 67 20 30 20 74 65 73 74 73 0a 0a 74 65 73  ing 0 tests..tes
3640: 74 20 72 65 73 75 6c 74 3a 20 6f 6b 2e 20 30 20  t result: ok. 0 
3650: 70 61 73 73 65 64 3b 20 30 20 66 61 69 6c 65 64  passed; 0 failed
3660: 3b 20 30 20 69 67 6e 6f 72 65 64 3b 20 30 20 6d  ; 0 ignored; 0 m
3670: 65 61 73 75 72 65 64 0a 0a 22 29 29 3b 0a 0a 20  easured.."));.. 
3680: 20 20 20 70 72 69 6e 74 6c 6e 21 28 22 64 6f 63     println!("doc
3690: 22 29 3b 0a 20 20 20 20 61 73 73 65 72 74 5f 74  ");.    assert_t
36a0: 68 61 74 28 70 2e 63 61 72 67 6f 28 22 64 6f 63  hat(p.cargo("doc
36b0: 22 29 2e 61 72 67 28 22 2d 76 22 29 2c 0a 20 20  ").arg("-v"),.  
36c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78                ex
36d0: 65 63 73 28 29 2e 77 69 74 68 5f 73 74 61 74 75  ecs().with_statu
36e0: 73 28 30 29 0a 20 20 20 20 20 20 20 20 20 20 20  s(0).           
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 2e 77 69 74              .wit
3700: 68 5f 73 74 64 65 72 72 28 22 5c 0a 5b 44 4f 43  h_stderr("\.[DOC
3710: 55 4d 45 4e 54 49 4e 47 5d 20 66 6f 6f 20 76 30  UMENTING] foo v0
3720: 2e 35 2e 30 20 28 66 69 6c 65 3a 2f 2f 5b 2e 2e  .5.0 (file://[..
3730: 5d 29 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60 72 75  ]).[RUNNING] `ru
3740: 73 74 64 6f 63 20 5b 2e 2e 5d 60 0a 5b 46 49 4e  stdoc [..]`.[FIN
3750: 49 53 48 45 44 5d 20 64 65 76 20 5b 75 6e 6f 70  ISHED] dev [unop
3760: 74 69 6d 69 7a 65 64 20 2b 20 64 65 62 75 67 69  timized + debugi
3770: 6e 66 6f 5d 20 74 61 72 67 65 74 28 73 29 20 69  nfo] target(s) i
3780: 6e 20 5b 2e 2e 5d 0a 22 29 29 3b 0a 0a 20 20 20  n [..]."));..   
3790: 20 46 69 6c 65 3a 3a 63 72 65 61 74 65 28 26 70   File::create(&p
37a0: 2e 72 6f 6f 74 28 29 2e 6a 6f 69 6e 28 22 73 72  .root().join("sr
37b0: 63 2f 6d 61 69 6e 2e 72 73 22 29 29 2e 75 6e 77  c/main.rs")).unw
37c0: 72 61 70 28 29 0a 20 20 20 20 20 20 20 20 20 2e  rap().         .
37d0: 77 72 69 74 65 5f 61 6c 6c 28 62 22 66 6e 20 6d  write_all(b"fn m
37e0: 61 69 6e 28 29 20 7b 7d 22 29 2e 75 6e 77 72 61  ain() {}").unwra
37f0: 70 28 29 3b 0a 20 20 20 20 70 72 69 6e 74 6c 6e  p();.    println
3800: 21 28 22 72 75 6e 22 29 3b 0a 20 20 20 20 61 73  !("run");.    as
3810: 73 65 72 74 5f 74 68 61 74 28 70 2e 63 61 72 67  sert_that(p.carg
3820: 6f 28 22 72 75 6e 22 29 2c 0a 20 20 20 20 20 20  o("run"),.      
3830: 20 20 20 20 20 20 20 20 20 20 65 78 65 63 73 28            execs(
3840: 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30 29  ).with_status(0)
3850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3860: 20 20 20 20 20 20 20 20 2e 77 69 74 68 5f 73 74          .with_st
3870: 64 65 72 72 28 22 5c 0a 5b 43 4f 4d 50 49 4c 49  derr("\.[COMPILI
3880: 4e 47 5d 20 66 6f 6f 20 76 30 2e 35 2e 30 20 28  NG] foo v0.5.0 (
3890: 66 69 6c 65 3a 2f 2f 5b 2e 2e 5d 29 0a 5b 46 49  file://[..]).[FI
38a0: 4e 49 53 48 45 44 5d 20 64 65 76 20 5b 75 6e 6f  NISHED] dev [uno
38b0: 70 74 69 6d 69 7a 65 64 20 2b 20 64 65 62 75 67  ptimized + debug
38c0: 69 6e 66 6f 5d 20 74 61 72 67 65 74 28 73 29 20  info] target(s) 
38d0: 69 6e 20 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e 47  in [..].[RUNNING
38e0: 5d 20 60 74 61 72 67 65 74 5b 2f 5d 64 65 62 75  ] `target[/]debu
38f0: 67 5b 2f 5d 66 6f 6f 5b 45 58 45 5d 60 0a 22 29  g[/]foo[EXE]`.")
3900: 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66 6e  );.}..#[test].fn
3910: 20 70 72 6f 70 61 67 61 74 69 6f 6e 5f 6f 66 5f   propagation_of_
3920: 6c 5f 66 6c 61 67 73 28 29 20 7b 0a 20 20 20 20  l_flags() {.    
3930: 6c 65 74 20 74 61 72 67 65 74 20 3d 20 72 75 73  let target = rus
3940: 74 63 5f 68 6f 73 74 28 29 3b 0a 20 20 20 20 6c  tc_host();.    l
3950: 65 74 20 70 20 3d 20 70 72 6f 6a 65 63 74 28 22  et p = project("
3960: 66 6f 6f 22 29 0a 20 20 20 20 20 20 20 20 2e 66  foo").        .f
3970: 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22  ile("Cargo.toml"
3980: 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  , r#".          
3990: 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20    [project].    
39a0: 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22          name = "
39b0: 66 6f 6f 22 0a 20 20 20 20 20 20 20 20 20 20 20  foo".           
39c0: 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e   version = "0.5.
39d0: 30 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 61  0".            a
39e0: 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20  uthors = [].    
39f0: 20 20 20 20 20 20 20 20 5b 64 65 70 65 6e 64 65          [depende
3a00: 6e 63 69 65 73 2e 61 5d 0a 20 20 20 20 20 20 20  ncies.a].       
3a10: 20 20 20 20 20 70 61 74 68 20 3d 20 22 61 22 0a       path = "a".
3a20: 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20          "#).    
3a30: 20 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6c      .file("src/l
3a40: 69 62 2e 72 73 22 2c 20 22 22 29 0a 20 20 20 20  ib.rs", "").    
3a50: 20 20 20 20 2e 66 69 6c 65 28 22 61 2f 43 61 72      .file("a/Car
3a60: 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20  go.toml", r#".  
3a70: 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65            [proje
3a80: 63 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ct].            
3a90: 6e 61 6d 65 20 3d 20 22 61 22 0a 20 20 20 20 20  name = "a".     
3aa0: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d         version =
3ab0: 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20 20 20   "0.5.0".       
3ac0: 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b       authors = [
3ad0: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 69  ].            li
3ae0: 6e 6b 73 20 3d 20 22 62 61 72 22 0a 20 20 20 20  nks = "bar".    
3af0: 20 20 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20          build = 
3b00: 22 62 75 69 6c 64 2e 72 73 22 0a 0a 20 20 20 20  "build.rs"..    
3b10: 20 20 20 20 20 20 20 20 5b 64 65 70 65 6e 64 65          [depende
3b20: 6e 63 69 65 73 2e 62 5d 0a 20 20 20 20 20 20 20  ncies.b].       
3b30: 20 20 20 20 20 70 61 74 68 20 3d 20 22 2e 2e 2f       path = "../
3b40: 62 22 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20  b".        "#). 
3b50: 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 61 2f         .file("a/
3b60: 73 72 63 2f 6c 69 62 2e 72 73 22 2c 20 22 22 29  src/lib.rs", "")
3b70: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
3b80: 61 2f 62 75 69 6c 64 2e 72 73 22 2c 20 72 23 22  a/build.rs", r#"
3b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6e 20  .            fn 
3ba0: 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20 20 20 20  main() {.       
3bb0: 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 6c 6e           println
3bc0: 21 28 22 63 61 72 67 6f 3a 72 75 73 74 63 2d 66  !("cargo:rustc-f
3bd0: 6c 61 67 73 3d 2d 4c 20 62 61 72 22 29 3b 0a 20  lags=-L bar");. 
3be0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
3bf0: 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20 20       "#).       
3c00: 20 2e 66 69 6c 65 28 22 62 2f 43 61 72 67 6f 2e   .file("b/Cargo.
3c10: 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20  toml", r#".     
3c20: 20 20 20 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d         [project]
3c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d  .            nam
3c40: 65 20 3d 20 22 62 22 0a 20 20 20 20 20 20 20 20  e = "b".        
3c50: 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30      version = "0
3c60: 2e 35 2e 30 22 0a 20 20 20 20 20 20 20 20 20 20  .5.0".          
3c70: 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20    authors = []. 
3c80: 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 6b 73             links
3c90: 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20 20 20   = "foo".       
3ca0: 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22 62 75       build = "bu
3cb0: 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20 20 20  ild.rs".        
3cc0: 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  "#).        .fil
3cd0: 65 28 22 62 2f 73 72 63 2f 6c 69 62 2e 72 73 22  e("b/src/lib.rs"
3ce0: 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66  , "").        .f
3cf0: 69 6c 65 28 22 62 2f 62 75 69 6c 64 2e 72 73 22  ile("b/build.rs"
3d00: 2c 20 22 62 61 64 20 66 69 6c 65 22 29 0a 20 20  , "bad file").  
3d10: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 2e 63 61        .file(".ca
3d20: 72 67 6f 2f 63 6f 6e 66 69 67 22 2c 20 26 66 6f  rgo/config", &fo
3d30: 72 6d 61 74 21 28 72 23 22 0a 20 20 20 20 20 20  rmat!(r#".      
3d40: 20 20 20 20 20 20 5b 74 61 72 67 65 74 2e 7b 7d        [target.{}
3d50: 2e 66 6f 6f 5d 0a 20 20 20 20 20 20 20 20 20 20  .foo].          
3d60: 20 20 72 75 73 74 63 2d 66 6c 61 67 73 20 3d 20    rustc-flags = 
3d70: 22 2d 4c 20 66 6f 6f 22 0a 20 20 20 20 20 20 20  "-L foo".       
3d80: 20 22 23 2c 20 74 61 72 67 65 74 29 29 3b 0a 0a   "#, target));..
3d90: 20 20 20 20 61 73 73 65 72 74 5f 74 68 61 74 28      assert_that(
3da0: 70 2e 63 61 72 67 6f 5f 70 72 6f 63 65 73 73 28  p.cargo_process(
3db0: 22 62 75 69 6c 64 22 29 2e 61 72 67 28 22 2d 76  "build").arg("-v
3dc0: 22 29 2e 61 72 67 28 22 2d 6a 31 22 29 2c 0a 20  ").arg("-j1"),. 
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
3de0: 78 65 63 73 28 29 2e 77 69 74 68 5f 73 74 61 74  xecs().with_stat
3df0: 75 73 28 30 29 0a 20 20 20 20 20 20 20 20 20 20  us(0).          
3e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 77 69               .wi
3e10: 74 68 5f 73 74 64 65 72 72 5f 63 6f 6e 74 61 69  th_stderr_contai
3e20: 6e 73 28 22 5c 0a 5b 52 55 4e 4e 49 4e 47 5d 20  ns("\.[RUNNING] 
3e30: 60 72 75 73 74 63 20 2d 2d 63 72 61 74 65 2d 6e  `rustc --crate-n
3e40: 61 6d 65 20 61 20 5b 2e 2e 5d 20 2d 4c 20 62 61  ame a [..] -L ba
3e50: 72 5b 2e 2e 5d 2d 4c 20 66 6f 6f 5b 2e 2e 5d 60  r[..]-L foo[..]`
3e60: 0a 5b 43 4f 4d 50 49 4c 49 4e 47 5d 20 66 6f 6f  .[COMPILING] foo
3e70: 20 76 30 2e 35 2e 30 20 28 66 69 6c 65 3a 2f 2f   v0.5.0 (file://
3e80: 5b 2e 2e 5d 29 0a 5b 52 55 4e 4e 49 4e 47 5d 20  [..]).[RUNNING] 
3e90: 60 72 75 73 74 63 20 2d 2d 63 72 61 74 65 2d 6e  `rustc --crate-n
3ea0: 61 6d 65 20 66 6f 6f 20 5b 2e 2e 5d 20 2d 4c 20  ame foo [..] -L 
3eb0: 62 61 72 20 2d 4c 20 66 6f 6f 60 0a 22 29 29 3b  bar -L foo`."));
3ec0: 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66 6e 20 70  .}..#[test].fn p
3ed0: 72 6f 70 61 67 61 74 69 6f 6e 5f 6f 66 5f 6c 5f  ropagation_of_l_
3ee0: 66 6c 61 67 73 5f 6e 65 77 28 29 20 7b 0a 20 20  flags_new() {.  
3ef0: 20 20 6c 65 74 20 74 61 72 67 65 74 20 3d 20 72    let target = r
3f00: 75 73 74 63 5f 68 6f 73 74 28 29 3b 0a 20 20 20  ustc_host();.   
3f10: 20 6c 65 74 20 70 20 3d 20 70 72 6f 6a 65 63 74   let p = project
3f20: 28 22 66 6f 6f 22 29 0a 20 20 20 20 20 20 20 20  ("foo").        
3f30: 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d  .file("Cargo.tom
3f40: 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20  l", r#".        
3f50: 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 20 20      [project].  
3f60: 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d            name =
3f70: 20 22 66 6f 6f 22 0a 20 20 20 20 20 20 20 20 20   "foo".         
3f80: 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e     version = "0.
3f90: 35 2e 30 22 0a 20 20 20 20 20 20 20 20 20 20 20  5.0".           
3fa0: 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20   authors = [].  
3fb0: 20 20 20 20 20 20 20 20 20 20 5b 64 65 70 65 6e            [depen
3fc0: 64 65 6e 63 69 65 73 2e 61 5d 0a 20 20 20 20 20  dencies.a].     
3fd0: 20 20 20 20 20 20 20 70 61 74 68 20 3d 20 22 61         path = "a
3fe0: 22 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20 20  ".        "#).  
3ff0: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 73 72 63        .file("src
4000: 2f 6c 69 62 2e 72 73 22 2c 20 22 22 29 0a 20 20  /lib.rs", "").  
4010: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 61 2f 43        .file("a/C
4020: 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a  argo.toml", r#".
4030: 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f              [pro
4040: 6a 65 63 74 5d 0a 20 20 20 20 20 20 20 20 20 20  ject].          
4050: 20 20 6e 61 6d 65 20 3d 20 22 61 22 0a 20 20 20    name = "a".   
4060: 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e           version
4070: 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20   = "0.5.0".     
4080: 20 20 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d         authors =
4090: 20 5b 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20   [].            
40a0: 6c 69 6e 6b 73 20 3d 20 22 62 61 72 22 0a 20 20  links = "bar".  
40b0: 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 20            build 
40c0: 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 0a 20 20  = "build.rs"..  
40d0: 20 20 20 20 20 20 20 20 20 20 5b 64 65 70 65 6e            [depen
40e0: 64 65 6e 63 69 65 73 2e 62 5d 0a 20 20 20 20 20  dencies.b].     
40f0: 20 20 20 20 20 20 20 70 61 74 68 20 3d 20 22 2e         path = ".
4100: 2e 2f 62 22 0a 20 20 20 20 20 20 20 20 22 23 29  ./b".        "#)
4110: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
4120: 61 2f 73 72 63 2f 6c 69 62 2e 72 73 22 2c 20 22  a/src/lib.rs", "
4130: 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  ").        .file
4140: 28 22 61 2f 62 75 69 6c 64 2e 72 73 22 2c 20 72  ("a/build.rs", r
4150: 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  #".            f
4160: 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20 20  n main() {.     
4170: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74             print
4180: 6c 6e 21 28 22 63 61 72 67 6f 3a 72 75 73 74 63  ln!("cargo:rustc
4190: 2d 6c 69 6e 6b 2d 73 65 61 72 63 68 3d 62 61 72  -link-search=bar
41a0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
41b0: 7d 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20 20  }.        "#).  
41c0: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 62 2f 43        .file("b/C
41d0: 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a  argo.toml", r#".
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f              [pro
41f0: 6a 65 63 74 5d 0a 20 20 20 20 20 20 20 20 20 20  ject].          
4200: 20 20 6e 61 6d 65 20 3d 20 22 62 22 0a 20 20 20    name = "b".   
4210: 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e           version
4220: 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20   = "0.5.0".     
4230: 20 20 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d         authors =
4240: 20 5b 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20   [].            
4250: 6c 69 6e 6b 73 20 3d 20 22 66 6f 6f 22 0a 20 20  links = "foo".  
4260: 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 20            build 
4270: 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 20 20 20  = "build.rs".   
4280: 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20 20       "#).       
4290: 20 2e 66 69 6c 65 28 22 62 2f 73 72 63 2f 6c 69   .file("b/src/li
42a0: 62 2e 72 73 22 2c 20 22 22 29 0a 20 20 20 20 20  b.rs", "").     
42b0: 20 20 20 2e 66 69 6c 65 28 22 62 2f 62 75 69 6c     .file("b/buil
42c0: 64 2e 72 73 22 2c 20 22 62 61 64 20 66 69 6c 65  d.rs", "bad file
42d0: 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  ").        .file
42e0: 28 22 2e 63 61 72 67 6f 2f 63 6f 6e 66 69 67 22  (".cargo/config"
42f0: 2c 20 26 66 6f 72 6d 61 74 21 28 72 23 22 0a 20  , &format!(r#". 
4300: 20 20 20 20 20 20 20 20 20 20 20 5b 74 61 72 67             [targ
4310: 65 74 2e 7b 7d 2e 66 6f 6f 5d 0a 20 20 20 20 20  et.{}.foo].     
4320: 20 20 20 20 20 20 20 72 75 73 74 63 2d 6c 69 6e         rustc-lin
4330: 6b 2d 73 65 61 72 63 68 20 3d 20 5b 22 66 6f 6f  k-search = ["foo
4340: 22 5d 0a 20 20 20 20 20 20 20 20 22 23 2c 20 74  "].        "#, t
4350: 61 72 67 65 74 29 29 3b 0a 0a 20 20 20 20 61 73  arget));..    as
4360: 73 65 72 74 5f 74 68 61 74 28 70 2e 63 61 72 67  sert_that(p.carg
4370: 6f 5f 70 72 6f 63 65 73 73 28 22 62 75 69 6c 64  o_process("build
4380: 22 29 2e 61 72 67 28 22 2d 76 22 29 2e 61 72 67  ").arg("-v").arg
4390: 28 22 2d 6a 31 22 29 2c 0a 20 20 20 20 20 20 20  ("-j1"),.       
43a0: 20 20 20 20 20 20 20 20 20 65 78 65 63 73 28 29           execs()
43b0: 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30 29 0a  .with_status(0).
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43d0: 20 20 20 20 20 20 20 2e 77 69 74 68 5f 73 74 64         .with_std
43e0: 65 72 72 5f 63 6f 6e 74 61 69 6e 73 28 22 5c 0a  err_contains("\.
43f0: 5b 52 55 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63  [RUNNING] `rustc
4400: 20 2d 2d 63 72 61 74 65 2d 6e 61 6d 65 20 61 20   --crate-name a 
4410: 5b 2e 2e 5d 20 2d 4c 20 62 61 72 5b 2e 2e 5d 2d  [..] -L bar[..]-
4420: 4c 20 66 6f 6f 5b 2e 2e 5d 60 0a 5b 43 4f 4d 50  L foo[..]`.[COMP
4430: 49 4c 49 4e 47 5d 20 66 6f 6f 20 76 30 2e 35 2e  ILING] foo v0.5.
4440: 30 20 28 66 69 6c 65 3a 2f 2f 5b 2e 2e 5d 29 0a  0 (file://[..]).
4450: 5b 52 55 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63  [RUNNING] `rustc
4460: 20 2d 2d 63 72 61 74 65 2d 6e 61 6d 65 20 66 6f   --crate-name fo
4470: 6f 20 5b 2e 2e 5d 20 2d 4c 20 62 61 72 20 2d 4c  o [..] -L bar -L
4480: 20 66 6f 6f 60 0a 22 29 29 3b 0a 7d 0a 0a 23 5b   foo`."));.}..#[
4490: 74 65 73 74 5d 0a 66 6e 20 62 75 69 6c 64 5f 64  test].fn build_d
44a0: 65 70 73 5f 73 69 6d 70 6c 65 28 29 20 7b 0a 20  eps_simple() {. 
44b0: 20 20 20 6c 65 74 20 70 20 3d 20 70 72 6f 6a 65     let p = proje
44c0: 63 74 28 22 66 6f 6f 22 29 0a 20 20 20 20 20 20  ct("foo").      
44d0: 20 20 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e 74    .file("Cargo.t
44e0: 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20  oml", r#".      
44f0: 20 20 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d 0a        [project].
4500: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65              name
4510: 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20 20 20   = "foo".       
4520: 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22       version = "
4530: 30 2e 35 2e 30 22 0a 20 20 20 20 20 20 20 20 20  0.5.0".         
4540: 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a     authors = [].
4550: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c              buil
4560: 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 20  d = "build.rs". 
4570: 20 20 20 20 20 20 20 20 20 20 20 5b 62 75 69 6c             [buil
4580: 64 2d 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 61  d-dependencies.a
4590: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61  ].            pa
45a0: 74 68 20 3d 20 22 61 22 0a 20 20 20 20 20 20 20  th = "a".       
45b0: 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69   "#).        .fi
45c0: 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72 73 22 2c  le("src/lib.rs",
45d0: 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69   "").        .fi
45e0: 6c 65 28 22 62 75 69 6c 64 2e 72 73 22 2c 20 22  le("build.rs", "
45f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 78 74  .            ext
4600: 65 72 6e 20 63 72 61 74 65 20 61 3b 0a 20 20 20  ern crate a;.   
4610: 20 20 20 20 20 20 20 20 20 66 6e 20 6d 61 69 6e           fn main
4620: 28 29 20 7b 7d 0a 20 20 20 20 20 20 20 20 22 29  () {}.        ")
4630: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
4640: 61 2f 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72  a/Cargo.toml", r
4650: 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  #".            [
4660: 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20 20  project].       
4670: 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 61 22 0a       name = "a".
4680: 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 73              vers
4690: 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20  ion = "0.5.0".  
46a0: 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f 72            author
46b0: 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20 22  s = [].        "
46c0: 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  #).        .file
46d0: 28 22 61 2f 73 72 63 2f 6c 69 62 2e 72 73 22 2c  ("a/src/lib.rs",
46e0: 20 22 22 29 3b 0a 0a 20 20 20 20 61 73 73 65 72   "");..    asser
46f0: 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f 70  t_that(p.cargo_p
4700: 72 6f 63 65 73 73 28 22 62 75 69 6c 64 22 29 2e  rocess("build").
4710: 61 72 67 28 22 2d 76 22 29 2c 0a 20 20 20 20 20  arg("-v"),.     
4720: 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63 73             execs
4730: 28 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30  ().with_status(0
4740: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
4750: 20 20 20 20 20 20 20 20 20 2e 77 69 74 68 5f 73           .with_s
4760: 74 64 65 72 72 28 22 5c 0a 5b 43 4f 4d 50 49 4c  tderr("\.[COMPIL
4770: 49 4e 47 5d 20 61 20 76 30 2e 35 2e 30 20 28 66  ING] a v0.5.0 (f
4780: 69 6c 65 3a 2f 2f 5b 2e 2e 5d 29 0a 5b 52 55 4e  ile://[..]).[RUN
4790: 4e 49 4e 47 5d 20 60 72 75 73 74 63 20 2d 2d 63  NING] `rustc --c
47a0: 72 61 74 65 2d 6e 61 6d 65 20 61 20 5b 2e 2e 5d  rate-name a [..]
47b0: 60 0a 5b 43 4f 4d 50 49 4c 49 4e 47 5d 20 66 6f  `.[COMPILING] fo
47c0: 6f 20 76 30 2e 35 2e 30 20 28 66 69 6c 65 3a 2f  o v0.5.0 (file:/
47d0: 2f 5b 2e 2e 5d 29 0a 5b 52 55 4e 4e 49 4e 47 5d  /[..]).[RUNNING]
47e0: 20 60 72 75 73 74 63 20 5b 2e 2e 5d 20 62 75 69   `rustc [..] bui
47f0: 6c 64 2e 72 73 20 5b 2e 2e 5d 20 2d 2d 65 78 74  ld.rs [..] --ext
4800: 65 72 6e 20 61 3d 5b 2e 2e 5d 60 0a 5b 52 55 4e  ern a=[..]`.[RUN
4810: 4e 49 4e 47 5d 20 60 5b 2e 2e 5d 5b 2f 5d 66 6f  NING] `[..][/]fo
4820: 6f 2d 5b 2e 2e 5d 5b 2f 5d 62 75 69 6c 64 2d 73  o-[..][/]build-s
4830: 63 72 69 70 74 2d 62 75 69 6c 64 60 0a 5b 52 55  cript-build`.[RU
4840: 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63 20 2d 2d  NNING] `rustc --
4850: 63 72 61 74 65 2d 6e 61 6d 65 20 66 6f 6f 20 5b  crate-name foo [
4860: 2e 2e 5d 60 0a 5b 46 49 4e 49 53 48 45 44 5d 20  ..]`.[FINISHED] 
4870: 64 65 76 20 5b 75 6e 6f 70 74 69 6d 69 7a 65 64  dev [unoptimized
4880: 20 2b 20 64 65 62 75 67 69 6e 66 6f 5d 20 74 61   + debuginfo] ta
4890: 72 67 65 74 28 73 29 20 69 6e 20 5b 2e 2e 5d 0a  rget(s) in [..].
48a0: 22 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a  "));.}..#[test].
48b0: 66 6e 20 62 75 69 6c 64 5f 64 65 70 73 5f 6e 6f  fn build_deps_no
48c0: 74 5f 66 6f 72 5f 6e 6f 72 6d 61 6c 28 29 20 7b  t_for_normal() {
48d0: 0a 20 20 20 20 6c 65 74 20 74 61 72 67 65 74 20  .    let target 
48e0: 3d 20 72 75 73 74 63 5f 68 6f 73 74 28 29 3b 0a  = rustc_host();.
48f0: 20 20 20 20 6c 65 74 20 70 20 3d 20 70 72 6f 6a      let p = proj
4900: 65 63 74 28 22 66 6f 6f 22 29 0a 20 20 20 20 20  ect("foo").     
4910: 20 20 20 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e     .file("Cargo.
4920: 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20  toml", r#".     
4930: 20 20 20 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d         [project]
4940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d  .            nam
4950: 65 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20 20  e = "foo".      
4960: 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20        version = 
4970: 22 30 2e 35 2e 30 22 0a 20 20 20 20 20 20 20 20  "0.5.0".        
4980: 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d      authors = []
4990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69  .            bui
49a0: 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a  ld = "build.rs".
49b0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 62 75 69              [bui
49c0: 6c 64 2d 64 65 70 65 6e 64 65 6e 63 69 65 73 2e  ld-dependencies.
49d0: 61 61 61 61 61 5d 0a 20 20 20 20 20 20 20 20 20  aaaaa].         
49e0: 20 20 20 70 61 74 68 20 3d 20 22 61 22 0a 20 20     path = "a".  
49f0: 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20        "#).      
4a00: 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6c 69 62    .file("src/lib
4a10: 2e 72 73 22 2c 20 22 65 78 74 65 72 6e 20 63 72  .rs", "extern cr
4a20: 61 74 65 20 61 61 61 61 61 3b 22 29 0a 20 20 20  ate aaaaa;").   
4a30: 20 20 20 20 20 2e 66 69 6c 65 28 22 62 75 69 6c       .file("buil
4a40: 64 2e 72 73 22 2c 20 22 0a 20 20 20 20 20 20 20  d.rs", ".       
4a50: 20 20 20 20 20 65 78 74 65 72 6e 20 63 72 61 74       extern crat
4a60: 65 20 61 61 61 61 61 3b 0a 20 20 20 20 20 20 20  e aaaaa;.       
4a70: 20 20 20 20 20 66 6e 20 6d 61 69 6e 28 29 20 7b       fn main() {
4a80: 7d 0a 20 20 20 20 20 20 20 20 22 29 0a 20 20 20  }.        ").   
4a90: 20 20 20 20 20 2e 66 69 6c 65 28 22 61 2f 43 61       .file("a/Ca
4aa0: 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20  rgo.toml", r#". 
4ab0: 20 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a             [proj
4ac0: 65 63 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20  ect].           
4ad0: 20 6e 61 6d 65 20 3d 20 22 61 61 61 61 61 22 0a   name = "aaaaa".
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 73              vers
4af0: 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20  ion = "0.5.0".  
4b00: 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f 72            author
4b10: 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20 22  s = [].        "
4b20: 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  #).        .file
4b30: 28 22 61 2f 73 72 63 2f 6c 69 62 2e 72 73 22 2c  ("a/src/lib.rs",
4b40: 20 22 22 29 3b 0a 0a 20 20 20 20 61 73 73 65 72   "");..    asser
4b50: 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f 70  t_that(p.cargo_p
4b60: 72 6f 63 65 73 73 28 22 62 75 69 6c 64 22 29 2e  rocess("build").
4b70: 61 72 67 28 22 2d 76 22 29 2e 61 72 67 28 22 2d  arg("-v").arg("-
4b80: 2d 74 61 72 67 65 74 22 29 2e 61 72 67 28 26 74  -target").arg(&t
4b90: 61 72 67 65 74 29 2c 0a 20 20 20 20 20 20 20 20  arget),.        
4ba0: 20 20 20 20 20 20 20 20 65 78 65 63 73 28 29 2e          execs().
4bb0: 77 69 74 68 5f 73 74 61 74 75 73 28 31 30 31 29  with_status(101)
4bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4bd0: 20 20 20 20 20 20 20 20 2e 77 69 74 68 5f 73 74          .with_st
4be0: 64 65 72 72 5f 63 6f 6e 74 61 69 6e 73 28 22 5c  derr_contains("\
4bf0: 0a 5b 2e 2e 5d 63 61 6e 27 74 20 66 69 6e 64 20  .[..]can't find 
4c00: 63 72 61 74 65 20 66 6f 72 20 60 61 61 61 61 61  crate for `aaaaa
4c10: 60 5b 2e 2e 5d 0a 22 29 0a 20 20 20 20 20 20 20  `[..].").       
4c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c30: 2e 77 69 74 68 5f 73 74 64 65 72 72 5f 63 6f 6e  .with_stderr_con
4c40: 74 61 69 6e 73 28 22 5c 0a 5b 45 52 52 4f 52 5d  tains("\.[ERROR]
4c50: 20 43 6f 75 6c 64 20 6e 6f 74 20 63 6f 6d 70 69   Could not compi
4c60: 6c 65 20 60 66 6f 6f 60 2e 0a 0a 43 61 75 73 65  le `foo`...Cause
4c70: 64 20 62 79 3a 0a 20 20 70 72 6f 63 65 73 73 20  d by:.  process 
4c80: 64 69 64 6e 27 74 20 65 78 69 74 20 73 75 63 63  didn't exit succ
4c90: 65 73 73 66 75 6c 6c 79 3a 20 5b 2e 2e 5d 0a 22  essfully: [..]."
4ca0: 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66  ));.}..#[test].f
4cb0: 6e 20 62 75 69 6c 64 5f 63 6d 64 5f 77 69 74 68  n build_cmd_with
4cc0: 5f 61 5f 62 75 69 6c 64 5f 63 6d 64 28 29 20 7b  _a_build_cmd() {
4cd0: 0a 20 20 20 20 6c 65 74 20 70 20 3d 20 70 72 6f  .    let p = pro
4ce0: 6a 65 63 74 28 22 66 6f 6f 22 29 0a 20 20 20 20  ject("foo").    
4cf0: 20 20 20 20 2e 66 69 6c 65 28 22 43 61 72 67 6f      .file("Cargo
4d00: 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20  .toml", r#".    
4d10: 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65 63 74          [project
4d20: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61  ].            na
4d30: 6d 65 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20  me = "foo".     
4d40: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d         version =
4d50: 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20 20 20   "0.5.0".       
4d60: 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b       authors = [
4d70: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75  ].            bu
4d80: 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22  ild = "build.rs"
4d90: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 62  ..            [b
4da0: 75 69 6c 64 2d 64 65 70 65 6e 64 65 6e 63 69 65  uild-dependencie
4db0: 73 2e 61 5d 0a 20 20 20 20 20 20 20 20 20 20 20  s.a].           
4dc0: 20 70 61 74 68 20 3d 20 22 61 22 0a 20 20 20 20   path = "a".    
4dd0: 20 20 20 20 22 23 29 0a 20 20 20 20 20 20 20 20      "#).        
4de0: 2e 66 69 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72  .file("src/lib.r
4df0: 73 22 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20  s", "").        
4e00: 2e 66 69 6c 65 28 22 62 75 69 6c 64 2e 72 73 22  .file("build.rs"
4e10: 2c 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  , ".            
4e20: 65 78 74 65 72 6e 20 63 72 61 74 65 20 61 3b 0a  extern crate a;.
4e30: 20 20 20 20 20 20 20 20 20 20 20 20 66 6e 20 6d              fn m
4e40: 61 69 6e 28 29 20 7b 7d 0a 20 20 20 20 20 20 20  ain() {}.       
4e50: 20 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c   ").        .fil
4e60: 65 28 22 61 2f 43 61 72 67 6f 2e 74 6f 6d 6c 22  e("a/Cargo.toml"
4e70: 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  , r#".          
4e80: 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20    [project].    
4e90: 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22          name = "
4ea0: 61 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 76  a".            v
4eb0: 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22  ersion = "0.5.0"
4ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74  .            aut
4ed0: 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20  hors = [].      
4ee0: 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22 62        build = "b
4ef0: 75 69 6c 64 2e 72 73 22 0a 0a 20 20 20 20 20 20  uild.rs"..      
4f00: 20 20 20 20 20 20 5b 62 75 69 6c 64 2d 64 65 70        [build-dep
4f10: 65 6e 64 65 6e 63 69 65 73 2e 62 5d 0a 20 20 20  endencies.b].   
4f20: 20 20 20 20 20 20 20 20 20 70 61 74 68 20 3d 20           path = 
4f30: 22 2e 2e 2f 62 22 0a 20 20 20 20 20 20 20 20 22  "../b".        "
4f40: 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  #).        .file
4f50: 28 22 61 2f 73 72 63 2f 6c 69 62 2e 72 73 22 2c  ("a/src/lib.rs",
4f60: 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69   "").        .fi
4f70: 6c 65 28 22 61 2f 62 75 69 6c 64 2e 72 73 22 2c  le("a/build.rs",
4f80: 20 22 65 78 74 65 72 6e 20 63 72 61 74 65 20 62   "extern crate b
4f90: 3b 20 66 6e 20 6d 61 69 6e 28 29 20 7b 7d 22 29  ; fn main() {}")
4fa0: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
4fb0: 62 2f 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72  b/Cargo.toml", r
4fc0: 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  #".            [
4fd0: 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20 20  project].       
4fe0: 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 62 22 0a       name = "b".
4ff0: 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 73              vers
5000: 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20  ion = "0.5.0".  
5010: 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f 72            author
5020: 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20 22  s = [].        "
5030: 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  #).        .file
5040: 28 22 62 2f 73 72 63 2f 6c 69 62 2e 72 73 22 2c  ("b/src/lib.rs",
5050: 20 22 22 29 3b 0a 0a 20 20 20 20 61 73 73 65 72   "");..    asser
5060: 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f 70  t_that(p.cargo_p
5070: 72 6f 63 65 73 73 28 22 62 75 69 6c 64 22 29 2e  rocess("build").
5080: 61 72 67 28 22 2d 76 22 29 2c 0a 20 20 20 20 20  arg("-v"),.     
5090: 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63 73             execs
50a0: 28 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30  ().with_status(0
50b0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
50c0: 20 20 20 20 20 20 20 20 20 2e 77 69 74 68 5f 73           .with_s
50d0: 74 64 65 72 72 28 22 5c 0a 5b 43 4f 4d 50 49 4c  tderr("\.[COMPIL
50e0: 49 4e 47 5d 20 62 20 76 30 2e 35 2e 30 20 28 66  ING] b v0.5.0 (f
50f0: 69 6c 65 3a 2f 2f 5b 2e 2e 5d 29 0a 5b 52 55 4e  ile://[..]).[RUN
5100: 4e 49 4e 47 5d 20 60 72 75 73 74 63 20 2d 2d 63  NING] `rustc --c
5110: 72 61 74 65 2d 6e 61 6d 65 20 62 20 5b 2e 2e 5d  rate-name b [..]
5120: 60 0a 5b 43 4f 4d 50 49 4c 49 4e 47 5d 20 61 20  `.[COMPILING] a 
5130: 76 30 2e 35 2e 30 20 28 66 69 6c 65 3a 2f 2f 5b  v0.5.0 (file://[
5140: 2e 2e 5d 29 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60  ..]).[RUNNING] `
5150: 72 75 73 74 63 20 5b 2e 2e 5d 20 61 5b 2f 5d 62  rustc [..] a[/]b
5160: 75 69 6c 64 2e 72 73 20 5b 2e 2e 5d 20 2d 2d 65  uild.rs [..] --e
5170: 78 74 65 72 6e 20 62 3d 5b 2e 2e 5d 60 0a 5b 52  xtern b=[..]`.[R
5180: 55 4e 4e 49 4e 47 5d 20 60 5b 2e 2e 5d 5b 2f 5d  UNNING] `[..][/]
5190: 61 2d 5b 2e 2e 5d 5b 2f 5d 62 75 69 6c 64 2d 73  a-[..][/]build-s
51a0: 63 72 69 70 74 2d 62 75 69 6c 64 60 0a 5b 52 55  cript-build`.[RU
51b0: 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63 20 2d 2d  NNING] `rustc --
51c0: 63 72 61 74 65 2d 6e 61 6d 65 20 61 20 5b 2e 2e  crate-name a [..
51d0: 5d 6c 69 62 2e 72 73 20 2d 2d 63 72 61 74 65 2d  ]lib.rs --crate-
51e0: 74 79 70 65 20 6c 69 62 20 5c 0a 20 20 20 20 2d  type lib \.    -
51f0: 2d 65 6d 69 74 3d 64 65 70 2d 69 6e 66 6f 2c 6c  -emit=dep-info,l
5200: 69 6e 6b 20 2d 43 20 64 65 62 75 67 69 6e 66 6f  ink -C debuginfo
5210: 3d 32 20 5c 0a 20 20 20 20 2d 43 20 6d 65 74 61  =2 \.    -C meta
5220: 64 61 74 61 3d 5b 2e 2e 5d 20 5c 0a 20 20 20 20  data=[..] \.    
5230: 2d 2d 6f 75 74 2d 64 69 72 20 5b 2e 2e 5d 74 61  --out-dir [..]ta
5240: 72 67 65 74 5b 2f 5d 64 65 62 75 67 5b 2f 5d 64  rget[/]debug[/]d
5250: 65 70 73 20 5c 0a 20 20 20 20 2d 4c 20 5b 2e 2e  eps \.    -L [..
5260: 5d 74 61 72 67 65 74 5b 2f 5d 64 65 62 75 67 5b  ]target[/]debug[
5270: 2f 5d 64 65 70 73 60 0a 5b 43 4f 4d 50 49 4c 49  /]deps`.[COMPILI
5280: 4e 47 5d 20 66 6f 6f 20 76 30 2e 35 2e 30 20 28  NG] foo v0.5.0 (
5290: 66 69 6c 65 3a 2f 2f 5b 2e 2e 5d 29 0a 5b 52 55  file://[..]).[RU
52a0: 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63 20 2d 2d  NNING] `rustc --
52b0: 63 72 61 74 65 2d 6e 61 6d 65 20 62 75 69 6c 64  crate-name build
52c0: 5f 73 63 72 69 70 74 5f 62 75 69 6c 64 20 62 75  _script_build bu
52d0: 69 6c 64 2e 72 73 20 2d 2d 63 72 61 74 65 2d 74  ild.rs --crate-t
52e0: 79 70 65 20 62 69 6e 20 5c 0a 20 20 20 20 2d 2d  ype bin \.    --
52f0: 65 6d 69 74 3d 64 65 70 2d 69 6e 66 6f 2c 6c 69  emit=dep-info,li
5300: 6e 6b 20 5c 0a 20 20 20 20 2d 43 20 64 65 62 75  nk \.    -C debu
5310: 67 69 6e 66 6f 3d 32 20 2d 43 20 6d 65 74 61 64  ginfo=2 -C metad
5320: 61 74 61 3d 5b 2e 2e 5d 20 2d 2d 6f 75 74 2d 64  ata=[..] --out-d
5330: 69 72 20 5b 2e 2e 5d 20 5c 0a 20 20 20 20 2d 4c  ir [..] \.    -L
5340: 20 5b 2e 2e 5d 74 61 72 67 65 74 5b 2f 5d 64 65   [..]target[/]de
5350: 62 75 67 5b 2f 5d 64 65 70 73 20 5c 0a 20 20 20  bug[/]deps \.   
5360: 20 2d 2d 65 78 74 65 72 6e 20 61 3d 5b 2e 2e 5d   --extern a=[..]
5370: 6c 69 62 61 5b 2e 2e 5d 2e 72 6c 69 62 60 0a 5b  liba[..].rlib`.[
5380: 52 55 4e 4e 49 4e 47 5d 20 60 5b 2e 2e 5d 5b 2f  RUNNING] `[..][/
5390: 5d 66 6f 6f 2d 5b 2e 2e 5d 5b 2f 5d 62 75 69 6c  ]foo-[..][/]buil
53a0: 64 2d 73 63 72 69 70 74 2d 62 75 69 6c 64 60 0a  d-script-build`.
53b0: 5b 52 55 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63  [RUNNING] `rustc
53c0: 20 2d 2d 63 72 61 74 65 2d 6e 61 6d 65 20 66 6f   --crate-name fo
53d0: 6f 20 5b 2e 2e 5d 6c 69 62 2e 72 73 20 2d 2d 63  o [..]lib.rs --c
53e0: 72 61 74 65 2d 74 79 70 65 20 6c 69 62 20 5c 0a  rate-type lib \.
53f0: 20 20 20 20 2d 2d 65 6d 69 74 3d 64 65 70 2d 69      --emit=dep-i
5400: 6e 66 6f 2c 6c 69 6e 6b 20 2d 43 20 64 65 62 75  nfo,link -C debu
5410: 67 69 6e 66 6f 3d 32 20 5c 0a 20 20 20 20 2d 43  ginfo=2 \.    -C
5420: 20 6d 65 74 61 64 61 74 61 3d 5b 2e 2e 5d 20 5c   metadata=[..] \
5430: 0a 20 20 20 20 2d 2d 6f 75 74 2d 64 69 72 20 5b  .    --out-dir [
5440: 2e 2e 5d 20 5c 0a 20 20 20 20 2d 4c 20 5b 2e 2e  ..] \.    -L [..
5450: 5d 74 61 72 67 65 74 5b 2f 5d 64 65 62 75 67 5b  ]target[/]debug[
5460: 2f 5d 64 65 70 73 60 0a 5b 46 49 4e 49 53 48 45  /]deps`.[FINISHE
5470: 44 5d 20 64 65 76 20 5b 75 6e 6f 70 74 69 6d 69  D] dev [unoptimi
5480: 7a 65 64 20 2b 20 64 65 62 75 67 69 6e 66 6f 5d  zed + debuginfo]
5490: 20 74 61 72 67 65 74 28 73 29 20 69 6e 20 5b 2e   target(s) in [.
54a0: 2e 5d 0a 22 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73  .]."));.}..#[tes
54b0: 74 5d 0a 66 6e 20 6f 75 74 5f 64 69 72 5f 69 73  t].fn out_dir_is
54c0: 5f 70 72 65 73 65 72 76 65 64 28 29 20 7b 0a 20  _preserved() {. 
54d0: 20 20 20 6c 65 74 20 70 20 3d 20 70 72 6f 6a 65     let p = proje
54e0: 63 74 28 22 66 6f 6f 22 29 0a 20 20 20 20 20 20  ct("foo").      
54f0: 20 20 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e 74    .file("Cargo.t
5500: 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20  oml", r#".      
5510: 20 20 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d 0a        [project].
5520: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65              name
5530: 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20 20 20   = "foo".       
5540: 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22       version = "
5550: 30 2e 35 2e 30 22 0a 20 20 20 20 20 20 20 20 20  0.5.0".         
5560: 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a     authors = [].
5570: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c              buil
5580: 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 20  d = "build.rs". 
5590: 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20         "#).     
55a0: 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6c 69     .file("src/li
55b0: 62 2e 72 73 22 2c 20 22 22 29 0a 20 20 20 20 20  b.rs", "").     
55c0: 20 20 20 2e 66 69 6c 65 28 22 62 75 69 6c 64 2e     .file("build.
55d0: 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20  rs", r#".       
55e0: 20 20 20 20 20 75 73 65 20 73 74 64 3a 3a 65 6e       use std::en
55f0: 76 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  v;.            u
5600: 73 65 20 73 74 64 3a 3a 66 73 3a 3a 46 69 6c 65  se std::fs::File
5610: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ;.            us
5620: 65 20 73 74 64 3a 3a 70 61 74 68 3a 3a 50 61 74  e std::path::Pat
5630: 68 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  h;.            f
5640: 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20 20  n main() {.     
5650: 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20 6f             let o
5660: 75 74 20 3d 20 65 6e 76 3a 3a 76 61 72 28 22 4f  ut = env::var("O
5670: 55 54 5f 44 49 52 22 29 2e 75 6e 77 72 61 70 28  UT_DIR").unwrap(
5680: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
5690: 20 20 20 46 69 6c 65 3a 3a 63 72 65 61 74 65 28     File::create(
56a0: 50 61 74 68 3a 3a 6e 65 77 28 26 6f 75 74 29 2e  Path::new(&out).
56b0: 6a 6f 69 6e 28 22 66 6f 6f 22 29 29 2e 75 6e 77  join("foo")).unw
56c0: 72 61 70 28 29 3b 0a 20 20 20 20 20 20 20 20 20  rap();.         
56d0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 22 23 29     }.        "#)
56e0: 3b 0a 0a 20 20 20 20 2f 2f 20 4d 61 6b 65 20 74  ;..    // Make t
56f0: 68 65 20 66 69 6c 65 0a 20 20 20 20 61 73 73 65  he file.    asse
5700: 72 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f  rt_that(p.cargo_
5710: 70 72 6f 63 65 73 73 28 22 62 75 69 6c 64 22 29  process("build")
5720: 2e 61 72 67 28 22 2d 76 22 29 2c 0a 20 20 20 20  .arg("-v"),.    
5730: 20 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63              exec
5740: 73 28 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28  s().with_status(
5750: 30 29 29 3b 0a 20 20 20 20 70 2e 72 6f 6f 74 28  0));.    p.root(
5760: 29 2e 6d 6f 76 65 5f 69 6e 74 6f 5f 74 68 65 5f  ).move_into_the_
5770: 70 61 73 74 28 29 3b 0a 0a 20 20 20 20 2f 2f 20  past();..    // 
5780: 43 68 61 6e 67 65 20 74 6f 20 61 73 73 65 72 74  Change to assert
5790: 69 6e 67 20 74 68 61 74 20 69 74 27 73 20 74 68  ing that it's th
57a0: 65 72 65 0a 20 20 20 20 46 69 6c 65 3a 3a 63 72  ere.    File::cr
57b0: 65 61 74 65 28 26 70 2e 72 6f 6f 74 28 29 2e 6a  eate(&p.root().j
57c0: 6f 69 6e 28 22 62 75 69 6c 64 2e 72 73 22 29 29  oin("build.rs"))
57d0: 2e 75 6e 77 72 61 70 28 29 2e 77 72 69 74 65 5f  .unwrap().write_
57e0: 61 6c 6c 28 62 72 23 22 0a 20 20 20 20 20 20 20  all(br#".       
57f0: 20 75 73 65 20 73 74 64 3a 3a 65 6e 76 3b 0a 20   use std::env;. 
5800: 20 20 20 20 20 20 20 75 73 65 20 73 74 64 3a 3a         use std::
5810: 6f 6c 64 5f 69 6f 3a 3a 46 69 6c 65 3b 0a 20 20  old_io::File;.  
5820: 20 20 20 20 20 20 66 6e 20 6d 61 69 6e 28 29 20        fn main() 
5830: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 65  {.            le
5840: 74 20 6f 75 74 20 3d 20 65 6e 76 3a 3a 76 61 72  t out = env::var
5850: 28 22 4f 55 54 5f 44 49 52 22 29 2e 75 6e 77 72  ("OUT_DIR").unwr
5860: 61 70 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ap();.          
5870: 20 20 46 69 6c 65 3a 3a 6f 70 65 6e 28 26 50 61    File::open(&Pa
5880: 74 68 3a 3a 6e 65 77 28 26 6f 75 74 29 2e 6a 6f  th::new(&out).jo
5890: 69 6e 28 22 66 6f 6f 22 29 29 2e 75 6e 77 72 61  in("foo")).unwra
58a0: 70 28 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  p();.        }. 
58b0: 20 20 20 22 23 29 2e 75 6e 77 72 61 70 28 29 3b     "#).unwrap();
58c0: 0a 20 20 20 20 70 2e 72 6f 6f 74 28 29 2e 6d 6f  .    p.root().mo
58d0: 76 65 5f 69 6e 74 6f 5f 74 68 65 5f 70 61 73 74  ve_into_the_past
58e0: 28 29 3b 0a 20 20 20 20 61 73 73 65 72 74 5f 74  ();.    assert_t
58f0: 68 61 74 28 70 2e 63 61 72 67 6f 28 22 62 75 69  hat(p.cargo("bui
5900: 6c 64 22 29 2e 61 72 67 28 22 2d 76 22 29 2c 0a  ld").arg("-v"),.
5910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5920: 65 78 65 63 73 28 29 2e 77 69 74 68 5f 73 74 61  execs().with_sta
5930: 74 75 73 28 30 29 29 3b 0a 0a 20 20 20 20 2f 2f  tus(0));..    //
5940: 20 52 75 6e 20 61 20 66 72 65 73 68 20 62 75 69   Run a fresh bui
5950: 6c 64 20 77 68 65 72 65 20 66 69 6c 65 20 73 68  ld where file sh
5960: 6f 75 6c 64 20 62 65 20 70 72 65 73 65 72 76 65  ould be preserve
5970: 64 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68 61  d.    assert_tha
5980: 74 28 70 2e 63 61 72 67 6f 28 22 62 75 69 6c 64  t(p.cargo("build
5990: 22 29 2e 61 72 67 28 22 2d 76 22 29 2c 0a 20 20  ").arg("-v"),.  
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78                ex
59b0: 65 63 73 28 29 2e 77 69 74 68 5f 73 74 61 74 75  ecs().with_statu
59c0: 73 28 30 29 29 3b 0a 0a 20 20 20 20 2f 2f 20 4f  s(0));..    // O
59d0: 6e 65 20 6c 61 73 74 20 74 69 6d 65 20 74 6f 20  ne last time to 
59e0: 6d 61 6b 65 20 73 75 72 65 20 69 74 27 73 20 73  make sure it's s
59f0: 74 69 6c 6c 20 74 68 65 72 65 2e 0a 20 20 20 20  till there..    
5a00: 46 69 6c 65 3a 3a 63 72 65 61 74 65 28 26 70 2e  File::create(&p.
5a10: 72 6f 6f 74 28 29 2e 6a 6f 69 6e 28 22 66 6f 6f  root().join("foo
5a20: 22 29 29 2e 75 6e 77 72 61 70 28 29 3b 0a 20 20  ")).unwrap();.  
5a30: 20 20 61 73 73 65 72 74 5f 74 68 61 74 28 70 2e    assert_that(p.
5a40: 63 61 72 67 6f 28 22 62 75 69 6c 64 22 29 2e 61  cargo("build").a
5a50: 72 67 28 22 2d 76 22 29 2c 0a 20 20 20 20 20 20  rg("-v"),.      
5a60: 20 20 20 20 20 20 20 20 20 20 65 78 65 63 73 28            execs(
5a70: 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30 29  ).with_status(0)
5a80: 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66 6e  );.}..#[test].fn
5a90: 20 6f 75 74 70 75 74 5f 73 65 70 61 72 61 74 65   output_separate
5aa0: 5f 6c 69 6e 65 73 28 29 20 7b 0a 20 20 20 20 6c  _lines() {.    l
5ab0: 65 74 20 70 20 3d 20 70 72 6f 6a 65 63 74 28 22  et p = project("
5ac0: 66 6f 6f 22 29 0a 20 20 20 20 20 20 20 20 2e 66  foo").        .f
5ad0: 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22  ile("Cargo.toml"
5ae0: 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  , r#".          
5af0: 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20    [project].    
5b00: 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22          name = "
5b10: 66 6f 6f 22 0a 20 20 20 20 20 20 20 20 20 20 20  foo".           
5b20: 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e   version = "0.5.
5b30: 30 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 61  0".            a
5b40: 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20  uthors = [].    
5b50: 20 20 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20          build = 
5b60: 22 62 75 69 6c 64 2e 72 73 22 0a 20 20 20 20 20  "build.rs".     
5b70: 20 20 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e     "#).        .
5b80: 66 69 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72 73  file("src/lib.rs
5b90: 22 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e  ", "").        .
5ba0: 66 69 6c 65 28 22 62 75 69 6c 64 2e 72 73 22 2c  file("build.rs",
5bb0: 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20   r#".           
5bc0: 20 66 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20   fn main() {.   
5bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69               pri
5be0: 6e 74 6c 6e 21 28 22 63 61 72 67 6f 3a 72 75 73  ntln!("cargo:rus
5bf0: 74 63 2d 66 6c 61 67 73 3d 2d 4c 20 66 6f 6f 22  tc-flags=-L foo"
5c00: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
5c10: 20 20 20 70 72 69 6e 74 6c 6e 21 28 22 63 61 72     println!("car
5c20: 67 6f 3a 72 75 73 74 63 2d 66 6c 61 67 73 3d 2d  go:rustc-flags=-
5c30: 6c 20 73 74 61 74 69 63 3d 66 6f 6f 22 29 3b 0a  l static=foo");.
5c40: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
5c50: 20 20 20 20 20 20 22 23 29 3b 0a 20 20 20 20 61        "#);.    a
5c60: 73 73 65 72 74 5f 74 68 61 74 28 70 2e 63 61 72  ssert_that(p.car
5c70: 67 6f 5f 70 72 6f 63 65 73 73 28 22 62 75 69 6c  go_process("buil
5c80: 64 22 29 2e 61 72 67 28 22 2d 76 22 29 2c 0a 20  d").arg("-v"),. 
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
5ca0: 78 65 63 73 28 29 2e 77 69 74 68 5f 73 74 61 74  xecs().with_stat
5cb0: 75 73 28 31 30 31 29 0a 20 20 20 20 20 20 20 20  us(101).        
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e                 .
5cd0: 77 69 74 68 5f 73 74 64 65 72 72 5f 63 6f 6e 74  with_stderr_cont
5ce0: 61 69 6e 73 28 22 5c 0a 5b 43 4f 4d 50 49 4c 49  ains("\.[COMPILI
5cf0: 4e 47 5d 20 66 6f 6f 20 76 30 2e 35 2e 30 20 28  NG] foo v0.5.0 (
5d00: 66 69 6c 65 3a 2f 2f 5b 2e 2e 5d 29 0a 5b 52 55  file://[..]).[RU
5d10: 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63 20 5b 2e  NNING] `rustc [.
5d20: 2e 5d 20 62 75 69 6c 64 2e 72 73 20 5b 2e 2e 5d  .] build.rs [..]
5d30: 60 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60 5b 2e 2e  `.[RUNNING] `[..
5d40: 5d 5b 2f 5d 66 6f 6f 2d 5b 2e 2e 5d 5b 2f 5d 62  ][/]foo-[..][/]b
5d50: 75 69 6c 64 2d 73 63 72 69 70 74 2d 62 75 69 6c  uild-script-buil
5d60: 64 60 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60 72 75  d`.[RUNNING] `ru
5d70: 73 74 63 20 2d 2d 63 72 61 74 65 2d 6e 61 6d 65  stc --crate-name
5d80: 20 66 6f 6f 20 5b 2e 2e 5d 20 2d 4c 20 66 6f 6f   foo [..] -L foo
5d90: 20 2d 6c 20 73 74 61 74 69 63 3d 66 6f 6f 60 0a   -l static=foo`.
5da0: 5b 45 52 52 4f 52 5d 20 63 6f 75 6c 64 20 6e 6f  [ERROR] could no
5db0: 74 20 66 69 6e 64 20 6e 61 74 69 76 65 20 73 74  t find native st
5dc0: 61 74 69 63 20 6c 69 62 72 61 72 79 20 5b 2e 2e  atic library [..
5dd0: 5d 0a 22 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74  ]."));.}..#[test
5de0: 5d 0a 66 6e 20 6f 75 74 70 75 74 5f 73 65 70 61  ].fn output_sepa
5df0: 72 61 74 65 5f 6c 69 6e 65 73 5f 6e 65 77 28 29  rate_lines_new()
5e00: 20 7b 0a 20 20 20 20 6c 65 74 20 70 20 3d 20 70   {.    let p = p
5e10: 72 6f 6a 65 63 74 28 22 66 6f 6f 22 29 0a 20 20  roject("foo").  
5e20: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 43 61 72        .file("Car
5e30: 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20  go.toml", r#".  
5e40: 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65            [proje
5e50: 63 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ct].            
5e60: 6e 61 6d 65 20 3d 20 22 66 6f 6f 22 0a 20 20 20  name = "foo".   
5e70: 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e           version
5e80: 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20   = "0.5.0".     
5e90: 20 20 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d         authors =
5ea0: 20 5b 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20   [].            
5eb0: 62 75 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72  build = "build.r
5ec0: 73 22 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20  s".        "#). 
5ed0: 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 73 72         .file("sr
5ee0: 63 2f 6c 69 62 2e 72 73 22 2c 20 22 22 29 0a 20  c/lib.rs", ""). 
5ef0: 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 62 75         .file("bu
5f00: 69 6c 64 2e 72 73 22 2c 20 72 23 22 0a 20 20 20  ild.rs", r#".   
5f10: 20 20 20 20 20 20 20 20 20 66 6e 20 6d 61 69 6e           fn main
5f20: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  () {.           
5f30: 20 20 20 20 20 70 72 69 6e 74 6c 6e 21 28 22 63       println!("c
5f40: 61 72 67 6f 3a 72 75 73 74 63 2d 6c 69 6e 6b 2d  argo:rustc-link-
5f50: 73 65 61 72 63 68 3d 66 6f 6f 22 29 3b 0a 20 20  search=foo");.  
5f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
5f70: 69 6e 74 6c 6e 21 28 22 63 61 72 67 6f 3a 72 75  intln!("cargo:ru
5f80: 73 74 63 2d 6c 69 6e 6b 2d 6c 69 62 3d 73 74 61  stc-link-lib=sta
5f90: 74 69 63 3d 66 6f 6f 22 29 3b 0a 20 20 20 20 20  tic=foo");.     
5fa0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
5fb0: 20 22 23 29 3b 0a 20 20 20 20 61 73 73 65 72 74   "#);.    assert
5fc0: 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f 70 72  _that(p.cargo_pr
5fd0: 6f 63 65 73 73 28 22 62 75 69 6c 64 22 29 2e 61  ocess("build").a
5fe0: 72 67 28 22 2d 76 22 29 2c 0a 20 20 20 20 20 20  rg("-v"),.      
5ff0: 20 20 20 20 20 20 20 20 20 20 65 78 65 63 73 28            execs(
6000: 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28 31 30  ).with_status(10
6010: 31 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1).             
6020: 20 20 20 20 20 20 20 20 20 20 2e 77 69 74 68 5f            .with_
6030: 73 74 64 65 72 72 5f 63 6f 6e 74 61 69 6e 73 28  stderr_contains(
6040: 22 5c 0a 5b 43 4f 4d 50 49 4c 49 4e 47 5d 20 66  "\.[COMPILING] f
6050: 6f 6f 20 76 30 2e 35 2e 30 20 28 66 69 6c 65 3a  oo v0.5.0 (file:
6060: 2f 2f 5b 2e 2e 5d 29 0a 5b 52 55 4e 4e 49 4e 47  //[..]).[RUNNING
6070: 5d 20 60 72 75 73 74 63 20 5b 2e 2e 5d 20 62 75  ] `rustc [..] bu
6080: 69 6c 64 2e 72 73 20 5b 2e 2e 5d 60 0a 5b 52 55  ild.rs [..]`.[RU
6090: 4e 4e 49 4e 47 5d 20 60 5b 2e 2e 5d 5b 2f 5d 66  NNING] `[..][/]f
60a0: 6f 6f 2d 5b 2e 2e 5d 5b 2f 5d 62 75 69 6c 64 2d  oo-[..][/]build-
60b0: 73 63 72 69 70 74 2d 62 75 69 6c 64 60 0a 5b 52  script-build`.[R
60c0: 55 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63 20 2d  UNNING] `rustc -
60d0: 2d 63 72 61 74 65 2d 6e 61 6d 65 20 66 6f 6f 20  -crate-name foo 
60e0: 5b 2e 2e 5d 20 2d 4c 20 66 6f 6f 20 2d 6c 20 73  [..] -L foo -l s
60f0: 74 61 74 69 63 3d 66 6f 6f 60 0a 5b 45 52 52 4f  tatic=foo`.[ERRO
6100: 52 5d 20 63 6f 75 6c 64 20 6e 6f 74 20 66 69 6e  R] could not fin
6110: 64 20 6e 61 74 69 76 65 20 73 74 61 74 69 63 20  d native static 
6120: 6c 69 62 72 61 72 79 20 5b 2e 2e 5d 0a 22 29 29  library [..]."))
6130: 3b 0a 7d 0a 0a 23 5b 63 66 67 28 6e 6f 74 28 77  ;.}..#[cfg(not(w
6140: 69 6e 64 6f 77 73 29 29 5d 20 2f 2f 20 46 49 58  indows))] // FIX
6150: 4d 45 28 23 38 36 37 29 0a 23 5b 74 65 73 74 5d  ME(#867).#[test]
6160: 0a 66 6e 20 63 6f 64 65 5f 67 65 6e 65 72 61 74  .fn code_generat
6170: 69 6f 6e 28 29 20 7b 0a 20 20 20 20 6c 65 74 20  ion() {.    let 
6180: 70 20 3d 20 70 72 6f 6a 65 63 74 28 22 66 6f 6f  p = project("foo
6190: 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  ").        .file
61a0: 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72  ("Cargo.toml", r
61b0: 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  #".            [
61c0: 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20 20  project].       
61d0: 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 66 6f 6f       name = "foo
61e0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 65  ".            ve
61f0: 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a  rsion = "0.5.0".
6200: 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68              auth
6210: 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20  ors = [].       
6220: 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22 62 75       build = "bu
6230: 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20 20 20  ild.rs".        
6240: 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  "#).        .fil
6250: 65 28 22 73 72 63 2f 6d 61 69 6e 2e 72 73 22 2c  e("src/main.rs",
6260: 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20   r#".           
6270: 20 69 6e 63 6c 75 64 65 21 28 63 6f 6e 63 61 74   include!(concat
6280: 21 28 65 6e 76 21 28 22 4f 55 54 5f 44 49 52 22  !(env!("OUT_DIR"
6290: 29 2c 20 22 2f 68 65 6c 6c 6f 2e 72 73 22 29 29  ), "/hello.rs"))
62a0: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ;..            f
62b0: 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20 20  n main() {.     
62c0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74             print
62d0: 6c 6e 21 28 22 7b 7d 22 2c 20 6d 65 73 73 61 67  ln!("{}", messag
62e0: 65 28 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e());.          
62f0: 20 20 7d 0a 20 20 20 20 20 20 20 20 22 23 29 0a    }.        "#).
6300: 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 62          .file("b
6310: 75 69 6c 64 2e 72 73 22 2c 20 72 23 22 0a 20 20  uild.rs", r#".  
6320: 20 20 20 20 20 20 20 20 20 20 75 73 65 20 73 74            use st
6330: 64 3a 3a 65 6e 76 3b 0a 20 20 20 20 20 20 20 20  d::env;.        
6340: 20 20 20 20 75 73 65 20 73 74 64 3a 3a 66 73 3a      use std::fs:
6350: 3a 46 69 6c 65 3b 0a 20 20 20 20 20 20 20 20 20  :File;.         
6360: 20 20 20 75 73 65 20 73 74 64 3a 3a 69 6f 3a 3a     use std::io::
6370: 70 72 65 6c 75 64 65 3a 3a 2a 3b 0a 20 20 20 20  prelude::*;.    
6380: 20 20 20 20 20 20 20 20 75 73 65 20 73 74 64 3a          use std:
6390: 3a 70 61 74 68 3a 3a 50 61 74 68 42 75 66 3b 0a  :path::PathBuf;.
63a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6e 20  .            fn 
63b0: 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20 20 20 20  main() {.       
63c0: 20 20 20 20 20 20 20 20 20 6c 65 74 20 64 73 74           let dst
63d0: 20 3d 20 50 61 74 68 42 75 66 3a 3a 66 72 6f 6d   = PathBuf::from
63e0: 28 65 6e 76 3a 3a 76 61 72 28 22 4f 55 54 5f 44  (env::var("OUT_D
63f0: 49 52 22 29 2e 75 6e 77 72 61 70 28 29 29 3b 0a  IR").unwrap());.
6400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6410: 6c 65 74 20 6d 75 74 20 66 20 3d 20 46 69 6c 65  let mut f = File
6420: 3a 3a 63 72 65 61 74 65 28 26 64 73 74 2e 6a 6f  ::create(&dst.jo
6430: 69 6e 28 22 68 65 6c 6c 6f 2e 72 73 22 29 29 2e  in("hello.rs")).
6440: 75 6e 77 72 61 70 28 29 3b 0a 20 20 20 20 20 20  unwrap();.      
6450: 20 20 20 20 20 20 20 20 20 20 66 2e 77 72 69 74            f.writ
6460: 65 5f 61 6c 6c 28 62 22 0a 20 20 20 20 20 20 20  e_all(b".       
6470: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62               pub
6480: 20 66 6e 20 6d 65 73 73 61 67 65 28 29 20 2d 3e   fn message() ->
6490: 20 26 27 73 74 61 74 69 63 20 73 74 72 20 7b 0a   &'static str {.
64a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64b0: 20 20 20 20 20 20 20 20 5c 22 48 65 6c 6c 6f 2c          \"Hello,
64c0: 20 57 6f 72 6c 64 21 5c 22 0a 20 20 20 20 20 20   World!\".      
64d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a                }.
64e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64f0: 22 29 2e 75 6e 77 72 61 70 28 29 3b 0a 20 20 20  ").unwrap();.   
6500: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
6510: 20 20 20 22 23 29 3b 0a 20 20 20 20 70 2e 62 75     "#);.    p.bu
6520: 69 6c 64 28 29 3b 0a 0a 20 20 20 20 61 73 73 65  ild();..    asse
6530: 72 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 28  rt_that(p.cargo(
6540: 22 72 75 6e 22 29 2c 0a 20 20 20 20 20 20 20 20  "run"),.        
6550: 20 20 20 20 20 20 20 20 65 78 65 63 73 28 29 2e          execs().
6560: 77 69 74 68 5f 73 74 61 74 75 73 28 30 29 0a 20  with_status(0). 
6570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6580: 20 20 20 20 20 20 2e 77 69 74 68 5f 73 74 64 65        .with_stde
6590: 72 72 28 22 5c 0a 5b 43 4f 4d 50 49 4c 49 4e 47  rr("\.[COMPILING
65a0: 5d 20 66 6f 6f 20 76 30 2e 35 2e 30 20 28 66 69  ] foo v0.5.0 (fi
65b0: 6c 65 3a 2f 2f 5b 2e 2e 5d 29 0a 5b 46 49 4e 49  le://[..]).[FINI
65c0: 53 48 45 44 5d 20 64 65 76 20 5b 75 6e 6f 70 74  SHED] dev [unopt
65d0: 69 6d 69 7a 65 64 20 2b 20 64 65 62 75 67 69 6e  imized + debugin
65e0: 66 6f 5d 20 74 61 72 67 65 74 28 73 29 20 69 6e  fo] target(s) in
65f0: 20 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e 47 5d 20   [..].[RUNNING] 
6600: 60 74 61 72 67 65 74 5b 2f 5d 64 65 62 75 67 5b  `target[/]debug[
6610: 2f 5d 66 6f 6f 60 22 29 0a 20 20 20 20 20 20 20  /]foo`").       
6620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6630: 2e 77 69 74 68 5f 73 74 64 6f 75 74 28 22 5c 0a  .with_stdout("\.
6640: 48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 21 0a 22 29  Hello, World!.")
6650: 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74 5f 74  );..    assert_t
6660: 68 61 74 28 70 2e 63 61 72 67 6f 28 22 74 65 73  hat(p.cargo("tes
6670: 74 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  t"),.           
6680: 20 20 20 20 20 65 78 65 63 73 28 29 2e 77 69 74       execs().wit
6690: 68 5f 73 74 61 74 75 73 28 30 29 29 3b 0a 7d 0a  h_status(0));.}.
66a0: 0a 23 5b 74 65 73 74 5d 0a 66 6e 20 72 65 6c 65  .#[test].fn rele
66b0: 61 73 65 5f 77 69 74 68 5f 62 75 69 6c 64 5f 73  ase_with_build_s
66c0: 63 72 69 70 74 28 29 20 7b 0a 20 20 20 20 6c 65  cript() {.    le
66d0: 74 20 70 20 3d 20 70 72 6f 6a 65 63 74 28 22 66  t p = project("f
66e0: 6f 6f 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69  oo").        .fi
66f0: 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c  le("Cargo.toml",
6700: 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20   r#".           
6710: 20 5b 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20   [project].     
6720: 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 66         name = "f
6730: 6f 6f 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  oo".            
6740: 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30  version = "0.5.0
6750: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 75  ".            au
6760: 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20  thors = [].     
6770: 20 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22         build = "
6780: 62 75 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20  build.rs".      
6790: 20 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66    "#).        .f
67a0: 69 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72 73 22  ile("src/lib.rs"
67b0: 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66  , "").        .f
67c0: 69 6c 65 28 22 62 75 69 6c 64 2e 72 73 22 2c 20  ile("build.rs", 
67d0: 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  r#".            
67e0: 66 6e 20 6d 61 69 6e 28 29 20 7b 7d 0a 20 20 20  fn main() {}.   
67f0: 20 20 20 20 20 22 23 29 3b 0a 0a 20 20 20 20 61       "#);..    a
6800: 73 73 65 72 74 5f 74 68 61 74 28 70 2e 63 61 72  ssert_that(p.car
6810: 67 6f 5f 70 72 6f 63 65 73 73 28 22 62 75 69 6c  go_process("buil
6820: 64 22 29 2e 61 72 67 28 22 2d 76 22 29 2e 61 72  d").arg("-v").ar
6830: 67 28 22 2d 2d 72 65 6c 65 61 73 65 22 29 2c 0a  g("--release"),.
6840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6850: 65 78 65 63 73 28 29 2e 77 69 74 68 5f 73 74 61  execs().with_sta
6860: 74 75 73 28 30 29 29 3b 0a 7d 0a 0a 23 5b 74 65  tus(0));.}..#[te
6870: 73 74 5d 0a 66 6e 20 62 75 69 6c 64 5f 73 63 72  st].fn build_scr
6880: 69 70 74 5f 6f 6e 6c 79 28 29 20 7b 0a 20 20 20  ipt_only() {.   
6890: 20 6c 65 74 20 70 20 3d 20 70 72 6f 6a 65 63 74   let p = project
68a0: 28 22 66 6f 6f 22 29 0a 20 20 20 20 20 20 20 20  ("foo").        
68b0: 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d  .file("Cargo.tom
68c0: 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20  l", r#".        
68d0: 20 20 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d 0a        [project].
68e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61                na
68f0: 6d 65 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20  me = "foo".     
6900: 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e           version
6910: 20 3d 20 22 30 2e 30 2e 30 22 0a 20 20 20 20 20   = "0.0.0".     
6920: 20 20 20 20 20 20 20 20 20 61 75 74 68 6f 72 73           authors
6930: 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20 20 20   = [].          
6940: 20 20 20 20 62 75 69 6c 64 20 3d 20 22 62 75 69      build = "bui
6950: 6c 64 2e 72 73 22 0a 20 20 20 20 20 20 20 20 22  ld.rs".        "
6960: 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  #).        .file
6970: 28 22 62 75 69 6c 64 2e 72 73 22 2c 20 72 23 22  ("build.rs", r#"
6980: 66 6e 20 6d 61 69 6e 28 29 20 7b 7d 22 23 29 3b  fn main() {}"#);
6990: 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68 61 74  .    assert_that
69a0: 28 70 2e 63 61 72 67 6f 5f 70 72 6f 63 65 73 73  (p.cargo_process
69b0: 28 22 62 75 69 6c 64 22 29 2e 61 72 67 28 22 2d  ("build").arg("-
69c0: 76 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  v"),.           
69d0: 20 20 20 20 20 65 78 65 63 73 28 29 2e 77 69 74       execs().wit
69e0: 68 5f 73 74 61 74 75 73 28 31 30 31 29 0a 20 20  h_status(101).  
69f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a00: 20 20 20 20 20 2e 77 69 74 68 5f 73 74 64 65 72       .with_stder
6a10: 72 28 22 5c 0a 5b 45 52 52 4f 52 5d 20 66 61 69  r("\.[ERROR] fai
6a20: 6c 65 64 20 74 6f 20 70 61 72 73 65 20 6d 61 6e  led to parse man
6a30: 69 66 65 73 74 20 61 74 20 60 5b 2e 2e 5d 60 0a  ifest at `[..]`.
6a40: 0a 43 61 75 73 65 64 20 62 79 3a 0a 20 20 6e 6f  .Caused by:.  no
6a50: 20 74 61 72 67 65 74 73 20 73 70 65 63 69 66 69   targets specifi
6a60: 65 64 20 69 6e 20 74 68 65 20 6d 61 6e 69 66 65  ed in the manife
6a70: 73 74 0a 20 20 65 69 74 68 65 72 20 73 72 63 2f  st.  either src/
6a80: 6c 69 62 2e 72 73 2c 20 73 72 63 2f 6d 61 69 6e  lib.rs, src/main
6a90: 2e 72 73 2c 20 61 20 5b 6c 69 62 5d 20 73 65 63  .rs, a [lib] sec
6aa0: 74 69 6f 6e 2c 20 6f 72 20 5b 5b 62 69 6e 5d 5d  tion, or [[bin]]
6ab0: 20 73 65 63 74 69 6f 6e 20 6d 75 73 74 20 62 65   section must be
6ac0: 20 70 72 65 73 65 6e 74 22 29 29 3b 0a 7d 0a 0a   present"));.}..
6ad0: 23 5b 74 65 73 74 5d 0a 66 6e 20 73 68 61 72 65  #[test].fn share
6ae0: 64 5f 64 65 70 5f 77 69 74 68 5f 61 5f 62 75 69  d_dep_with_a_bui
6af0: 6c 64 5f 73 63 72 69 70 74 28 29 20 7b 0a 20 20  ld_script() {.  
6b00: 20 20 6c 65 74 20 70 20 3d 20 70 72 6f 6a 65 63    let p = projec
6b10: 74 28 22 66 6f 6f 22 29 0a 20 20 20 20 20 20 20  t("foo").       
6b20: 20 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f   .file("Cargo.to
6b30: 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20  ml", r#".       
6b40: 20 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 20       [project]. 
6b50: 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20             name 
6b60: 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20 20 20 20  = "foo".        
6b70: 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30      version = "0
6b80: 2e 35 2e 30 22 0a 20 20 20 20 20 20 20 20 20 20  .5.0".          
6b90: 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20    authors = []. 
6ba0: 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64             build
6bb0: 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 0a 20   = "build.rs".. 
6bc0: 20 20 20 20 20 20 20 20 20 20 20 5b 64 65 70 65             [depe
6bd0: 6e 64 65 6e 63 69 65 73 2e 61 5d 0a 20 20 20 20  ndencies.a].    
6be0: 20 20 20 20 20 20 20 20 70 61 74 68 20 3d 20 22          path = "
6bf0: 61 22 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  a"..            
6c00: 5b 62 75 69 6c 64 2d 64 65 70 65 6e 64 65 6e 63  [build-dependenc
6c10: 69 65 73 2e 62 5d 0a 20 20 20 20 20 20 20 20 20  ies.b].         
6c20: 20 20 20 70 61 74 68 20 3d 20 22 62 22 0a 20 20     path = "b".  
6c30: 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20        "#).      
6c40: 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6c 69 62    .file("src/lib
6c50: 2e 72 73 22 2c 20 22 22 29 0a 20 20 20 20 20 20  .rs", "").      
6c60: 20 20 2e 66 69 6c 65 28 22 62 75 69 6c 64 2e 72    .file("build.r
6c70: 73 22 2c 20 22 66 6e 20 6d 61 69 6e 28 29 20 7b  s", "fn main() {
6c80: 7d 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  }").        .fil
6c90: 65 28 22 61 2f 43 61 72 67 6f 2e 74 6f 6d 6c 22  e("a/Cargo.toml"
6ca0: 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  , r#".          
6cb0: 20 20 5b 70 61 63 6b 61 67 65 5d 0a 20 20 20 20    [package].    
6cc0: 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22          name = "
6cd0: 61 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 76  a".            v
6ce0: 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22  ersion = "0.5.0"
6cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74  .            aut
6d00: 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20  hors = [].      
6d10: 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22 62        build = "b
6d20: 75 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20 20  uild.rs".       
6d30: 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69   "#).        .fi
6d40: 6c 65 28 22 61 2f 62 75 69 6c 64 2e 72 73 22 2c  le("a/build.rs",
6d50: 20 22 66 6e 20 6d 61 69 6e 28 29 20 7b 7d 22 29   "fn main() {}")
6d60: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
6d70: 61 2f 73 72 63 2f 6c 69 62 2e 72 73 22 2c 20 22  a/src/lib.rs", "
6d80: 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  ").        .file
6d90: 28 22 62 2f 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c  ("b/Cargo.toml",
6da0: 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20   r#".           
6db0: 20 5b 70 61 63 6b 61 67 65 5d 0a 20 20 20 20 20   [package].     
6dc0: 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 62         name = "b
6dd0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 65  ".            ve
6de0: 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a  rsion = "0.5.0".
6df0: 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68              auth
6e00: 6f 72 73 20 3d 20 5b 5d 0a 0a 20 20 20 20 20 20  ors = []..      
6e10: 20 20 20 20 20 20 5b 64 65 70 65 6e 64 65 6e 63        [dependenc
6e20: 69 65 73 2e 61 5d 0a 20 20 20 20 20 20 20 20 20  ies.a].         
6e30: 20 20 20 70 61 74 68 20 3d 20 22 2e 2e 2f 61 22     path = "../a"
6e40: 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20  .        "#).   
6e50: 20 20 20 20 20 2e 66 69 6c 65 28 22 62 2f 73 72       .file("b/sr
6e60: 63 2f 6c 69 62 2e 72 73 22 2c 20 22 22 29 3b 0a  c/lib.rs", "");.
6e70: 20 20 20 20 61 73 73 65 72 74 5f 74 68 61 74 28      assert_that(
6e80: 70 2e 63 61 72 67 6f 5f 70 72 6f 63 65 73 73 28  p.cargo_process(
6e90: 22 62 75 69 6c 64 22 29 2e 61 72 67 28 22 2d 76  "build").arg("-v
6ea0: 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  "),.            
6eb0: 20 20 20 20 65 78 65 63 73 28 29 2e 77 69 74 68      execs().with
6ec0: 5f 73 74 61 74 75 73 28 30 29 29 3b 0a 7d 0a 0a  _status(0));.}..
6ed0: 23 5b 74 65 73 74 5d 0a 66 6e 20 74 72 61 6e 73  #[test].fn trans
6ee0: 69 74 69 76 65 5f 64 65 70 5f 68 6f 73 74 28 29  itive_dep_host()
6ef0: 20 7b 0a 20 20 20 20 6c 65 74 20 70 20 3d 20 70   {.    let p = p
6f00: 72 6f 6a 65 63 74 28 22 66 6f 6f 22 29 0a 20 20  roject("foo").  
6f10: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 43 61 72        .file("Car
6f20: 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20  go.toml", r#".  
6f30: 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65            [proje
6f40: 63 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ct].            
6f50: 6e 61 6d 65 20 3d 20 22 66 6f 6f 22 0a 20 20 20  name = "foo".   
6f60: 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e           version
6f70: 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20   = "0.5.0".     
6f80: 20 20 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d         authors =
6f90: 20 5b 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20   [].            
6fa0: 62 75 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72  build = "build.r
6fb0: 73 22 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  s"..            
6fc0: 5b 62 75 69 6c 64 2d 64 65 70 65 6e 64 65 6e 63  [build-dependenc
6fd0: 69 65 73 2e 62 5d 0a 20 20 20 20 20 20 20 20 20  ies.b].         
6fe0: 20 20 20 70 61 74 68 20 3d 20 22 62 22 0a 20 20     path = "b".  
6ff0: 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20        "#).      
7000: 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6c 69 62    .file("src/lib
7010: 2e 72 73 22 2c 20 22 22 29 0a 20 20 20 20 20 20  .rs", "").      
7020: 20 20 2e 66 69 6c 65 28 22 62 75 69 6c 64 2e 72    .file("build.r
7030: 73 22 2c 20 22 66 6e 20 6d 61 69 6e 28 29 20 7b  s", "fn main() {
7040: 7d 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  }").        .fil
7050: 65 28 22 61 2f 43 61 72 67 6f 2e 74 6f 6d 6c 22  e("a/Cargo.toml"
7060: 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  , r#".          
7070: 20 20 5b 70 61 63 6b 61 67 65 5d 0a 20 20 20 20    [package].    
7080: 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22          name = "
7090: 61 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 76  a".            v
70a0: 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22  ersion = "0.5.0"
70b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74  .            aut
70c0: 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20  hors = [].      
70d0: 20 20 20 20 20 20 6c 69 6e 6b 73 20 3d 20 22 66        links = "f
70e0: 6f 6f 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  oo".            
70f0: 62 75 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72  build = "build.r
7100: 73 22 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20  s".        "#). 
7110: 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 61 2f         .file("a/
7120: 62 75 69 6c 64 2e 72 73 22 2c 20 22 66 6e 20 6d  build.rs", "fn m
7130: 61 69 6e 28 29 20 7b 7d 22 29 0a 20 20 20 20 20  ain() {}").     
7140: 20 20 20 2e 66 69 6c 65 28 22 61 2f 73 72 63 2f     .file("a/src/
7150: 6c 69 62 2e 72 73 22 2c 20 22 22 29 0a 20 20 20  lib.rs", "").   
7160: 20 20 20 20 20 2e 66 69 6c 65 28 22 62 2f 43 61       .file("b/Ca
7170: 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20  rgo.toml", r#". 
7180: 20 20 20 20 20 20 20 20 20 20 20 5b 70 61 63 6b             [pack
7190: 61 67 65 5d 0a 20 20 20 20 20 20 20 20 20 20 20  age].           
71a0: 20 6e 61 6d 65 20 3d 20 22 62 22 0a 20 20 20 20   name = "b".    
71b0: 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20          version 
71c0: 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20 20  = "0.5.0".      
71d0: 20 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20        authors = 
71e0: 5b 5d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  []..            
71f0: 5b 6c 69 62 5d 0a 20 20 20 20 20 20 20 20 20 20  [lib].          
7200: 20 20 6e 61 6d 65 20 3d 20 22 62 22 0a 20 20 20    name = "b".   
7210: 20 20 20 20 20 20 20 20 20 70 6c 75 67 69 6e 20           plugin 
7220: 3d 20 74 72 75 65 0a 0a 20 20 20 20 20 20 20 20  = true..        
7230: 20 20 20 20 5b 64 65 70 65 6e 64 65 6e 63 69 65      [dependencie
7240: 73 2e 61 5d 0a 20 20 20 20 20 20 20 20 20 20 20  s.a].           
7250: 20 70 61 74 68 20 3d 20 22 2e 2e 2f 61 22 0a 20   path = "../a". 
7260: 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20         "#).     
7270: 20 20 20 2e 66 69 6c 65 28 22 62 2f 73 72 63 2f     .file("b/src/
7280: 6c 69 62 2e 72 73 22 2c 20 22 22 29 3b 0a 20 20  lib.rs", "");.  
7290: 20 20 61 73 73 65 72 74 5f 74 68 61 74 28 70 2e    assert_that(p.
72a0: 63 61 72 67 6f 5f 70 72 6f 63 65 73 73 28 22 62  cargo_process("b
72b0: 75 69 6c 64 22 29 2c 0a 20 20 20 20 20 20 20 20  uild"),.        
72c0: 20 20 20 20 20 20 20 20 65 78 65 63 73 28 29 2e          execs().
72d0: 77 69 74 68 5f 73 74 61 74 75 73 28 30 29 29 3b  with_status(0));
72e0: 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66 6e 20 74  .}..#[test].fn t
72f0: 65 73 74 5f 61 5f 6c 69 62 5f 77 69 74 68 5f 61  est_a_lib_with_a
7300: 5f 62 75 69 6c 64 5f 63 6f 6d 6d 61 6e 64 28 29  _build_command()
7310: 20 7b 0a 20 20 20 20 6c 65 74 20 70 20 3d 20 70   {.    let p = p
7320: 72 6f 6a 65 63 74 28 22 66 6f 6f 22 29 0a 20 20  roject("foo").  
7330: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 43 61 72        .file("Car
7340: 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20  go.toml", r#".  
7350: 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65            [proje
7360: 63 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ct].            
7370: 6e 61 6d 65 20 3d 20 22 66 6f 6f 22 0a 20 20 20  name = "foo".   
7380: 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e           version
7390: 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20   = "0.5.0".     
73a0: 20 20 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d         authors =
73b0: 20 5b 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20   [].            
73c0: 62 75 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72  build = "build.r
73d0: 73 22 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20  s".        "#). 
73e0: 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 73 72         .file("sr
73f0: 63 2f 6c 69 62 2e 72 73 22 2c 20 72 23 22 0a 20  c/lib.rs", r#". 
7400: 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 6c 75             inclu
7410: 64 65 21 28 63 6f 6e 63 61 74 21 28 65 6e 76 21  de!(concat!(env!
7420: 28 22 4f 55 54 5f 44 49 52 22 29 2c 20 22 2f 66  ("OUT_DIR"), "/f
7430: 6f 6f 2e 72 73 22 29 29 3b 0a 0a 20 20 20 20 20  oo.rs"));..     
7440: 20 20 20 20 20 20 20 2f 2f 2f 20 60 60 60 0a 20         /// ```. 
7450: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 66             /// f
7460: 6f 6f 3a 3a 62 61 72 28 29 3b 0a 20 20 20 20 20  oo::bar();.     
7470: 20 20 20 20 20 20 20 2f 2f 2f 20 60 60 60 0a 20         /// ```. 
7480: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 20 66             pub f
7490: 6e 20 62 61 72 28 29 20 7b 0a 20 20 20 20 20 20  n bar() {.      
74a0: 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
74b0: 5f 65 71 21 28 66 6f 6f 28 29 2c 20 31 29 3b 0a  _eq!(foo(), 1);.
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
74d0: 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20        "#).      
74e0: 20 20 2e 66 69 6c 65 28 22 62 75 69 6c 64 2e 72    .file("build.r
74f0: 73 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20  s", r#".        
7500: 20 20 20 20 75 73 65 20 73 74 64 3a 3a 65 6e 76      use std::env
7510: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ;.            us
7520: 65 20 73 74 64 3a 3a 69 6f 3a 3a 70 72 65 6c 75  e std::io::prelu
7530: 64 65 3a 3a 2a 3b 0a 20 20 20 20 20 20 20 20 20  de::*;.         
7540: 20 20 20 75 73 65 20 73 74 64 3a 3a 66 73 3a 3a     use std::fs::
7550: 46 69 6c 65 3b 0a 20 20 20 20 20 20 20 20 20 20  File;.          
7560: 20 20 75 73 65 20 73 74 64 3a 3a 70 61 74 68 3a    use std::path:
7570: 3a 50 61 74 68 42 75 66 3b 0a 0a 20 20 20 20 20  :PathBuf;..     
7580: 20 20 20 20 20 20 20 66 6e 20 6d 61 69 6e 28 29         fn main()
7590: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
75a0: 20 20 20 6c 65 74 20 6f 75 74 20 3d 20 50 61 74     let out = Pat
75b0: 68 42 75 66 3a 3a 66 72 6f 6d 28 65 6e 76 3a 3a  hBuf::from(env::
75c0: 76 61 72 28 22 4f 55 54 5f 44 49 52 22 29 2e 75  var("OUT_DIR").u
75d0: 6e 77 72 61 70 28 29 29 3b 0a 20 20 20 20 20 20  nwrap());.      
75e0: 20 20 20 20 20 20 20 20 20 20 46 69 6c 65 3a 3a            File::
75f0: 63 72 65 61 74 65 28 6f 75 74 2e 6a 6f 69 6e 28  create(out.join(
7600: 22 66 6f 6f 2e 72 73 22 29 29 2e 75 6e 77 72 61  "foo.rs")).unwra
7610: 70 28 29 2e 77 72 69 74 65 5f 61 6c 6c 28 62 22  p().write_all(b"
7620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7630: 20 20 20 20 20 66 6e 20 66 6f 6f 28 29 20 2d 3e       fn foo() ->
7640: 20 69 33 32 20 7b 20 31 20 7d 0a 20 20 20 20 20   i32 { 1 }.     
7650: 20 20 20 20 20 20 20 20 20 20 20 22 29 2e 75 6e             ").un
7660: 77 72 61 70 28 29 3b 0a 20 20 20 20 20 20 20 20  wrap();.        
7670: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 22 23      }.        "#
7680: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68  );.    assert_th
7690: 61 74 28 70 2e 63 61 72 67 6f 5f 70 72 6f 63 65  at(p.cargo_proce
76a0: 73 73 28 22 74 65 73 74 22 29 2c 0a 20 20 20 20  ss("test"),.    
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63              exec
76c0: 73 28 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28  s().with_status(
76d0: 30 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a  0));.}..#[test].
76e0: 66 6e 20 74 65 73 74 5f 64 65 76 5f 64 65 70 5f  fn test_dev_dep_
76f0: 62 75 69 6c 64 5f 73 63 72 69 70 74 28 29 20 7b  build_script() {
7700: 0a 20 20 20 20 6c 65 74 20 70 20 3d 20 70 72 6f  .    let p = pro
7710: 6a 65 63 74 28 22 66 6f 6f 22 29 0a 20 20 20 20  ject("foo").    
7720: 20 20 20 20 2e 66 69 6c 65 28 22 43 61 72 67 6f      .file("Cargo
7730: 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20  .toml", r#".    
7740: 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65 63 74          [project
7750: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61  ].            na
7760: 6d 65 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20  me = "foo".     
7770: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d         version =
7780: 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20 20 20   "0.5.0".       
7790: 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b       authors = [
77a0: 5d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ]..            [
77b0: 64 65 76 2d 64 65 70 65 6e 64 65 6e 63 69 65 73  dev-dependencies
77c0: 2e 61 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  .a].            
77d0: 70 61 74 68 20 3d 20 22 61 22 0a 20 20 20 20 20  path = "a".     
77e0: 20 20 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e     "#).        .
77f0: 66 69 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72 73  file("src/lib.rs
7800: 22 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e  ", "").        .
7810: 66 69 6c 65 28 22 61 2f 43 61 72 67 6f 2e 74 6f  file("a/Cargo.to
7820: 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20  ml", r#".       
7830: 20 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 20       [project]. 
7840: 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20             name 
7850: 3d 20 22 61 22 0a 20 20 20 20 20 20 20 20 20 20  = "a".          
7860: 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35    version = "0.5
7870: 2e 30 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  .0".            
7880: 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20  authors = [].   
7890: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 20 3d           build =
78a0: 20 22 62 75 69 6c 64 2e 72 73 22 0a 20 20 20 20   "build.rs".    
78b0: 20 20 20 20 22 23 29 0a 20 20 20 20 20 20 20 20      "#).        
78c0: 2e 66 69 6c 65 28 22 61 2f 62 75 69 6c 64 2e 72  .file("a/build.r
78d0: 73 22 2c 20 22 66 6e 20 6d 61 69 6e 28 29 20 7b  s", "fn main() {
78e0: 7d 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  }").        .fil
78f0: 65 28 22 61 2f 73 72 63 2f 6c 69 62 2e 72 73 22  e("a/src/lib.rs"
7900: 2c 20 22 22 29 3b 0a 0a 20 20 20 20 61 73 73 65  , "");..    asse
7910: 72 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f  rt_that(p.cargo_
7920: 70 72 6f 63 65 73 73 28 22 74 65 73 74 22 29 2c  process("test"),
7930: 20 65 78 65 63 73 28 29 2e 77 69 74 68 5f 73 74   execs().with_st
7940: 61 74 75 73 28 30 29 29 3b 0a 7d 0a 0a 23 5b 74  atus(0));.}..#[t
7950: 65 73 74 5d 0a 66 6e 20 62 75 69 6c 64 5f 73 63  est].fn build_sc
7960: 72 69 70 74 5f 77 69 74 68 5f 64 79 6e 61 6d 69  ript_with_dynami
7970: 63 5f 6e 61 74 69 76 65 5f 64 65 70 65 6e 64 65  c_native_depende
7980: 6e 63 79 28 29 20 7b 0a 0a 20 20 20 20 6c 65 74  ncy() {..    let
7990: 20 77 6f 72 6b 73 70 61 63 65 20 3d 20 70 72 6f   workspace = pro
79a0: 6a 65 63 74 28 22 77 73 22 29 0a 20 20 20 20 20  ject("ws").     
79b0: 20 20 20 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e     .file("Cargo.
79c0: 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20  toml", r#".     
79d0: 20 20 20 20 20 20 20 5b 77 6f 72 6b 73 70 61 63         [workspac
79e0: 65 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d  e].            m
79f0: 65 6d 62 65 72 73 20 3d 20 5b 22 62 75 69 6c 64  embers = ["build
7a00: 65 72 22 2c 20 22 66 6f 6f 22 5d 0a 20 20 20 20  er", "foo"].    
7a10: 20 20 20 20 22 23 29 3b 0a 20 20 20 20 77 6f 72      "#);.    wor
7a20: 6b 73 70 61 63 65 2e 62 75 69 6c 64 28 29 3b 0a  kspace.build();.
7a30: 0a 20 20 20 20 6c 65 74 20 62 75 69 6c 64 20 3d  .    let build =
7a40: 20 70 72 6f 6a 65 63 74 28 22 77 73 2f 62 75 69   project("ws/bui
7a50: 6c 64 65 72 22 29 0a 20 20 20 20 20 20 20 20 2e  lder").        .
7a60: 66 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c  file("Cargo.toml
7a70: 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20  ", r#".         
7a80: 20 20 20 5b 70 61 63 6b 61 67 65 5d 0a 20 20 20     [package].   
7a90: 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20           name = 
7aa0: 22 62 75 69 6c 64 65 72 22 0a 20 20 20 20 20 20  "builder".      
7ab0: 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20        version = 
7ac0: 22 30 2e 30 2e 31 22 0a 20 20 20 20 20 20 20 20  "0.0.1".        
7ad0: 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d      authors = []
7ae0: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c  ..            [l
7af0: 69 62 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ib].            
7b00: 6e 61 6d 65 20 3d 20 22 62 75 69 6c 64 65 72 22  name = "builder"
7b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 72 61  .            cra
7b20: 74 65 2d 74 79 70 65 20 3d 20 5b 22 64 79 6c 69  te-type = ["dyli
7b30: 62 22 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  b"].            
7b40: 70 6c 75 67 69 6e 20 3d 20 74 72 75 65 0a 20 20  plugin = true.  
7b50: 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20        "#).      
7b60: 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6c 69 62    .file("src/lib
7b70: 2e 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20 20  .rs", r#".      
7b80: 20 20 20 20 20 20 23 5b 6e 6f 5f 6d 61 6e 67 6c        #[no_mangl
7b90: 65 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  e].            p
7ba0: 75 62 20 65 78 74 65 72 6e 20 66 6e 20 66 6f 6f  ub extern fn foo
7bb0: 28 29 20 7b 7d 0a 20 20 20 20 20 20 20 20 22 23  () {}.        "#
7bc0: 29 3b 0a 20 20 20 20 62 75 69 6c 64 2e 62 75 69  );.    build.bui
7bd0: 6c 64 28 29 3b 0a 0a 20 20 20 20 6c 65 74 20 66  ld();..    let f
7be0: 6f 6f 20 3d 20 70 72 6f 6a 65 63 74 28 22 77 73  oo = project("ws
7bf0: 2f 66 6f 6f 22 29 0a 20 20 20 20 20 20 20 20 2e  /foo").        .
7c00: 66 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c  file("Cargo.toml
7c10: 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20  ", r#".         
7c20: 20 20 20 5b 70 61 63 6b 61 67 65 5d 0a 20 20 20     [package].   
7c30: 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20           name = 
7c40: 22 66 6f 6f 22 0a 20 20 20 20 20 20 20 20 20 20  "foo".          
7c50: 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 30    version = "0.0
7c60: 2e 31 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  .1".            
7c70: 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20  authors = [].   
7c80: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 20 3d           build =
7c90: 20 22 62 75 69 6c 64 2e 72 73 22 0a 0a 20 20 20   "build.rs"..   
7ca0: 20 20 20 20 20 20 20 20 20 5b 62 75 69 6c 64 2d           [build-
7cb0: 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 62 61 72  dependencies.bar
7cc0: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61  ].            pa
7cd0: 74 68 20 3d 20 22 62 61 72 22 0a 20 20 20 20 20  th = "bar".     
7ce0: 20 20 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e     "#).        .
7cf0: 66 69 6c 65 28 22 62 75 69 6c 64 2e 72 73 22 2c  file("build.rs",
7d00: 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20   r#".           
7d10: 20 65 78 74 65 72 6e 20 63 72 61 74 65 20 62 61   extern crate ba
7d20: 72 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  r;.            f
7d30: 6e 20 6d 61 69 6e 28 29 20 7b 20 62 61 72 3a 3a  n main() { bar::
7d40: 62 61 72 28 29 20 7d 0a 20 20 20 20 20 20 20 20  bar() }.        
7d50: 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  "#).        .fil
7d60: 65 28 22 73 72 63 2f 6c 69 62 2e 72 73 22 2c 20  e("src/lib.rs", 
7d70: 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  "").        .fil
7d80: 65 28 22 62 61 72 2f 43 61 72 67 6f 2e 74 6f 6d  e("bar/Cargo.tom
7d90: 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20  l", r#".        
7da0: 20 20 20 20 5b 70 61 63 6b 61 67 65 5d 0a 20 20      [package].  
7db0: 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d            name =
7dc0: 20 22 62 61 72 22 0a 20 20 20 20 20 20 20 20 20   "bar".         
7dd0: 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e     version = "0.
7de0: 30 2e 31 22 0a 20 20 20 20 20 20 20 20 20 20 20  0.1".           
7df0: 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20   authors = [].  
7e00: 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 20            build 
7e10: 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 20 20 20  = "build.rs".   
7e20: 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20 20       "#).       
7e30: 20 2e 66 69 6c 65 28 22 62 61 72 2f 62 75 69 6c   .file("bar/buil
7e40: 64 2e 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20  d.rs", r#".     
7e50: 20 20 20 20 20 20 20 75 73 65 20 73 74 64 3a 3a         use std::
7e60: 65 6e 76 3b 0a 20 20 20 20 20 20 20 20 20 20 20  env;.           
7e70: 20 75 73 65 20 73 74 64 3a 3a 70 61 74 68 3a 3a   use std::path::
7e80: 50 61 74 68 42 75 66 3b 0a 0a 20 20 20 20 20 20  PathBuf;..      
7e90: 20 20 20 20 20 20 66 6e 20 6d 61 69 6e 28 29 20        fn main() 
7ea0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
7eb0: 20 20 6c 65 74 20 73 72 63 20 3d 20 50 61 74 68    let src = Path
7ec0: 42 75 66 3a 3a 66 72 6f 6d 28 65 6e 76 3a 3a 76  Buf::from(env::v
7ed0: 61 72 28 22 53 52 43 22 29 2e 75 6e 77 72 61 70  ar("SRC").unwrap
7ee0: 28 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ());.           
7ef0: 20 20 20 20 20 70 72 69 6e 74 6c 6e 21 28 22 63       println!("c
7f00: 61 72 67 6f 3a 72 75 73 74 63 2d 6c 69 6e 6b 2d  argo:rustc-link-
7f10: 73 65 61 72 63 68 3d 6e 61 74 69 76 65 3d 7b 7d  search=native={}
7f20: 2f 74 61 72 67 65 74 2f 64 65 62 75 67 2f 64 65  /target/debug/de
7f30: 70 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ps",.           
7f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 72                sr
7f50: 63 2e 64 69 73 70 6c 61 79 28 29 29 3b 0a 20 20  c.display());.  
7f60: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
7f70: 20 20 20 20 22 23 29 0a 20 20 20 20 20 20 20 20      "#).        
7f80: 2e 66 69 6c 65 28 22 62 61 72 2f 73 72 63 2f 6c  .file("bar/src/l
7f90: 69 62 2e 72 73 22 2c 20 72 23 22 0a 20 20 20 20  ib.rs", r#".    
7fa0: 20 20 20 20 20 20 20 20 70 75 62 20 66 6e 20 62          pub fn b
7fb0: 61 72 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20  ar() {.         
7fc0: 20 20 20 20 20 20 20 23 5b 63 66 67 5f 61 74 74         #[cfg_att
7fd0: 72 28 6e 6f 74 28 74 61 72 67 65 74 5f 65 6e 76  r(not(target_env
7fe0: 20 3d 20 22 6d 73 76 63 22 29 2c 20 6c 69 6e 6b   = "msvc"), link
7ff0: 28 6e 61 6d 65 20 3d 20 22 62 75 69 6c 64 65 72  (name = "builder
8000: 22 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20  "))].           
8010: 20 20 20 20 20 23 5b 63 66 67 5f 61 74 74 72 28       #[cfg_attr(
8020: 74 61 72 67 65 74 5f 65 6e 76 20 3d 20 22 6d 73  target_env = "ms
8030: 76 63 22 2c 20 6c 69 6e 6b 28 6e 61 6d 65 20 3d  vc", link(name =
8040: 20 22 62 75 69 6c 64 65 72 2e 64 6c 6c 22 29 29   "builder.dll"))
8050: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
8060: 20 20 65 78 74 65 72 6e 20 7b 20 66 6e 20 66 6f    extern { fn fo
8070: 6f 28 29 3b 20 7d 0a 20 20 20 20 20 20 20 20 20  o(); }.         
8080: 20 20 20 20 20 20 20 75 6e 73 61 66 65 20 7b 20         unsafe { 
8090: 66 6f 6f 28 29 20 7d 0a 20 20 20 20 20 20 20 20  foo() }.        
80a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 22 23      }.        "#
80b0: 29 3b 0a 20 20 20 20 66 6f 6f 2e 62 75 69 6c 64  );.    foo.build
80c0: 28 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74 5f  ();..    assert_
80d0: 74 68 61 74 28 62 75 69 6c 64 2e 63 61 72 67 6f  that(build.cargo
80e0: 28 22 62 75 69 6c 64 22 29 2e 61 72 67 28 22 2d  ("build").arg("-
80f0: 76 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  v").            
8100: 20 20 20 20 2e 65 6e 76 28 22 52 55 53 54 5f 4c      .env("RUST_L
8110: 4f 47 22 2c 20 22 63 61 72 67 6f 3a 3a 6f 70 73  OG", "cargo::ops
8120: 3a 3a 63 61 72 67 6f 5f 72 75 73 74 63 22 29 2c  ::cargo_rustc"),
8130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8140: 20 65 78 65 63 73 28 29 2e 77 69 74 68 5f 73 74   execs().with_st
8150: 61 74 75 73 28 30 29 29 3b 0a 0a 20 20 20 20 61  atus(0));..    a
8160: 73 73 65 72 74 5f 74 68 61 74 28 66 6f 6f 2e 63  ssert_that(foo.c
8170: 61 72 67 6f 28 22 62 75 69 6c 64 22 29 2e 61 72  argo("build").ar
8180: 67 28 22 2d 76 22 29 2e 65 6e 76 28 22 53 52 43  g("-v").env("SRC
8190: 22 2c 20 62 75 69 6c 64 2e 72 6f 6f 74 28 29 29  ", build.root())
81a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
81b0: 20 2e 65 6e 76 28 22 52 55 53 54 5f 4c 4f 47 22   .env("RUST_LOG"
81c0: 2c 20 22 63 61 72 67 6f 3a 3a 6f 70 73 3a 3a 63  , "cargo::ops::c
81d0: 61 72 67 6f 5f 72 75 73 74 63 22 29 2c 0a 20 20  argo_rustc"),.  
81e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78                ex
81f0: 65 63 73 28 29 2e 77 69 74 68 5f 73 74 61 74 75  ecs().with_statu
8200: 73 28 30 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74  s(0));.}..#[test
8210: 5d 0a 66 6e 20 70 72 6f 66 69 6c 65 5f 61 6e 64  ].fn profile_and
8220: 5f 6f 70 74 5f 6c 65 76 65 6c 5f 73 65 74 5f 63  _opt_level_set_c
8230: 6f 72 72 65 63 74 6c 79 28 29 20 7b 0a 20 20 20  orrectly() {.   
8240: 20 6c 65 74 20 62 75 69 6c 64 20 3d 20 70 72 6f   let build = pro
8250: 6a 65 63 74 28 22 62 75 69 6c 64 65 72 22 29 0a  ject("builder").
8260: 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 43          .file("C
8270: 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a  argo.toml", r#".
8280: 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 61 63              [pac
8290: 6b 61 67 65 5d 0a 20 20 20 20 20 20 20 20 20 20  kage].          
82a0: 20 20 6e 61 6d 65 20 3d 20 22 62 75 69 6c 64 65    name = "builde
82b0: 72 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 76  r".            v
82c0: 65 72 73 69 6f 6e 20 3d 20 22 30 2e 30 2e 31 22  ersion = "0.0.1"
82d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74  .            aut
82e0: 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20  hors = [].      
82f0: 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22 62        build = "b
8300: 75 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20 20  uild.rs".       
8310: 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69   "#).        .fi
8320: 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72 73 22 2c  le("src/lib.rs",
8330: 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69   "").        .fi
8340: 6c 65 28 22 62 75 69 6c 64 2e 72 73 22 2c 20 72  le("build.rs", r
8350: 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #".             
8360: 20 75 73 65 20 73 74 64 3a 3a 65 6e 76 3b 0a 0a   use std::env;..
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6e                fn
8380: 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20 20 20   main() {.      
8390: 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65              asse
83a0: 72 74 5f 65 71 21 28 65 6e 76 3a 3a 76 61 72 28  rt_eq!(env::var(
83b0: 22 4f 50 54 5f 4c 45 56 45 4c 22 29 2e 75 6e 77  "OPT_LEVEL").unw
83c0: 72 61 70 28 29 2c 20 22 33 22 29 3b 0a 20 20 20  rap(), "3");.   
83d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
83e0: 73 73 65 72 74 5f 65 71 21 28 65 6e 76 3a 3a 76  ssert_eq!(env::v
83f0: 61 72 28 22 50 52 4f 46 49 4c 45 22 29 2e 75 6e  ar("PROFILE").un
8400: 77 72 61 70 28 29 2c 20 22 72 65 6c 65 61 73 65  wrap(), "release
8410: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ");.            
8420: 20 20 20 20 20 20 61 73 73 65 72 74 5f 65 71 21        assert_eq!
8430: 28 65 6e 76 3a 3a 76 61 72 28 22 44 45 42 55 47  (env::var("DEBUG
8440: 22 29 2e 75 6e 77 72 61 70 28 29 2c 20 22 66 61  ").unwrap(), "fa
8450: 6c 73 65 22 29 3b 0a 20 20 20 20 20 20 20 20 20  lse");.         
8460: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 22       }.        "
8470: 23 29 3b 0a 20 20 20 20 61 73 73 65 72 74 5f 74  #);.    assert_t
8480: 68 61 74 28 62 75 69 6c 64 2e 63 61 72 67 6f 5f  hat(build.cargo_
8490: 70 72 6f 63 65 73 73 28 22 62 65 6e 63 68 22 29  process("bench")
84a0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
84b0: 20 20 65 78 65 63 73 28 29 2e 77 69 74 68 5f 73    execs().with_s
84c0: 74 61 74 75 73 28 30 29 29 3b 0a 7d 0a 0a 23 5b  tatus(0));.}..#[
84d0: 74 65 73 74 5d 0a 66 6e 20 62 75 69 6c 64 5f 73  test].fn build_s
84e0: 63 72 69 70 74 5f 77 69 74 68 5f 6c 74 6f 28 29  cript_with_lto()
84f0: 20 7b 0a 20 20 20 20 6c 65 74 20 62 75 69 6c 64   {.    let build
8500: 20 3d 20 70 72 6f 6a 65 63 74 28 22 62 75 69 6c   = project("buil
8510: 64 65 72 22 29 0a 20 20 20 20 20 20 20 20 2e 66  der").        .f
8520: 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22  ile("Cargo.toml"
8530: 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  , r#".          
8540: 20 20 5b 70 61 63 6b 61 67 65 5d 0a 20 20 20 20    [package].    
8550: 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22          name = "
8560: 62 75 69 6c 64 65 72 22 0a 20 20 20 20 20 20 20  builder".       
8570: 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22       version = "
8580: 30 2e 30 2e 31 22 0a 20 20 20 20 20 20 20 20 20  0.0.1".         
8590: 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a     authors = [].
85a0: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c              buil
85b0: 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 0a  d = "build.rs"..
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f              [pro
85d0: 66 69 6c 65 2e 64 65 76 5d 0a 20 20 20 20 20 20  file.dev].      
85e0: 20 20 20 20 20 20 6c 74 6f 20 3d 20 74 72 75 65        lto = true
85f0: 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20  .        "#).   
8600: 20 20 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f       .file("src/
8610: 6c 69 62 2e 72 73 22 2c 20 22 22 29 0a 20 20 20  lib.rs", "").   
8620: 20 20 20 20 20 2e 66 69 6c 65 28 22 62 75 69 6c       .file("buil
8630: 64 2e 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20  d.rs", r#".     
8640: 20 20 20 20 20 20 20 20 20 66 6e 20 6d 61 69 6e           fn main
8650: 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  () {.           
8660: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 22 23 29     }.        "#)
8670: 3b 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68 61  ;.    assert_tha
8680: 74 28 62 75 69 6c 64 2e 63 61 72 67 6f 5f 70 72  t(build.cargo_pr
8690: 6f 63 65 73 73 28 22 62 75 69 6c 64 22 29 2c 0a  ocess("build"),.
86a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86b0: 65 78 65 63 73 28 29 2e 77 69 74 68 5f 73 74 61  execs().with_sta
86c0: 74 75 73 28 30 29 29 3b 0a 7d 0a 0a 23 5b 74 65  tus(0));.}..#[te
86d0: 73 74 5d 0a 66 6e 20 74 65 73 74 5f 64 75 70 6c  st].fn test_dupl
86e0: 69 63 61 74 65 5f 64 65 70 73 28 29 20 7b 0a 20  icate_deps() {. 
86f0: 20 20 20 6c 65 74 20 70 20 3d 20 70 72 6f 6a 65     let p = proje
8700: 63 74 28 22 66 6f 6f 22 29 0a 20 20 20 20 20 20  ct("foo").      
8710: 20 20 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e 74    .file("Cargo.t
8720: 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20  oml", r#".      
8730: 20 20 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d 0a        [project].
8740: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65              name
8750: 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20 20 20   = "foo".       
8760: 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22       version = "
8770: 30 2e 31 2e 30 22 0a 20 20 20 20 20 20 20 20 20  0.1.0".         
8780: 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a     authors = [].
8790: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c              buil
87a0: 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 0a  d = "build.rs"..
87b0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 64 65 70              [dep
87c0: 65 6e 64 65 6e 63 69 65 73 2e 62 61 72 5d 0a 20  endencies.bar]. 
87d0: 20 20 20 20 20 20 20 20 20 20 20 70 61 74 68 20             path 
87e0: 3d 20 22 62 61 72 22 0a 0a 20 20 20 20 20 20 20  = "bar"..       
87f0: 20 20 20 20 20 5b 62 75 69 6c 64 2d 64 65 70 65       [build-depe
8800: 6e 64 65 6e 63 69 65 73 2e 62 61 72 5d 0a 20 20  ndencies.bar].  
8810: 20 20 20 20 20 20 20 20 20 20 70 61 74 68 20 3d            path =
8820: 20 22 62 61 72 22 0a 20 20 20 20 20 20 20 20 22   "bar".        "
8830: 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  #).        .file
8840: 28 22 73 72 63 2f 6d 61 69 6e 2e 72 73 22 2c 20  ("src/main.rs", 
8850: 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  r#".            
8860: 65 78 74 65 72 6e 20 63 72 61 74 65 20 62 61 72  extern crate bar
8870: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6e  ;.            fn
8880: 20 6d 61 69 6e 28 29 20 7b 20 62 61 72 3a 3a 64   main() { bar::d
8890: 6f 5f 6e 6f 74 68 69 6e 67 28 29 20 7d 0a 20 20  o_nothing() }.  
88a0: 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20        "#).      
88b0: 20 20 2e 66 69 6c 65 28 22 62 75 69 6c 64 2e 72    .file("build.r
88c0: 73 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20  s", r#".        
88d0: 20 20 20 20 65 78 74 65 72 6e 20 63 72 61 74 65      extern crate
88e0: 20 62 61 72 3b 0a 20 20 20 20 20 20 20 20 20 20   bar;.          
88f0: 20 20 66 6e 20 6d 61 69 6e 28 29 20 7b 20 62 61    fn main() { ba
8900: 72 3a 3a 64 6f 5f 6e 6f 74 68 69 6e 67 28 29 20  r::do_nothing() 
8910: 7d 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20 20  }.        "#).  
8920: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 62 61 72        .file("bar
8930: 2f 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23  /Cargo.toml", r#
8940: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 70  ".            [p
8950: 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20 20 20  roject].        
8960: 20 20 20 20 6e 61 6d 65 20 3d 20 22 62 61 72 22      name = "bar"
8970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72  .            ver
8980: 73 69 6f 6e 20 3d 20 22 30 2e 31 2e 30 22 0a 20  sion = "0.1.0". 
8990: 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f             autho
89a0: 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20  rs = [].        
89b0: 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  "#).        .fil
89c0: 65 28 22 62 61 72 2f 73 72 63 2f 6c 69 62 2e 72  e("bar/src/lib.r
89d0: 73 22 2c 20 22 70 75 62 20 66 6e 20 64 6f 5f 6e  s", "pub fn do_n
89e0: 6f 74 68 69 6e 67 28 29 20 7b 7d 22 29 3b 0a 0a  othing() {}");..
89f0: 20 20 20 20 61 73 73 65 72 74 5f 74 68 61 74 28      assert_that(
8a00: 70 2e 63 61 72 67 6f 5f 70 72 6f 63 65 73 73 28  p.cargo_process(
8a10: 22 62 75 69 6c 64 22 29 2c 20 65 78 65 63 73 28  "build"), execs(
8a20: 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30 29  ).with_status(0)
8a30: 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66 6e  );.}..#[test].fn
8a40: 20 63 66 67 5f 66 65 65 64 62 61 63 6b 28 29 20   cfg_feedback() 
8a50: 7b 0a 20 20 20 20 6c 65 74 20 62 75 69 6c 64 20  {.    let build 
8a60: 3d 20 70 72 6f 6a 65 63 74 28 22 62 75 69 6c 64  = project("build
8a70: 65 72 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69  er").        .fi
8a80: 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c  le("Cargo.toml",
8a90: 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20   r#".           
8aa0: 20 5b 70 61 63 6b 61 67 65 5d 0a 20 20 20 20 20   [package].     
8ab0: 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 62         name = "b
8ac0: 75 69 6c 64 65 72 22 0a 20 20 20 20 20 20 20 20  uilder".        
8ad0: 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30      version = "0
8ae0: 2e 30 2e 31 22 0a 20 20 20 20 20 20 20 20 20 20  .0.1".          
8af0: 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20    authors = []. 
8b00: 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64             build
8b10: 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 20 20   = "build.rs".  
8b20: 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20        "#).      
8b30: 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6d 61 69    .file("src/mai
8b40: 6e 2e 72 73 22 2c 20 22 0a 20 20 20 20 20 20 20  n.rs", ".       
8b50: 20 20 20 20 20 23 5b 63 66 67 28 66 6f 6f 29 5d       #[cfg(foo)]
8b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6e 20  .            fn 
8b70: 6d 61 69 6e 28 29 20 7b 7d 0a 20 20 20 20 20 20  main() {}.      
8b80: 20 20 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69    ").        .fi
8b90: 6c 65 28 22 62 75 69 6c 64 2e 72 73 22 2c 20 72  le("build.rs", r
8ba0: 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  #".            f
8bb0: 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20 20  n main() {.     
8bc0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74             print
8bd0: 6c 6e 21 28 22 63 61 72 67 6f 3a 72 75 73 74 63  ln!("cargo:rustc
8be0: 2d 63 66 67 3d 66 6f 6f 22 29 3b 0a 20 20 20 20  -cfg=foo");.    
8bf0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
8c00: 20 20 22 23 29 3b 0a 20 20 20 20 61 73 73 65 72    "#);.    asser
8c10: 74 5f 74 68 61 74 28 62 75 69 6c 64 2e 63 61 72  t_that(build.car
8c20: 67 6f 5f 70 72 6f 63 65 73 73 28 22 62 75 69 6c  go_process("buil
8c30: 64 22 29 2e 61 72 67 28 22 2d 76 22 29 2c 0a 20  d").arg("-v"),. 
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
8c50: 78 65 63 73 28 29 2e 77 69 74 68 5f 73 74 61 74  xecs().with_stat
8c60: 75 73 28 30 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73  us(0));.}..#[tes
8c70: 74 5d 0a 66 6e 20 63 66 67 5f 6f 76 65 72 72 69  t].fn cfg_overri
8c80: 64 65 28 29 20 7b 0a 20 20 20 20 6c 65 74 20 74  de() {.    let t
8c90: 61 72 67 65 74 20 3d 20 72 75 73 74 63 5f 68 6f  arget = rustc_ho
8ca0: 73 74 28 29 3b 0a 0a 20 20 20 20 6c 65 74 20 70  st();..    let p
8cb0: 20 3d 20 70 72 6f 6a 65 63 74 28 22 66 6f 6f 22   = project("foo"
8cc0: 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28  ).        .file(
8cd0: 22 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23  "Cargo.toml", r#
8ce0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 70  ".            [p
8cf0: 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20 20 20  roject].        
8d00: 20 20 20 20 6e 61 6d 65 20 3d 20 22 66 6f 6f 22      name = "foo"
8d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72  .            ver
8d20: 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20  sion = "0.5.0". 
8d30: 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f             autho
8d40: 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20  rs = [].        
8d50: 20 20 20 20 6c 69 6e 6b 73 20 3d 20 22 61 22 0a      links = "a".
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c              buil
8d70: 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 20  d = "build.rs". 
8d80: 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20         "#).     
8d90: 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6d 61     .file("src/ma
8da0: 69 6e 2e 72 73 22 2c 20 22 0a 20 20 20 20 20 20  in.rs", ".      
8db0: 20 20 20 20 20 20 23 5b 63 66 67 28 66 6f 6f 29        #[cfg(foo)
8dc0: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6e  ].            fn
8dd0: 20 6d 61 69 6e 28 29 20 7b 7d 0a 20 20 20 20 20   main() {}.     
8de0: 20 20 20 22 29 0a 20 20 20 20 20 20 20 20 2e 66     ").        .f
8df0: 69 6c 65 28 22 62 75 69 6c 64 2e 72 73 22 2c 20  ile("build.rs", 
8e00: 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  "").        .fil
8e10: 65 28 22 2e 63 61 72 67 6f 2f 63 6f 6e 66 69 67  e(".cargo/config
8e20: 22 2c 20 26 66 6f 72 6d 61 74 21 28 72 23 22 0a  ", &format!(r#".
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 5b 74 61 72              [tar
8e40: 67 65 74 2e 7b 7d 2e 61 5d 0a 20 20 20 20 20 20  get.{}.a].      
8e50: 20 20 20 20 20 20 72 75 73 74 63 2d 63 66 67 20        rustc-cfg 
8e60: 3d 20 5b 22 66 6f 6f 22 5d 0a 20 20 20 20 20 20  = ["foo"].      
8e70: 20 20 22 23 2c 20 74 61 72 67 65 74 29 29 3b 0a    "#, target));.
8e80: 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68 61 74  .    assert_that
8e90: 28 70 2e 63 61 72 67 6f 5f 70 72 6f 63 65 73 73  (p.cargo_process
8ea0: 28 22 62 75 69 6c 64 22 29 2e 61 72 67 28 22 2d  ("build").arg("-
8eb0: 76 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  v"),.           
8ec0: 20 20 20 20 20 65 78 65 63 73 28 29 2e 77 69 74       execs().wit
8ed0: 68 5f 73 74 61 74 75 73 28 30 29 29 3b 0a 7d 0a  h_status(0));.}.
8ee0: 0a 23 5b 74 65 73 74 5d 0a 66 6e 20 63 66 67 5f  .#[test].fn cfg_
8ef0: 74 65 73 74 28 29 20 7b 0a 20 20 20 20 6c 65 74  test() {.    let
8f00: 20 70 20 3d 20 70 72 6f 6a 65 63 74 28 22 66 6f   p = project("fo
8f10: 6f 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  o").        .fil
8f20: 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20  e("Cargo.toml", 
8f30: 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  r#".            
8f40: 5b 70 61 63 6b 61 67 65 5d 0a 20 20 20 20 20 20  [package].      
8f50: 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 66 6f        name = "fo
8f60: 6f 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 76  o".            v
8f70: 65 72 73 69 6f 6e 20 3d 20 22 30 2e 30 2e 31 22  ersion = "0.0.1"
8f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74  .            aut
8f90: 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20  hors = [].      
8fa0: 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22 62        build = "b
8fb0: 75 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20 20  uild.rs".       
8fc0: 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69   "#).        .fi
8fd0: 6c 65 28 22 62 75 69 6c 64 2e 72 73 22 2c 20 72  le("build.rs", r
8fe0: 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  #".            f
8ff0: 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20 20  n main() {.     
9000: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74             print
9010: 6c 6e 21 28 22 63 61 72 67 6f 3a 72 75 73 74 63  ln!("cargo:rustc
9020: 2d 63 66 67 3d 66 6f 6f 22 29 3b 0a 20 20 20 20  -cfg=foo");.    
9030: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
9040: 20 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66    "#).        .f
9050: 69 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72 73 22  ile("src/lib.rs"
9060: 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  , r#".          
9070: 20 20 2f 2f 2f 0a 20 20 20 20 20 20 20 20 20 20    ///.          
9080: 20 20 2f 2f 2f 20 60 60 60 0a 20 20 20 20 20 20    /// ```.      
9090: 20 20 20 20 20 20 2f 2f 2f 20 65 78 74 65 72 6e        /// extern
90a0: 20 63 72 61 74 65 20 66 6f 6f 3b 0a 20 20 20 20   crate foo;.    
90b0: 20 20 20 20 20 20 20 20 2f 2f 2f 0a 20 20 20 20          ///.    
90c0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 66 6e 20 6d          /// fn m
90d0: 61 69 6e 28 29 20 7b 0a 20 20 20 20 20 20 20 20  ain() {.        
90e0: 20 20 20 20 2f 2f 2f 20 20 20 20 20 66 6f 6f 3a      ///     foo:
90f0: 3a 66 6f 6f 28 29 0a 20 20 20 20 20 20 20 20 20  :foo().         
9100: 20 20 20 2f 2f 2f 20 7d 0a 20 20 20 20 20 20 20     /// }.       
9110: 20 20 20 20 20 2f 2f 2f 20 60 60 60 0a 20 20 20       /// ```.   
9120: 20 20 20 20 20 20 20 20 20 2f 2f 2f 0a 20 20 20           ///.   
9130: 20 20 20 20 20 20 20 20 20 23 5b 63 66 67 28 66           #[cfg(f
9140: 6f 6f 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20  oo)].           
9150: 20 70 75 62 20 66 6e 20 66 6f 6f 28 29 20 7b 7d   pub fn foo() {}
9160: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 5b  ..            #[
9170: 63 66 67 28 66 6f 6f 29 5d 0a 20 20 20 20 20 20  cfg(foo)].      
9180: 20 20 20 20 20 20 23 5b 74 65 73 74 5d 0a 20 20        #[test].  
9190: 20 20 20 20 20 20 20 20 20 20 66 6e 20 74 65 73            fn tes
91a0: 74 5f 66 6f 6f 28 29 20 7b 0a 20 20 20 20 20 20  t_foo() {.      
91b0: 20 20 20 20 20 20 20 20 20 20 66 6f 6f 28 29 0a            foo().
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
91d0: 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20        "#).      
91e0: 20 20 2e 66 69 6c 65 28 22 74 65 73 74 73 2f 74    .file("tests/t
91f0: 65 73 74 2e 72 73 22 2c 20 72 23 22 0a 20 20 20  est.rs", r#".   
9200: 20 20 20 20 20 20 20 20 20 23 5b 63 66 67 28 66           #[cfg(f
9210: 6f 6f 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20  oo)].           
9220: 20 23 5b 74 65 73 74 5d 0a 20 20 20 20 20 20 20   #[test].       
9230: 20 20 20 20 20 66 6e 20 74 65 73 74 5f 62 61 72       fn test_bar
9240: 28 29 20 7b 7d 0a 20 20 20 20 20 20 20 20 22 23  () {}.        "#
9250: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68  );.    assert_th
9260: 61 74 28 70 2e 63 61 72 67 6f 5f 70 72 6f 63 65  at(p.cargo_proce
9270: 73 73 28 22 74 65 73 74 22 29 2e 61 72 67 28 22  ss("test").arg("
9280: 2d 76 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20  -v"),.          
9290: 20 20 20 20 20 20 65 78 65 63 73 28 29 2e 77 69        execs().wi
92a0: 74 68 5f 73 74 64 65 72 72 28 66 6f 72 6d 61 74  th_stderr(format
92b0: 21 28 22 5c 0a 5b 43 4f 4d 50 49 4c 49 4e 47 5d  !("\.[COMPILING]
92c0: 20 66 6f 6f 20 76 30 2e 30 2e 31 20 28 7b 64 69   foo v0.0.1 ({di
92d0: 72 7d 29 0a 5b 52 55 4e 4e 49 4e 47 5d 20 5b 2e  r}).[RUNNING] [.
92e0: 2e 5d 20 62 75 69 6c 64 2e 72 73 20 5b 2e 2e 5d  .] build.rs [..]
92f0: 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60 5b 2e 2e 5d  .[RUNNING] `[..]
9300: 5b 2f 5d 62 75 69 6c 64 2d 73 63 72 69 70 74 2d  [/]build-script-
9310: 62 75 69 6c 64 60 0a 5b 52 55 4e 4e 49 4e 47 5d  build`.[RUNNING]
9320: 20 5b 2e 2e 5d 20 2d 2d 63 66 67 20 66 6f 6f 5b   [..] --cfg foo[
9330: 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e 47 5d 20 5b 2e  ..].[RUNNING] [.
9340: 2e 5d 20 2d 2d 63 66 67 20 66 6f 6f 5b 2e 2e 5d  .] --cfg foo[..]
9350: 0a 5b 52 55 4e 4e 49 4e 47 5d 20 5b 2e 2e 5d 20  .[RUNNING] [..] 
9360: 2d 2d 63 66 67 20 66 6f 6f 5b 2e 2e 5d 0a 5b 46  --cfg foo[..].[F
9370: 49 4e 49 53 48 45 44 5d 20 64 65 76 20 5b 75 6e  INISHED] dev [un
9380: 6f 70 74 69 6d 69 7a 65 64 20 2b 20 64 65 62 75  optimized + debu
9390: 67 69 6e 66 6f 5d 20 74 61 72 67 65 74 28 73 29  ginfo] target(s)
93a0: 20 69 6e 20 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e   in [..].[RUNNIN
93b0: 47 5d 20 60 5b 2e 2e 5d 5b 2f 5d 66 6f 6f 2d 5b  G] `[..][/]foo-[
93c0: 2e 2e 5d 5b 45 58 45 5d 60 0a 5b 52 55 4e 4e 49  ..][EXE]`.[RUNNI
93d0: 4e 47 5d 20 60 5b 2e 2e 5d 5b 2f 5d 74 65 73 74  NG] `[..][/]test
93e0: 2d 5b 2e 2e 5d 5b 45 58 45 5d 60 0a 5b 44 4f 43  -[..][EXE]`.[DOC
93f0: 54 45 53 54 5d 20 66 6f 6f 0a 5b 52 55 4e 4e 49  TEST] foo.[RUNNI
9400: 4e 47 5d 20 5b 2e 2e 5d 20 2d 2d 63 66 67 20 66  NG] [..] --cfg f
9410: 6f 6f 5b 2e 2e 5d 22 2c 20 64 69 72 20 3d 20 70  oo[..]", dir = p
9420: 2e 75 72 6c 28 29 29 29 0a 20 20 20 20 20 20 20  .url())).       
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9440: 2e 77 69 74 68 5f 73 74 64 6f 75 74 28 22 0a 72  .with_stdout(".r
9450: 75 6e 6e 69 6e 67 20 31 20 74 65 73 74 0a 74 65  unning 1 test.te
9460: 73 74 20 74 65 73 74 5f 66 6f 6f 20 2e 2e 2e 20  st test_foo ... 
9470: 6f 6b 0a 0a 74 65 73 74 20 72 65 73 75 6c 74 3a  ok..test result:
9480: 20 6f 6b 2e 20 31 20 70 61 73 73 65 64 3b 20 30   ok. 1 passed; 0
9490: 20 66 61 69 6c 65 64 3b 20 30 20 69 67 6e 6f 72   failed; 0 ignor
94a0: 65 64 3b 20 30 20 6d 65 61 73 75 72 65 64 0a 0a  ed; 0 measured..
94b0: 0a 72 75 6e 6e 69 6e 67 20 31 20 74 65 73 74 0a  .running 1 test.
94c0: 74 65 73 74 20 74 65 73 74 5f 62 61 72 20 2e 2e  test test_bar ..
94d0: 2e 20 6f 6b 0a 0a 74 65 73 74 20 72 65 73 75 6c  . ok..test resul
94e0: 74 3a 20 6f 6b 2e 20 31 20 70 61 73 73 65 64 3b  t: ok. 1 passed;
94f0: 20 30 20 66 61 69 6c 65 64 3b 20 30 20 69 67 6e   0 failed; 0 ign
9500: 6f 72 65 64 3b 20 30 20 6d 65 61 73 75 72 65 64  ored; 0 measured
9510: 0a 0a 0a 72 75 6e 6e 69 6e 67 20 31 20 74 65 73  ...running 1 tes
9520: 74 0a 74 65 73 74 20 5b 2e 2e 5d 20 2e 2e 2e 20  t.test [..] ... 
9530: 6f 6b 0a 0a 74 65 73 74 20 72 65 73 75 6c 74 3a  ok..test result:
9540: 20 6f 6b 2e 20 31 20 70 61 73 73 65 64 3b 20 30   ok. 1 passed; 0
9550: 20 66 61 69 6c 65 64 3b 20 30 20 69 67 6e 6f 72   failed; 0 ignor
9560: 65 64 3b 20 30 20 6d 65 61 73 75 72 65 64 0a 0a  ed; 0 measured..
9570: 22 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a  "));.}..#[test].
9580: 66 6e 20 63 66 67 5f 64 6f 63 28 29 20 7b 0a 20  fn cfg_doc() {. 
9590: 20 20 20 6c 65 74 20 70 20 3d 20 70 72 6f 6a 65     let p = proje
95a0: 63 74 28 22 66 6f 6f 22 29 0a 20 20 20 20 20 20  ct("foo").      
95b0: 20 20 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e 74    .file("Cargo.t
95c0: 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20  oml", r#".      
95d0: 20 20 20 20 20 20 5b 70 61 63 6b 61 67 65 5d 0a        [package].
95e0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65              name
95f0: 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20 20 20   = "foo".       
9600: 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22       version = "
9610: 30 2e 30 2e 31 22 0a 20 20 20 20 20 20 20 20 20  0.0.1".         
9620: 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a     authors = [].
9630: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c              buil
9640: 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 0a  d = "build.rs"..
9650: 20 20 20 20 20 20 20 20 20 20 20 20 5b 64 65 70              [dep
9660: 65 6e 64 65 6e 63 69 65 73 2e 62 61 72 5d 0a 20  endencies.bar]. 
9670: 20 20 20 20 20 20 20 20 20 20 20 70 61 74 68 20             path 
9680: 3d 20 22 62 61 72 22 0a 20 20 20 20 20 20 20 20  = "bar".        
9690: 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  "#).        .fil
96a0: 65 28 22 62 75 69 6c 64 2e 72 73 22 2c 20 72 23  e("build.rs", r#
96b0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6e  ".            fn
96c0: 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20 20 20   main() {.      
96d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 6c            printl
96e0: 6e 21 28 22 63 61 72 67 6f 3a 72 75 73 74 63 2d  n!("cargo:rustc-
96f0: 63 66 67 3d 66 6f 6f 22 29 3b 0a 20 20 20 20 20  cfg=foo");.     
9700: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
9710: 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69   "#).        .fi
9720: 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72 73 22 2c  le("src/lib.rs",
9730: 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20   r#".           
9740: 20 23 5b 63 66 67 28 66 6f 6f 29 5d 0a 20 20 20   #[cfg(foo)].   
9750: 20 20 20 20 20 20 20 20 20 70 75 62 20 66 6e 20           pub fn 
9760: 66 6f 6f 28 29 20 7b 7d 0a 20 20 20 20 20 20 20  foo() {}.       
9770: 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69   "#).        .fi
9780: 6c 65 28 22 62 61 72 2f 43 61 72 67 6f 2e 74 6f  le("bar/Cargo.to
9790: 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20  ml", r#".       
97a0: 20 20 20 20 20 5b 70 61 63 6b 61 67 65 5d 0a 20       [package]. 
97b0: 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20             name 
97c0: 3d 20 22 62 61 72 22 0a 20 20 20 20 20 20 20 20  = "bar".        
97d0: 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30      version = "0
97e0: 2e 30 2e 31 22 0a 20 20 20 20 20 20 20 20 20 20  .0.1".          
97f0: 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20    authors = []. 
9800: 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64             build
9810: 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 20 20   = "build.rs".  
9820: 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20        "#).      
9830: 20 20 2e 66 69 6c 65 28 22 62 61 72 2f 62 75 69    .file("bar/bui
9840: 6c 64 2e 72 73 22 2c 20 72 23 22 0a 20 20 20 20  ld.rs", r#".    
9850: 20 20 20 20 20 20 20 20 66 6e 20 6d 61 69 6e 28          fn main(
9860: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
9870: 20 20 20 20 70 72 69 6e 74 6c 6e 21 28 22 63 61      println!("ca
9880: 72 67 6f 3a 72 75 73 74 63 2d 63 66 67 3d 62 61  rgo:rustc-cfg=ba
9890: 72 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  r");.           
98a0: 20 7d 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20   }.        "#). 
98b0: 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 62 61         .file("ba
98c0: 72 2f 73 72 63 2f 6c 69 62 2e 72 73 22 2c 20 72  r/src/lib.rs", r
98d0: 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #".            #
98e0: 5b 63 66 67 28 62 61 72 29 5d 0a 20 20 20 20 20  [cfg(bar)].     
98f0: 20 20 20 20 20 20 20 70 75 62 20 66 6e 20 62 61         pub fn ba
9900: 72 28 29 20 7b 7d 0a 20 20 20 20 20 20 20 20 22  r() {}.        "
9910: 23 29 3b 0a 20 20 20 20 61 73 73 65 72 74 5f 74  #);.    assert_t
9920: 68 61 74 28 70 2e 63 61 72 67 6f 5f 70 72 6f 63  hat(p.cargo_proc
9930: 65 73 73 28 22 64 6f 63 22 29 2c 0a 20 20 20 20  ess("doc"),.    
9940: 20 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63              exec
9950: 73 28 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28  s().with_status(
9960: 30 29 29 3b 0a 20 20 20 20 61 73 73 65 72 74 5f  0));.    assert_
9970: 74 68 61 74 28 26 70 2e 72 6f 6f 74 28 29 2e 6a  that(&p.root().j
9980: 6f 69 6e 28 22 74 61 72 67 65 74 2f 64 6f 63 22  oin("target/doc"
9990: 29 2c 20 65 78 69 73 74 69 6e 67 5f 64 69 72 28  ), existing_dir(
99a0: 29 29 3b 0a 20 20 20 20 61 73 73 65 72 74 5f 74  ));.    assert_t
99b0: 68 61 74 28 26 70 2e 72 6f 6f 74 28 29 2e 6a 6f  hat(&p.root().jo
99c0: 69 6e 28 22 74 61 72 67 65 74 2f 64 6f 63 2f 66  in("target/doc/f
99d0: 6f 6f 2f 66 6e 2e 66 6f 6f 2e 68 74 6d 6c 22 29  oo/fn.foo.html")
99e0: 2c 20 65 78 69 73 74 69 6e 67 5f 66 69 6c 65 28  , existing_file(
99f0: 29 29 3b 0a 20 20 20 20 61 73 73 65 72 74 5f 74  ));.    assert_t
9a00: 68 61 74 28 26 70 2e 72 6f 6f 74 28 29 2e 6a 6f  hat(&p.root().jo
9a10: 69 6e 28 22 74 61 72 67 65 74 2f 64 6f 63 2f 62  in("target/doc/b
9a20: 61 72 2f 66 6e 2e 62 61 72 2e 68 74 6d 6c 22 29  ar/fn.bar.html")
9a30: 2c 20 65 78 69 73 74 69 6e 67 5f 66 69 6c 65 28  , existing_file(
9a40: 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66  ));.}..#[test].f
9a50: 6e 20 63 66 67 5f 6f 76 65 72 72 69 64 65 5f 74  n cfg_override_t
9a60: 65 73 74 28 29 20 7b 0a 20 20 20 20 6c 65 74 20  est() {.    let 
9a70: 70 20 3d 20 70 72 6f 6a 65 63 74 28 22 66 6f 6f  p = project("foo
9a80: 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  ").        .file
9a90: 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72  ("Cargo.toml", r
9aa0: 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  #".            [
9ab0: 70 61 63 6b 61 67 65 5d 0a 20 20 20 20 20 20 20  package].       
9ac0: 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 66 6f 6f       name = "foo
9ad0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 65  ".            ve
9ae0: 72 73 69 6f 6e 20 3d 20 22 30 2e 30 2e 31 22 0a  rsion = "0.0.1".
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68              auth
9b00: 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20  ors = [].       
9b10: 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22 62 75       build = "bu
9b20: 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20 20 20  ild.rs".        
9b30: 20 20 20 20 6c 69 6e 6b 73 20 3d 20 22 61 22 0a      links = "a".
9b40: 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20          "#).    
9b50: 20 20 20 20 2e 66 69 6c 65 28 22 62 75 69 6c 64      .file("build
9b60: 2e 72 73 22 2c 20 22 22 29 0a 20 20 20 20 20 20  .rs", "").      
9b70: 20 20 2e 66 69 6c 65 28 22 2e 63 61 72 67 6f 2f    .file(".cargo/
9b80: 63 6f 6e 66 69 67 22 2c 20 26 66 6f 72 6d 61 74  config", &format
9b90: 21 28 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  !(r#".          
9ba0: 20 20 5b 74 61 72 67 65 74 2e 7b 7d 2e 61 5d 0a    [target.{}.a].
9bb0: 20 20 20 20 20 20 20 20 20 20 20 20 72 75 73 74              rust
9bc0: 63 2d 63 66 67 20 3d 20 5b 22 66 6f 6f 22 5d 0a  c-cfg = ["foo"].
9bd0: 20 20 20 20 20 20 20 20 22 23 2c 20 72 75 73 74          "#, rust
9be0: 63 5f 68 6f 73 74 28 29 29 29 0a 20 20 20 20 20  c_host())).     
9bf0: 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6c 69     .file("src/li
9c00: 62 2e 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20  b.rs", r#".     
9c10: 20 20 20 20 20 20 20 2f 2f 2f 0a 20 20 20 20 20         ///.     
9c20: 20 20 20 20 20 20 20 2f 2f 2f 20 60 60 60 0a 20         /// ```. 
9c30: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 65             /// e
9c40: 78 74 65 72 6e 20 63 72 61 74 65 20 66 6f 6f 3b  xtern crate foo;
9c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
9c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
9c70: 20 66 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20   fn main() {.   
9c80: 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 20 20 20           ///    
9c90: 20 66 6f 6f 3a 3a 66 6f 6f 28 29 0a 20 20 20 20   foo::foo().    
9ca0: 20 20 20 20 20 20 20 20 2f 2f 2f 20 7d 0a 20 20          /// }.  
9cb0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 20 60 60            /// ``
9cc0: 60 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  `.            //
9cd0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 5b  /.            #[
9ce0: 63 66 67 28 66 6f 6f 29 5d 0a 20 20 20 20 20 20  cfg(foo)].      
9cf0: 20 20 20 20 20 20 70 75 62 20 66 6e 20 66 6f 6f        pub fn foo
9d00: 28 29 20 7b 7d 0a 0a 20 20 20 20 20 20 20 20 20  () {}..         
9d10: 20 20 20 23 5b 63 66 67 28 66 6f 6f 29 5d 0a 20     #[cfg(foo)]. 
9d20: 20 20 20 20 20 20 20 20 20 20 20 23 5b 74 65 73             #[tes
9d30: 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  t].            f
9d40: 6e 20 74 65 73 74 5f 66 6f 6f 28 29 20 7b 0a 20  n test_foo() {. 
9d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
9d60: 6f 6f 28 29 0a 20 20 20 20 20 20 20 20 20 20 20  oo().           
9d70: 20 7d 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20   }.        "#). 
9d80: 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 74 65         .file("te
9d90: 73 74 73 2f 74 65 73 74 2e 72 73 22 2c 20 72 23  sts/test.rs", r#
9da0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 5b  ".            #[
9db0: 63 66 67 28 66 6f 6f 29 5d 0a 20 20 20 20 20 20  cfg(foo)].      
9dc0: 20 20 20 20 20 20 23 5b 74 65 73 74 5d 0a 20 20        #[test].  
9dd0: 20 20 20 20 20 20 20 20 20 20 66 6e 20 74 65 73            fn tes
9de0: 74 5f 62 61 72 28 29 20 7b 7d 0a 20 20 20 20 20  t_bar() {}.     
9df0: 20 20 20 22 23 29 3b 0a 20 20 20 20 61 73 73 65     "#);.    asse
9e00: 72 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f  rt_that(p.cargo_
9e10: 70 72 6f 63 65 73 73 28 22 74 65 73 74 22 29 2e  process("test").
9e20: 61 72 67 28 22 2d 76 22 29 2c 0a 20 20 20 20 20  arg("-v"),.     
9e30: 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63 73             execs
9e40: 28 29 2e 77 69 74 68 5f 73 74 64 65 72 72 28 66  ().with_stderr(f
9e50: 6f 72 6d 61 74 21 28 22 5c 0a 5b 43 4f 4d 50 49  ormat!("\.[COMPI
9e60: 4c 49 4e 47 5d 20 66 6f 6f 20 76 30 2e 30 2e 31  LING] foo v0.0.1
9e70: 20 28 7b 64 69 72 7d 29 0a 5b 52 55 4e 4e 49 4e   ({dir}).[RUNNIN
9e80: 47 5d 20 60 5b 2e 2e 5d 60 0a 5b 52 55 4e 4e 49  G] `[..]`.[RUNNI
9e90: 4e 47 5d 20 60 5b 2e 2e 5d 60 0a 5b 52 55 4e 4e  NG] `[..]`.[RUNN
9ea0: 49 4e 47 5d 20 60 5b 2e 2e 5d 60 0a 5b 46 49 4e  ING] `[..]`.[FIN
9eb0: 49 53 48 45 44 5d 20 64 65 76 20 5b 75 6e 6f 70  ISHED] dev [unop
9ec0: 74 69 6d 69 7a 65 64 20 2b 20 64 65 62 75 67 69  timized + debugi
9ed0: 6e 66 6f 5d 20 74 61 72 67 65 74 28 73 29 20 69  nfo] target(s) i
9ee0: 6e 20 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e 47 5d  n [..].[RUNNING]
9ef0: 20 60 5b 2e 2e 5d 5b 2f 5d 66 6f 6f 2d 5b 2e 2e   `[..][/]foo-[..
9f00: 5d 5b 45 58 45 5d 60 0a 5b 52 55 4e 4e 49 4e 47  ][EXE]`.[RUNNING
9f10: 5d 20 60 5b 2e 2e 5d 5b 2f 5d 74 65 73 74 2d 5b  ] `[..][/]test-[
9f20: 2e 2e 5d 5b 45 58 45 5d 60 0a 5b 44 4f 43 54 45  ..][EXE]`.[DOCTE
9f30: 53 54 5d 20 66 6f 6f 0a 5b 52 55 4e 4e 49 4e 47  ST] foo.[RUNNING
9f40: 5d 20 5b 2e 2e 5d 20 2d 2d 63 66 67 20 66 6f 6f  ] [..] --cfg foo
9f50: 5b 2e 2e 5d 22 2c 20 64 69 72 20 3d 20 70 2e 75  [..]", dir = p.u
9f60: 72 6c 28 29 29 29 0a 20 20 20 20 20 20 20 20 20  rl())).         
9f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e 77                .w
9f80: 69 74 68 5f 73 74 64 6f 75 74 28 22 0a 72 75 6e  ith_stdout(".run
9f90: 6e 69 6e 67 20 31 20 74 65 73 74 0a 74 65 73 74  ning 1 test.test
9fa0: 20 74 65 73 74 5f 66 6f 6f 20 2e 2e 2e 20 6f 6b   test_foo ... ok
9fb0: 0a 0a 74 65 73 74 20 72 65 73 75 6c 74 3a 20 6f  ..test result: o
9fc0: 6b 2e 20 31 20 70 61 73 73 65 64 3b 20 30 20 66  k. 1 passed; 0 f
9fd0: 61 69 6c 65 64 3b 20 30 20 69 67 6e 6f 72 65 64  ailed; 0 ignored
9fe0: 3b 20 30 20 6d 65 61 73 75 72 65 64 0a 0a 0a 72  ; 0 measured...r
9ff0: 75 6e 6e 69 6e 67 20 31 20 74 65 73 74 0a 74 65  unning 1 test.te
a000: 73 74 20 74 65 73 74 5f 62 61 72 20 2e 2e 2e 20  st test_bar ... 
a010: 6f 6b 0a 0a 74 65 73 74 20 72 65 73 75 6c 74 3a  ok..test result:
a020: 20 6f 6b 2e 20 31 20 70 61 73 73 65 64 3b 20 30   ok. 1 passed; 0
a030: 20 66 61 69 6c 65 64 3b 20 30 20 69 67 6e 6f 72   failed; 0 ignor
a040: 65 64 3b 20 30 20 6d 65 61 73 75 72 65 64 0a 0a  ed; 0 measured..
a050: 0a 72 75 6e 6e 69 6e 67 20 31 20 74 65 73 74 0a  .running 1 test.
a060: 74 65 73 74 20 5b 2e 2e 5d 20 2e 2e 2e 20 6f 6b  test [..] ... ok
a070: 0a 0a 74 65 73 74 20 72 65 73 75 6c 74 3a 20 6f  ..test result: o
a080: 6b 2e 20 31 20 70 61 73 73 65 64 3b 20 30 20 66  k. 1 passed; 0 f
a090: 61 69 6c 65 64 3b 20 30 20 69 67 6e 6f 72 65 64  ailed; 0 ignored
a0a0: 3b 20 30 20 6d 65 61 73 75 72 65 64 0a 0a 22 29  ; 0 measured..")
a0b0: 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66 6e  );.}..#[test].fn
a0c0: 20 63 66 67 5f 6f 76 65 72 72 69 64 65 5f 64 6f   cfg_override_do
a0d0: 63 28 29 20 7b 0a 20 20 20 20 6c 65 74 20 70 20  c() {.    let p 
a0e0: 3d 20 70 72 6f 6a 65 63 74 28 22 66 6f 6f 22 29  = project("foo")
a0f0: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
a100: 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22  Cargo.toml", r#"
a110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 61  .            [pa
a120: 63 6b 61 67 65 5d 0a 20 20 20 20 20 20 20 20 20  ckage].         
a130: 20 20 20 6e 61 6d 65 20 3d 20 22 66 6f 6f 22 0a     name = "foo".
a140: 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 73              vers
a150: 69 6f 6e 20 3d 20 22 30 2e 30 2e 31 22 0a 20 20  ion = "0.0.1".  
a160: 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f 72            author
a170: 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20 20  s = [].         
a180: 20 20 20 62 75 69 6c 64 20 3d 20 22 62 75 69 6c     build = "buil
a190: 64 2e 72 73 22 0a 20 20 20 20 20 20 20 20 20 20  d.rs".          
a1a0: 20 20 6c 69 6e 6b 73 20 3d 20 22 61 22 0a 0a 20    links = "a".. 
a1b0: 20 20 20 20 20 20 20 20 20 20 20 5b 64 65 70 65             [depe
a1c0: 6e 64 65 6e 63 69 65 73 2e 62 61 72 5d 0a 20 20  ndencies.bar].  
a1d0: 20 20 20 20 20 20 20 20 20 20 70 61 74 68 20 3d            path =
a1e0: 20 22 62 61 72 22 0a 20 20 20 20 20 20 20 20 22   "bar".        "
a1f0: 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  #).        .file
a200: 28 22 2e 63 61 72 67 6f 2f 63 6f 6e 66 69 67 22  (".cargo/config"
a210: 2c 20 26 66 6f 72 6d 61 74 21 28 72 23 22 0a 20  , &format!(r#". 
a220: 20 20 20 20 20 20 20 20 20 20 20 5b 74 61 72 67             [targ
a230: 65 74 2e 7b 74 61 72 67 65 74 7d 2e 61 5d 0a 20  et.{target}.a]. 
a240: 20 20 20 20 20 20 20 20 20 20 20 72 75 73 74 63             rustc
a250: 2d 63 66 67 20 3d 20 5b 22 66 6f 6f 22 5d 0a 20  -cfg = ["foo"]. 
a260: 20 20 20 20 20 20 20 20 20 20 20 5b 74 61 72 67             [targ
a270: 65 74 2e 7b 74 61 72 67 65 74 7d 2e 62 5d 0a 20  et.{target}.b]. 
a280: 20 20 20 20 20 20 20 20 20 20 20 72 75 73 74 63             rustc
a290: 2d 63 66 67 20 3d 20 5b 22 62 61 72 22 5d 0a 20  -cfg = ["bar"]. 
a2a0: 20 20 20 20 20 20 20 22 23 2c 20 74 61 72 67 65         "#, targe
a2b0: 74 20 3d 20 72 75 73 74 63 5f 68 6f 73 74 28 29  t = rustc_host()
a2c0: 29 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  )).        .file
a2d0: 28 22 62 75 69 6c 64 2e 72 73 22 2c 20 22 22 29  ("build.rs", "")
a2e0: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
a2f0: 73 72 63 2f 6c 69 62 2e 72 73 22 2c 20 72 23 22  src/lib.rs", r#"
a300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 5b 63  .            #[c
a310: 66 67 28 66 6f 6f 29 5d 0a 20 20 20 20 20 20 20  fg(foo)].       
a320: 20 20 20 20 20 70 75 62 20 66 6e 20 66 6f 6f 28       pub fn foo(
a330: 29 20 7b 7d 0a 20 20 20 20 20 20 20 20 22 23 29  ) {}.        "#)
a340: 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22  .        .file("
a350: 62 61 72 2f 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c  bar/Cargo.toml",
a360: 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20   r#".           
a370: 20 5b 70 61 63 6b 61 67 65 5d 0a 20 20 20 20 20   [package].     
a380: 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 62         name = "b
a390: 61 72 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  ar".            
a3a0: 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 30 2e 31  version = "0.0.1
a3b0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 75  ".            au
a3c0: 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20  thors = [].     
a3d0: 20 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22         build = "
a3e0: 62 75 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20  build.rs".      
a3f0: 20 20 20 20 20 20 6c 69 6e 6b 73 20 3d 20 22 62        links = "b
a400: 22 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20 20  ".        "#).  
a410: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 62 61 72        .file("bar
a420: 2f 62 75 69 6c 64 2e 72 73 22 2c 20 22 22 29 0a  /build.rs", "").
a430: 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 62          .file("b
a440: 61 72 2f 73 72 63 2f 6c 69 62 2e 72 73 22 2c 20  ar/src/lib.rs", 
a450: 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  r#".            
a460: 23 5b 63 66 67 28 62 61 72 29 5d 0a 20 20 20 20  #[cfg(bar)].    
a470: 20 20 20 20 20 20 20 20 70 75 62 20 66 6e 20 62          pub fn b
a480: 61 72 28 29 20 7b 7d 0a 20 20 20 20 20 20 20 20  ar() {}.        
a490: 22 23 29 20 3b 0a 20 20 20 20 61 73 73 65 72 74  "#) ;.    assert
a4a0: 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f 70 72  _that(p.cargo_pr
a4b0: 6f 63 65 73 73 28 22 64 6f 63 22 29 2c 0a 20 20  ocess("doc"),.  
a4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78                ex
a4d0: 65 63 73 28 29 2e 77 69 74 68 5f 73 74 61 74 75  ecs().with_statu
a4e0: 73 28 30 29 29 3b 0a 20 20 20 20 61 73 73 65 72  s(0));.    asser
a4f0: 74 5f 74 68 61 74 28 26 70 2e 72 6f 6f 74 28 29  t_that(&p.root()
a500: 2e 6a 6f 69 6e 28 22 74 61 72 67 65 74 2f 64 6f  .join("target/do
a510: 63 22 29 2c 20 65 78 69 73 74 69 6e 67 5f 64 69  c"), existing_di
a520: 72 28 29 29 3b 0a 20 20 20 20 61 73 73 65 72 74  r());.    assert
a530: 5f 74 68 61 74 28 26 70 2e 72 6f 6f 74 28 29 2e  _that(&p.root().
a540: 6a 6f 69 6e 28 22 74 61 72 67 65 74 2f 64 6f 63  join("target/doc
a550: 2f 66 6f 6f 2f 66 6e 2e 66 6f 6f 2e 68 74 6d 6c  /foo/fn.foo.html
a560: 22 29 2c 20 65 78 69 73 74 69 6e 67 5f 66 69 6c  "), existing_fil
a570: 65 28 29 29 3b 0a 20 20 20 20 61 73 73 65 72 74  e());.    assert
a580: 5f 74 68 61 74 28 26 70 2e 72 6f 6f 74 28 29 2e  _that(&p.root().
a590: 6a 6f 69 6e 28 22 74 61 72 67 65 74 2f 64 6f 63  join("target/doc
a5a0: 2f 62 61 72 2f 66 6e 2e 62 61 72 2e 68 74 6d 6c  /bar/fn.bar.html
a5b0: 22 29 2c 20 65 78 69 73 74 69 6e 67 5f 66 69 6c  "), existing_fil
a5c0: 65 28 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d  e());.}..#[test]
a5d0: 0a 66 6e 20 66 6c 61 67 73 5f 67 6f 5f 69 6e 74  .fn flags_go_int
a5e0: 6f 5f 74 65 73 74 73 28 29 20 7b 0a 20 20 20 20  o_tests() {.    
a5f0: 6c 65 74 20 70 20 3d 20 70 72 6f 6a 65 63 74 28  let p = project(
a600: 22 66 6f 6f 22 29 0a 20 20 20 20 20 20 20 20 2e  "foo").        .
a610: 66 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c  file("Cargo.toml
a620: 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20  ", r#".         
a630: 20 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 20 20 20     [project].   
a640: 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20           name = 
a650: 22 66 6f 6f 22 0a 20 20 20 20 20 20 20 20 20 20  "foo".          
a660: 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35    version = "0.5
a670: 2e 30 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  .0".            
a680: 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 0a 20 20  authors = []..  
a690: 20 20 20 20 20 20 20 20 20 20 5b 64 65 70 65 6e            [depen
a6a0: 64 65 6e 63 69 65 73 5d 0a 20 20 20 20 20 20 20  dencies].       
a6b0: 20 20 20 20 20 62 20 3d 20 7b 20 70 61 74 68 20       b = { path 
a6c0: 3d 20 22 62 22 20 7d 0a 20 20 20 20 20 20 20 20  = "b" }.        
a6d0: 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  "#).        .fil
a6e0: 65 28 22 73 72 63 2f 6c 69 62 2e 72 73 22 2c 20  e("src/lib.rs", 
a6f0: 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  "").        .fil
a700: 65 28 22 74 65 73 74 73 2f 66 6f 6f 2e 72 73 22  e("tests/foo.rs"
a710: 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66  , "").        .f
a720: 69 6c 65 28 22 62 2f 43 61 72 67 6f 2e 74 6f 6d  ile("b/Cargo.tom
a730: 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20  l", r#".        
a740: 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 20 20      [project].  
a750: 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d            name =
a760: 20 22 62 22 0a 20 20 20 20 20 20 20 20 20 20 20   "b".           
a770: 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e   version = "0.5.
a780: 30 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 61  0".            a
a790: 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20  uthors = [].    
a7a0: 20 20 20 20 20 20 20 20 5b 64 65 70 65 6e 64 65          [depende
a7b0: 6e 63 69 65 73 5d 0a 20 20 20 20 20 20 20 20 20  ncies].         
a7c0: 20 20 20 61 20 3d 20 7b 20 70 61 74 68 20 3d 20     a = { path = 
a7d0: 22 2e 2e 2f 61 22 20 7d 0a 20 20 20 20 20 20 20  "../a" }.       
a7e0: 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69   "#).        .fi
a7f0: 6c 65 28 22 62 2f 73 72 63 2f 6c 69 62 2e 72 73  le("b/src/lib.rs
a800: 22 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e  ", "").        .
a810: 66 69 6c 65 28 22 61 2f 43 61 72 67 6f 2e 74 6f  file("a/Cargo.to
a820: 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20  ml", r#".       
a830: 20 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 20       [project]. 
a840: 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20             name 
a850: 3d 20 22 61 22 0a 20 20 20 20 20 20 20 20 20 20  = "a".          
a860: 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35    version = "0.5
a870: 2e 30 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  .0".            
a880: 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20  authors = [].   
a890: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 20 3d           build =
a8a0: 20 22 62 75 69 6c 64 2e 72 73 22 0a 20 20 20 20   "build.rs".    
a8b0: 20 20 20 20 22 23 29 0a 20 20 20 20 20 20 20 20      "#).        
a8c0: 2e 66 69 6c 65 28 22 61 2f 73 72 63 2f 6c 69 62  .file("a/src/lib
a8d0: 2e 72 73 22 2c 20 22 22 29 0a 20 20 20 20 20 20  .rs", "").      
a8e0: 20 20 2e 66 69 6c 65 28 22 61 2f 62 75 69 6c 64    .file("a/build
a8f0: 2e 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20 20  .rs", r#".      
a900: 20 20 20 20 20 20 66 6e 20 6d 61 69 6e 28 29 20        fn main() 
a910: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
a920: 20 20 70 72 69 6e 74 6c 6e 21 28 22 63 61 72 67    println!("carg
a930: 6f 3a 72 75 73 74 63 2d 6c 69 6e 6b 2d 73 65 61  o:rustc-link-sea
a940: 72 63 68 3d 74 65 73 74 22 29 3b 0a 20 20 20 20  rch=test");.    
a950: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
a960: 20 20 22 23 29 3b 0a 0a 20 20 20 20 61 73 73 65    "#);..    asse
a970: 72 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f  rt_that(p.cargo_
a980: 70 72 6f 63 65 73 73 28 22 74 65 73 74 22 29 2e  process("test").
a990: 61 72 67 28 22 2d 76 22 29 2e 61 72 67 28 22 2d  arg("-v").arg("-
a9a0: 2d 74 65 73 74 3d 66 6f 6f 22 29 2c 0a 20 20 20  -test=foo"),.   
a9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78 65               exe
a9c0: 63 73 28 29 2e 77 69 74 68 5f 73 74 61 74 75 73  cs().with_status
a9d0: 28 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  (0).            
a9e0: 20 20 20 20 20 20 20 20 20 20 20 2e 77 69 74 68             .with
a9f0: 5f 73 74 64 65 72 72 28 22 5c 0a 5b 43 4f 4d 50  _stderr("\.[COMP
aa00: 49 4c 49 4e 47 5d 20 61 20 76 30 2e 35 2e 30 20  ILING] a v0.5.0 
aa10: 28 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e 47 5d 20  ([..].[RUNNING] 
aa20: 60 72 75 73 74 63 20 5b 2e 2e 5d 20 61 5b 2f 5d  `rustc [..] a[/]
aa30: 62 75 69 6c 64 2e 72 73 20 5b 2e 2e 5d 60 0a 5b  build.rs [..]`.[
aa40: 52 55 4e 4e 49 4e 47 5d 20 60 5b 2e 2e 5d 5b 2f  RUNNING] `[..][/
aa50: 5d 62 75 69 6c 64 2d 73 63 72 69 70 74 2d 62 75  ]build-script-bu
aa60: 69 6c 64 60 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60  ild`.[RUNNING] `
aa70: 72 75 73 74 63 20 5b 2e 2e 5d 20 61 5b 2f 5d 73  rustc [..] a[/]s
aa80: 72 63 5b 2f 5d 6c 69 62 2e 72 73 20 5b 2e 2e 5d  rc[/]lib.rs [..]
aa90: 20 2d 4c 20 74 65 73 74 5b 2e 2e 5d 60 0a 5b 43   -L test[..]`.[C
aaa0: 4f 4d 50 49 4c 49 4e 47 5d 20 62 20 76 30 2e 35  OMPILING] b v0.5
aab0: 2e 30 20 28 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e  .0 ([..].[RUNNIN
aac0: 47 5d 20 60 72 75 73 74 63 20 5b 2e 2e 5d 20 62  G] `rustc [..] b
aad0: 5b 2f 5d 73 72 63 5b 2f 5d 6c 69 62 2e 72 73 20  [/]src[/]lib.rs 
aae0: 5b 2e 2e 5d 20 2d 4c 20 74 65 73 74 5b 2e 2e 5d  [..] -L test[..]
aaf0: 60 0a 5b 43 4f 4d 50 49 4c 49 4e 47 5d 20 66 6f  `.[COMPILING] fo
ab00: 6f 20 76 30 2e 35 2e 30 20 28 5b 2e 2e 5d 0a 5b  o v0.5.0 ([..].[
ab10: 52 55 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63 20  RUNNING] `rustc 
ab20: 5b 2e 2e 5d 20 73 72 63 5b 2f 5d 6c 69 62 2e 72  [..] src[/]lib.r
ab30: 73 20 5b 2e 2e 5d 20 2d 4c 20 74 65 73 74 5b 2e  s [..] -L test[.
ab40: 2e 5d 60 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60 72  .]`.[RUNNING] `r
ab50: 75 73 74 63 20 5b 2e 2e 5d 20 74 65 73 74 73 5b  ustc [..] tests[
ab60: 2f 5d 66 6f 6f 2e 72 73 20 5b 2e 2e 5d 20 2d 4c  /]foo.rs [..] -L
ab70: 20 74 65 73 74 5b 2e 2e 5d 60 0a 5b 46 49 4e 49   test[..]`.[FINI
ab80: 53 48 45 44 5d 20 64 65 76 20 5b 75 6e 6f 70 74  SHED] dev [unopt
ab90: 69 6d 69 7a 65 64 20 2b 20 64 65 62 75 67 69 6e  imized + debugin
aba0: 66 6f 5d 20 74 61 72 67 65 74 28 73 29 20 69 6e  fo] target(s) in
abb0: 20 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e 47 5d 20   [..].[RUNNING] 
abc0: 60 5b 2e 2e 5d 5b 2f 5d 66 6f 6f 2d 5b 2e 2e 5d  `[..][/]foo-[..]
abd0: 5b 45 58 45 5d 60 22 29 0a 20 20 20 20 20 20 20  [EXE]`").       
abe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abf0: 2e 77 69 74 68 5f 73 74 64 6f 75 74 28 22 0a 72  .with_stdout(".r
ac00: 75 6e 6e 69 6e 67 20 30 20 74 65 73 74 73 0a 0a  unning 0 tests..
ac10: 74 65 73 74 20 72 65 73 75 6c 74 3a 20 6f 6b 2e  test result: ok.
ac20: 20 30 20 70 61 73 73 65 64 3b 20 30 20 66 61 69   0 passed; 0 fai
ac30: 6c 65 64 3b 20 30 20 69 67 6e 6f 72 65 64 3b 20  led; 0 ignored; 
ac40: 30 20 6d 65 61 73 75 72 65 64 0a 0a 22 29 29 3b  0 measured.."));
ac50: 0a 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68 61  ..    assert_tha
ac60: 74 28 70 2e 63 61 72 67 6f 28 22 74 65 73 74 22  t(p.cargo("test"
ac70: 29 2e 61 72 67 28 22 2d 76 22 29 2e 61 72 67 28  ).arg("-v").arg(
ac80: 22 2d 70 62 22 29 2e 61 72 67 28 22 2d 2d 6c 69  "-pb").arg("--li
ac90: 62 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  b"),.           
aca0: 20 20 20 20 20 65 78 65 63 73 28 29 2e 77 69 74       execs().wit
acb0: 68 5f 73 74 61 74 75 73 28 30 29 0a 20 20 20 20  h_status(0).    
acc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acd0: 20 20 20 2e 77 69 74 68 5f 73 74 64 65 72 72 28     .with_stderr(
ace0: 22 5c 0a 5b 46 52 45 53 48 5d 20 61 20 76 30 2e  "\.[FRESH] a v0.
acf0: 35 2e 30 20 28 5b 2e 2e 5d 0a 5b 43 4f 4d 50 49  5.0 ([..].[COMPI
ad00: 4c 49 4e 47 5d 20 62 20 76 30 2e 35 2e 30 20 28  LING] b v0.5.0 (
ad10: 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60  [..].[RUNNING] `
ad20: 72 75 73 74 63 20 5b 2e 2e 5d 20 62 5b 2f 5d 73  rustc [..] b[/]s
ad30: 72 63 5b 2f 5d 6c 69 62 2e 72 73 20 5b 2e 2e 5d  rc[/]lib.rs [..]
ad40: 20 2d 4c 20 74 65 73 74 5b 2e 2e 5d 60 0a 5b 46   -L test[..]`.[F
ad50: 49 4e 49 53 48 45 44 5d 20 64 65 76 20 5b 75 6e  INISHED] dev [un
ad60: 6f 70 74 69 6d 69 7a 65 64 20 2b 20 64 65 62 75  optimized + debu
ad70: 67 69 6e 66 6f 5d 20 74 61 72 67 65 74 28 73 29  ginfo] target(s)
ad80: 20 69 6e 20 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e   in [..].[RUNNIN
ad90: 47 5d 20 60 5b 2e 2e 5d 5b 2f 5d 62 2d 5b 2e 2e  G] `[..][/]b-[..
ada0: 5d 5b 45 58 45 5d 60 22 29 0a 20 20 20 20 20 20  ][EXE]`").      
adb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
adc0: 20 2e 77 69 74 68 5f 73 74 64 6f 75 74 28 22 0a   .with_stdout(".
add0: 72 75 6e 6e 69 6e 67 20 30 20 74 65 73 74 73 0a  running 0 tests.
ade0: 0a 74 65 73 74 20 72 65 73 75 6c 74 3a 20 6f 6b  .test result: ok
adf0: 2e 20 30 20 70 61 73 73 65 64 3b 20 30 20 66 61  . 0 passed; 0 fa
ae00: 69 6c 65 64 3b 20 30 20 69 67 6e 6f 72 65 64 3b  iled; 0 ignored;
ae10: 20 30 20 6d 65 61 73 75 72 65 64 0a 0a 22 29 29   0 measured.."))
ae20: 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66 6e 20  ;.}..#[test].fn 
ae30: 64 69 61 6d 6f 6e 64 5f 70 61 73 73 65 73 5f 61  diamond_passes_a
ae40: 72 67 73 5f 6f 6e 6c 79 5f 6f 6e 63 65 28 29 20  rgs_only_once() 
ae50: 7b 0a 20 20 20 20 6c 65 74 20 70 20 3d 20 70 72  {.    let p = pr
ae60: 6f 6a 65 63 74 28 22 66 6f 6f 22 29 0a 20 20 20  oject("foo").   
ae70: 20 20 20 20 20 2e 66 69 6c 65 28 22 43 61 72 67       .file("Carg
ae80: 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20  o.toml", r#".   
ae90: 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65 63           [projec
aea0: 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  t].            n
aeb0: 61 6d 65 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20  ame = "foo".    
aec0: 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20          version 
aed0: 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20 20  = "0.5.0".      
aee0: 20 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20        authors = 
aef0: 5b 5d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  []..            
af00: 5b 64 65 70 65 6e 64 65 6e 63 69 65 73 5d 0a 20  [dependencies]. 
af10: 20 20 20 20 20 20 20 20 20 20 20 61 20 3d 20 7b             a = {
af20: 20 70 61 74 68 20 3d 20 22 61 22 20 7d 0a 20 20   path = "a" }.  
af30: 20 20 20 20 20 20 20 20 20 20 62 20 3d 20 7b 20            b = { 
af40: 70 61 74 68 20 3d 20 22 62 22 20 7d 0a 20 20 20  path = "b" }.   
af50: 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20 20       "#).       
af60: 20 2e 66 69 6c 65 28 22 73 72 63 2f 6c 69 62 2e   .file("src/lib.
af70: 72 73 22 2c 20 22 22 29 0a 20 20 20 20 20 20 20  rs", "").       
af80: 20 2e 66 69 6c 65 28 22 74 65 73 74 73 2f 66 6f   .file("tests/fo
af90: 6f 2e 72 73 22 2c 20 22 22 29 0a 20 20 20 20 20  o.rs", "").     
afa0: 20 20 20 2e 66 69 6c 65 28 22 61 2f 43 61 72 67     .file("a/Carg
afb0: 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20  o.toml", r#".   
afc0: 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65 63           [projec
afd0: 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  t].            n
afe0: 61 6d 65 20 3d 20 22 61 22 0a 20 20 20 20 20 20  ame = "a".      
aff0: 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20        version = 
b000: 22 30 2e 35 2e 30 22 0a 20 20 20 20 20 20 20 20  "0.5.0".        
b010: 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d      authors = []
b020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 64 65  .            [de
b030: 70 65 6e 64 65 6e 63 69 65 73 5d 0a 20 20 20 20  pendencies].    
b040: 20 20 20 20 20 20 20 20 62 20 3d 20 7b 20 70 61          b = { pa
b050: 74 68 20 3d 20 22 2e 2e 2f 62 22 20 7d 0a 20 20  th = "../b" }.  
b060: 20 20 20 20 20 20 20 20 20 20 63 20 3d 20 7b 20            c = { 
b070: 70 61 74 68 20 3d 20 22 2e 2e 2f 63 22 20 7d 0a  path = "../c" }.
b080: 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20          "#).    
b090: 20 20 20 20 2e 66 69 6c 65 28 22 61 2f 73 72 63      .file("a/src
b0a0: 2f 6c 69 62 2e 72 73 22 2c 20 22 22 29 0a 20 20  /lib.rs", "").  
b0b0: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 62 2f 43        .file("b/C
b0c0: 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a  argo.toml", r#".
b0d0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f              [pro
b0e0: 6a 65 63 74 5d 0a 20 20 20 20 20 20 20 20 20 20  ject].          
b0f0: 20 20 6e 61 6d 65 20 3d 20 22 62 22 0a 20 20 20    name = "b".   
b100: 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e           version
b110: 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20   = "0.5.0".     
b120: 20 20 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d         authors =
b130: 20 5b 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20   [].            
b140: 5b 64 65 70 65 6e 64 65 6e 63 69 65 73 5d 0a 20  [dependencies]. 
b150: 20 20 20 20 20 20 20 20 20 20 20 63 20 3d 20 7b             c = {
b160: 20 70 61 74 68 20 3d 20 22 2e 2e 2f 63 22 20 7d   path = "../c" }
b170: 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20  .        "#).   
b180: 20 20 20 20 20 2e 66 69 6c 65 28 22 62 2f 73 72       .file("b/sr
b190: 63 2f 6c 69 62 2e 72 73 22 2c 20 22 22 29 0a 20  c/lib.rs", ""). 
b1a0: 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 63 2f         .file("c/
b1b0: 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22  Cargo.toml", r#"
b1c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 72  .            [pr
b1d0: 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20 20 20 20  oject].         
b1e0: 20 20 20 6e 61 6d 65 20 3d 20 22 63 22 0a 20 20     name = "c".  
b1f0: 20 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f            versio
b200: 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20  n = "0.5.0".    
b210: 20 20 20 20 20 20 20 20 61 75 74 68 6f 72 73 20          authors 
b220: 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20 20 20 20  = [].           
b230: 20 62 75 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e   build = "build.
b240: 72 73 22 0a 20 20 20 20 20 20 20 20 22 23 29 0a  rs".        "#).
b250: 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 63          .file("c
b260: 2f 62 75 69 6c 64 2e 72 73 22 2c 20 72 23 22 0a  /build.rs", r#".
b270: 20 20 20 20 20 20 20 20 20 20 20 20 66 6e 20 6d              fn m
b280: 61 69 6e 28 29 20 7b 0a 20 20 20 20 20 20 20 20  ain() {.        
b290: 20 20 20 20 20 20 20 20 70 72 69 6e 74 6c 6e 21          println!
b2a0: 28 22 63 61 72 67 6f 3a 72 75 73 74 63 2d 6c 69  ("cargo:rustc-li
b2b0: 6e 6b 2d 73 65 61 72 63 68 3d 6e 61 74 69 76 65  nk-search=native
b2c0: 3d 74 65 73 74 22 29 3b 0a 20 20 20 20 20 20 20  =test");.       
b2d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 22       }.        "
b2e0: 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  #).        .file
b2f0: 28 22 63 2f 73 72 63 2f 6c 69 62 2e 72 73 22 2c  ("c/src/lib.rs",
b300: 20 22 22 29 3b 0a 0a 20 20 20 20 61 73 73 65 72   "");..    asser
b310: 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f 70  t_that(p.cargo_p
b320: 72 6f 63 65 73 73 28 22 62 75 69 6c 64 22 29 2e  rocess("build").
b330: 61 72 67 28 22 2d 76 22 29 2c 0a 20 20 20 20 20  arg("-v"),.     
b340: 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63 73             execs
b350: 28 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30  ().with_status(0
b360: 29 2e 77 69 74 68 5f 73 74 64 65 72 72 28 22 5c  ).with_stderr("\
b370: 0a 5b 43 4f 4d 50 49 4c 49 4e 47 5d 20 63 20 76  .[COMPILING] c v
b380: 30 2e 35 2e 30 20 28 5b 2e 2e 5d 0a 5b 52 55 4e  0.5.0 ([..].[RUN
b390: 4e 49 4e 47 5d 20 60 72 75 73 74 63 20 5b 2e 2e  NING] `rustc [..
b3a0: 5d 60 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60 5b 2e  ]`.[RUNNING] `[.
b3b0: 2e 5d 60 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60 72  .]`.[RUNNING] `r
b3c0: 75 73 74 63 20 5b 2e 2e 5d 60 0a 5b 43 4f 4d 50  ustc [..]`.[COMP
b3d0: 49 4c 49 4e 47 5d 20 62 20 76 30 2e 35 2e 30 20  ILING] b v0.5.0 
b3e0: 28 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e 47 5d 20  ([..].[RUNNING] 
b3f0: 60 72 75 73 74 63 20 5b 2e 2e 5d 60 0a 5b 43 4f  `rustc [..]`.[CO
b400: 4d 50 49 4c 49 4e 47 5d 20 61 20 76 30 2e 35 2e  MPILING] a v0.5.
b410: 30 20 28 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e 47  0 ([..].[RUNNING
b420: 5d 20 60 72 75 73 74 63 20 5b 2e 2e 5d 60 0a 5b  ] `rustc [..]`.[
b430: 43 4f 4d 50 49 4c 49 4e 47 5d 20 66 6f 6f 20 76  COMPILING] foo v
b440: 30 2e 35 2e 30 20 28 5b 2e 2e 5d 0a 5b 52 55 4e  0.5.0 ([..].[RUN
b450: 4e 49 4e 47 5d 20 60 5b 2e 2e 5d 72 6c 69 62 20  NING] `[..]rlib 
b460: 2d 4c 20 6e 61 74 69 76 65 3d 74 65 73 74 60 0a  -L native=test`.
b470: 5b 46 49 4e 49 53 48 45 44 5d 20 64 65 76 20 5b  [FINISHED] dev [
b480: 75 6e 6f 70 74 69 6d 69 7a 65 64 20 2b 20 64 65  unoptimized + de
b490: 62 75 67 69 6e 66 6f 5d 20 74 61 72 67 65 74 28  buginfo] target(
b4a0: 73 29 20 69 6e 20 5b 2e 2e 5d 0a 22 29 29 3b 0a  s) in [..]."));.
b4b0: 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66 6e 20 61 64  }..#[test].fn ad
b4c0: 64 69 6e 67 5f 61 6e 5f 6f 76 65 72 72 69 64 65  ding_an_override
b4d0: 5f 69 6e 76 61 6c 69 64 61 74 65 73 28 29 20 7b  _invalidates() {
b4e0: 0a 20 20 20 20 6c 65 74 20 74 61 72 67 65 74 20  .    let target 
b4f0: 3d 20 72 75 73 74 63 5f 68 6f 73 74 28 29 3b 0a  = rustc_host();.
b500: 20 20 20 20 6c 65 74 20 70 20 3d 20 70 72 6f 6a      let p = proj
b510: 65 63 74 28 22 66 6f 6f 22 29 0a 20 20 20 20 20  ect("foo").     
b520: 20 20 20 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e     .file("Cargo.
b530: 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20  toml", r#".     
b540: 20 20 20 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d         [project]
b550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d  .            nam
b560: 65 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20 20  e = "foo".      
b570: 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20        version = 
b580: 22 30 2e 35 2e 30 22 0a 20 20 20 20 20 20 20 20  "0.5.0".        
b590: 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d      authors = []
b5a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e  .            lin
b5b0: 6b 73 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20  ks = "foo".     
b5c0: 20 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22         build = "
b5d0: 62 75 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20  build.rs".      
b5e0: 20 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66    "#).        .f
b5f0: 69 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72 73 22  ile("src/lib.rs"
b600: 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66  , "").        .f
b610: 69 6c 65 28 22 2e 63 61 72 67 6f 2f 63 6f 6e 66  ile(".cargo/conf
b620: 69 67 22 2c 20 22 22 29 0a 20 20 20 20 20 20 20  ig", "").       
b630: 20 2e 66 69 6c 65 28 22 62 75 69 6c 64 2e 72 73   .file("build.rs
b640: 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20  ", r#".         
b650: 20 20 20 66 6e 20 6d 61 69 6e 28 29 20 7b 0a 20     fn main() {. 
b660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
b670: 72 69 6e 74 6c 6e 21 28 22 63 61 72 67 6f 3a 72  rintln!("cargo:r
b680: 75 73 74 63 2d 6c 69 6e 6b 2d 73 65 61 72 63 68  ustc-link-search
b690: 3d 6e 61 74 69 76 65 3d 66 6f 6f 22 29 3b 0a 20  =native=foo");. 
b6a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
b6b0: 20 20 20 20 20 22 23 29 3b 0a 0a 20 20 20 20 61       "#);..    a
b6c0: 73 73 65 72 74 5f 74 68 61 74 28 70 2e 63 61 72  ssert_that(p.car
b6d0: 67 6f 5f 70 72 6f 63 65 73 73 28 22 62 75 69 6c  go_process("buil
b6e0: 64 22 29 2e 61 72 67 28 22 2d 76 22 29 2c 0a 20  d").arg("-v"),. 
b6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
b700: 78 65 63 73 28 29 2e 77 69 74 68 5f 73 74 61 74  xecs().with_stat
b710: 75 73 28 30 29 2e 77 69 74 68 5f 73 74 64 65 72  us(0).with_stder
b720: 72 28 22 5c 0a 5b 43 4f 4d 50 49 4c 49 4e 47 5d  r("\.[COMPILING]
b730: 20 66 6f 6f 20 76 30 2e 35 2e 30 20 28 5b 2e 2e   foo v0.5.0 ([..
b740: 5d 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60 72 75 73  ].[RUNNING] `rus
b750: 74 63 20 5b 2e 2e 5d 60 0a 5b 52 55 4e 4e 49 4e  tc [..]`.[RUNNIN
b760: 47 5d 20 60 5b 2e 2e 5d 60 0a 5b 52 55 4e 4e 49  G] `[..]`.[RUNNI
b770: 4e 47 5d 20 60 72 75 73 74 63 20 5b 2e 2e 5d 20  NG] `rustc [..] 
b780: 2d 4c 20 6e 61 74 69 76 65 3d 66 6f 6f 60 0a 5b  -L native=foo`.[
b790: 46 49 4e 49 53 48 45 44 5d 20 64 65 76 20 5b 75  FINISHED] dev [u
b7a0: 6e 6f 70 74 69 6d 69 7a 65 64 20 2b 20 64 65 62  noptimized + deb
b7b0: 75 67 69 6e 66 6f 5d 20 74 61 72 67 65 74 28 73  uginfo] target(s
b7c0: 29 20 69 6e 20 5b 2e 2e 5d 0a 22 29 29 3b 0a 0a  ) in [..]."));..
b7d0: 20 20 20 20 46 69 6c 65 3a 3a 63 72 65 61 74 65      File::create
b7e0: 28 70 2e 72 6f 6f 74 28 29 2e 6a 6f 69 6e 28 22  (p.root().join("
b7f0: 2e 63 61 72 67 6f 2f 63 6f 6e 66 69 67 22 29 29  .cargo/config"))
b800: 2e 75 6e 77 72 61 70 28 29 2e 77 72 69 74 65 5f  .unwrap().write_
b810: 61 6c 6c 28 66 6f 72 6d 61 74 21 28 22 0a 20 20  all(format!(".  
b820: 20 20 20 20 20 20 5b 74 61 72 67 65 74 2e 7b 7d        [target.{}
b830: 2e 66 6f 6f 5d 0a 20 20 20 20 20 20 20 20 72 75  .foo].        ru
b840: 73 74 63 2d 6c 69 6e 6b 2d 73 65 61 72 63 68 20  stc-link-search 
b850: 3d 20 5b 5c 22 6e 61 74 69 76 65 3d 62 61 72 5c  = [\"native=bar\
b860: 22 5d 0a 20 20 20 20 22 2c 20 74 61 72 67 65 74  "].    ", target
b870: 29 2e 61 73 5f 62 79 74 65 73 28 29 29 2e 75 6e  ).as_bytes()).un
b880: 77 72 61 70 28 29 3b 0a 0a 20 20 20 20 61 73 73  wrap();..    ass
b890: 65 72 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f  ert_that(p.cargo
b8a0: 28 22 62 75 69 6c 64 22 29 2e 61 72 67 28 22 2d  ("build").arg("-
b8b0: 76 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  v"),.           
b8c0: 20 20 20 20 20 65 78 65 63 73 28 29 2e 77 69 74       execs().wit
b8d0: 68 5f 73 74 61 74 75 73 28 30 29 2e 77 69 74 68  h_status(0).with
b8e0: 5f 73 74 64 65 72 72 28 22 5c 0a 5b 43 4f 4d 50  _stderr("\.[COMP
b8f0: 49 4c 49 4e 47 5d 20 66 6f 6f 20 76 30 2e 35 2e  ILING] foo v0.5.
b900: 30 20 28 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e 47  0 ([..].[RUNNING
b910: 5d 20 60 72 75 73 74 63 20 5b 2e 2e 5d 20 2d 4c  ] `rustc [..] -L
b920: 20 6e 61 74 69 76 65 3d 62 61 72 60 0a 5b 46 49   native=bar`.[FI
b930: 4e 49 53 48 45 44 5d 20 64 65 76 20 5b 75 6e 6f  NISHED] dev [uno
b940: 70 74 69 6d 69 7a 65 64 20 2b 20 64 65 62 75 67  ptimized + debug
b950: 69 6e 66 6f 5d 20 74 61 72 67 65 74 28 73 29 20  info] target(s) 
b960: 69 6e 20 5b 2e 2e 5d 0a 22 29 29 3b 0a 7d 0a 0a  in [..]."));.}..
b970: 23 5b 74 65 73 74 5d 0a 66 6e 20 63 68 61 6e 67  #[test].fn chang
b980: 69 6e 67 5f 61 6e 5f 6f 76 65 72 72 69 64 65 5f  ing_an_override_
b990: 69 6e 76 61 6c 69 64 61 74 65 73 28 29 20 7b 0a  invalidates() {.
b9a0: 20 20 20 20 6c 65 74 20 74 61 72 67 65 74 20 3d      let target =
b9b0: 20 72 75 73 74 63 5f 68 6f 73 74 28 29 3b 0a 20   rustc_host();. 
b9c0: 20 20 20 6c 65 74 20 70 20 3d 20 70 72 6f 6a 65     let p = proje
b9d0: 63 74 28 22 66 6f 6f 22 29 0a 20 20 20 20 20 20  ct("foo").      
b9e0: 20 20 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e 74    .file("Cargo.t
b9f0: 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20  oml", r#".      
ba00: 20 20 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d 0a        [project].
ba10: 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65              name
ba20: 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20 20 20   = "foo".       
ba30: 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22       version = "
ba40: 30 2e 35 2e 30 22 0a 20 20 20 20 20 20 20 20 20  0.5.0".         
ba50: 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a     authors = [].
ba60: 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 6b              link
ba70: 73 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20 20  s = "foo".      
ba80: 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22 62        build = "b
ba90: 75 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20 20  uild.rs".       
baa0: 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69   "#).        .fi
bab0: 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72 73 22 2c  le("src/lib.rs",
bac0: 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69   "").        .fi
bad0: 6c 65 28 22 2e 63 61 72 67 6f 2f 63 6f 6e 66 69  le(".cargo/confi
bae0: 67 22 2c 20 26 66 6f 72 6d 61 74 21 28 22 0a 20  g", &format!(". 
baf0: 20 20 20 20 20 20 20 20 20 20 20 5b 74 61 72 67             [targ
bb00: 65 74 2e 7b 7d 2e 66 6f 6f 5d 0a 20 20 20 20 20  et.{}.foo].     
bb10: 20 20 20 20 20 20 20 72 75 73 74 63 2d 6c 69 6e         rustc-lin
bb20: 6b 2d 73 65 61 72 63 68 20 3d 20 5b 5c 22 6e 61  k-search = [\"na
bb30: 74 69 76 65 3d 66 6f 6f 5c 22 5d 0a 20 20 20 20  tive=foo\"].    
bb40: 20 20 20 20 22 2c 20 74 61 72 67 65 74 29 29 0a      ", target)).
bb50: 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 62          .file("b
bb60: 75 69 6c 64 2e 72 73 22 2c 20 22 22 29 3b 0a 0a  uild.rs", "");..
bb70: 20 20 20 20 61 73 73 65 72 74 5f 74 68 61 74 28      assert_that(
bb80: 70 2e 63 61 72 67 6f 5f 70 72 6f 63 65 73 73 28  p.cargo_process(
bb90: 22 62 75 69 6c 64 22 29 2e 61 72 67 28 22 2d 76  "build").arg("-v
bba0: 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  "),.            
bbb0: 20 20 20 20 65 78 65 63 73 28 29 2e 77 69 74 68      execs().with
bbc0: 5f 73 74 61 74 75 73 28 30 29 2e 77 69 74 68 5f  _status(0).with_
bbd0: 73 74 64 65 72 72 28 22 5c 0a 5b 43 4f 4d 50 49  stderr("\.[COMPI
bbe0: 4c 49 4e 47 5d 20 66 6f 6f 20 76 30 2e 35 2e 30  LING] foo v0.5.0
bbf0: 20 28 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e 47 5d   ([..].[RUNNING]
bc00: 20 60 72 75 73 74 63 20 5b 2e 2e 5d 20 2d 4c 20   `rustc [..] -L 
bc10: 6e 61 74 69 76 65 3d 66 6f 6f 60 0a 5b 46 49 4e  native=foo`.[FIN
bc20: 49 53 48 45 44 5d 20 64 65 76 20 5b 75 6e 6f 70  ISHED] dev [unop
bc30: 74 69 6d 69 7a 65 64 20 2b 20 64 65 62 75 67 69  timized + debugi
bc40: 6e 66 6f 5d 20 74 61 72 67 65 74 28 73 29 20 69  nfo] target(s) i
bc50: 6e 20 5b 2e 2e 5d 0a 22 29 29 3b 0a 0a 20 20 20  n [..]."));..   
bc60: 20 46 69 6c 65 3a 3a 63 72 65 61 74 65 28 70 2e   File::create(p.
bc70: 72 6f 6f 74 28 29 2e 6a 6f 69 6e 28 22 2e 63 61  root().join(".ca
bc80: 72 67 6f 2f 63 6f 6e 66 69 67 22 29 29 2e 75 6e  rgo/config")).un
bc90: 77 72 61 70 28 29 2e 77 72 69 74 65 5f 61 6c 6c  wrap().write_all
bca0: 28 66 6f 72 6d 61 74 21 28 22 0a 20 20 20 20 20  (format!(".     
bcb0: 20 20 20 5b 74 61 72 67 65 74 2e 7b 7d 2e 66 6f     [target.{}.fo
bcc0: 6f 5d 0a 20 20 20 20 20 20 20 20 72 75 73 74 63  o].        rustc
bcd0: 2d 6c 69 6e 6b 2d 73 65 61 72 63 68 20 3d 20 5b  -link-search = [
bce0: 5c 22 6e 61 74 69 76 65 3d 62 61 72 5c 22 5d 0a  \"native=bar\"].
bcf0: 20 20 20 20 22 2c 20 74 61 72 67 65 74 29 2e 61      ", target).a
bd00: 73 5f 62 79 74 65 73 28 29 29 2e 75 6e 77 72 61  s_bytes()).unwra
bd10: 70 28 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74  p();..    assert
bd20: 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 28 22 62  _that(p.cargo("b
bd30: 75 69 6c 64 22 29 2e 61 72 67 28 22 2d 76 22 29  uild").arg("-v")
bd40: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
bd50: 20 20 65 78 65 63 73 28 29 2e 77 69 74 68 5f 73    execs().with_s
bd60: 74 61 74 75 73 28 30 29 2e 77 69 74 68 5f 73 74  tatus(0).with_st
bd70: 64 65 72 72 28 22 5c 0a 5b 43 4f 4d 50 49 4c 49  derr("\.[COMPILI
bd80: 4e 47 5d 20 66 6f 6f 20 76 30 2e 35 2e 30 20 28  NG] foo v0.5.0 (
bd90: 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60  [..].[RUNNING] `
bda0: 72 75 73 74 63 20 5b 2e 2e 5d 20 2d 4c 20 6e 61  rustc [..] -L na
bdb0: 74 69 76 65 3d 62 61 72 60 0a 5b 46 49 4e 49 53  tive=bar`.[FINIS
bdc0: 48 45 44 5d 20 64 65 76 20 5b 75 6e 6f 70 74 69  HED] dev [unopti
bdd0: 6d 69 7a 65 64 20 2b 20 64 65 62 75 67 69 6e 66  mized + debuginf
bde0: 6f 5d 20 74 61 72 67 65 74 28 73 29 20 69 6e 20  o] target(s) in 
bdf0: 5b 2e 2e 5d 0a 22 29 29 3b 0a 7d 0a 0a 0a 23 5b  [..]."));.}...#[
be00: 74 65 73 74 5d 0a 66 6e 20 66 72 65 73 68 5f 62  test].fn fresh_b
be10: 75 69 6c 64 73 5f 70 6f 73 73 69 62 6c 65 5f 77  uilds_possible_w
be20: 69 74 68 5f 6c 69 6e 6b 5f 6c 69 62 73 28 29 20  ith_link_libs() 
be30: 7b 0a 20 20 20 20 2f 2f 20 54 68 65 20 62 75 67  {.    // The bug
be40: 20 69 73 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e   is non-determin
be50: 69 73 74 69 63 2e 20 53 6f 6d 65 74 69 6d 65 73  istic. Sometimes
be60: 20 79 6f 75 20 63 61 6e 20 67 65 74 20 61 20 66   you can get a f
be70: 72 65 73 68 20 62 75 69 6c 64 0a 20 20 20 20 6c  resh build.    l
be80: 65 74 20 74 61 72 67 65 74 20 3d 20 72 75 73 74  et target = rust
be90: 63 5f 68 6f 73 74 28 29 3b 0a 20 20 20 20 6c 65  c_host();.    le
bea0: 74 20 70 20 3d 20 70 72 6f 6a 65 63 74 28 22 66  t p = project("f
beb0: 6f 6f 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69  oo").        .fi
bec0: 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c  le("Cargo.toml",
bed0: 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20   r#".           
bee0: 20 5b 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20   [project].     
bef0: 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 66         name = "f
bf00: 6f 6f 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  oo".            
bf10: 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30  version = "0.5.0
bf20: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 75  ".            au
bf30: 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20  thors = [].     
bf40: 20 20 20 20 20 20 20 6c 69 6e 6b 73 20 3d 20 22         links = "
bf50: 6e 61 74 69 76 65 66 6f 6f 22 0a 20 20 20 20 20  nativefoo".     
bf60: 20 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22         build = "
bf70: 62 75 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20  build.rs".      
bf80: 20 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66    "#).        .f
bf90: 69 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72 73 22  ile("src/lib.rs"
bfa0: 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66  , "").        .f
bfb0: 69 6c 65 28 22 2e 63 61 72 67 6f 2f 63 6f 6e 66  ile(".cargo/conf
bfc0: 69 67 22 2c 20 26 66 6f 72 6d 61 74 21 28 22 0a  ig", &format!(".
bfd0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 74 61 72              [tar
bfe0: 67 65 74 2e 7b 7d 2e 6e 61 74 69 76 65 66 6f 6f  get.{}.nativefoo
bff0: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 75  ].            ru
c000: 73 74 63 2d 6c 69 6e 6b 2d 6c 69 62 20 3d 20 5b  stc-link-lib = [
c010: 5c 22 61 5c 22 5d 0a 20 20 20 20 20 20 20 20 20  \"a\"].         
c020: 20 20 20 72 75 73 74 63 2d 6c 69 6e 6b 2d 73 65     rustc-link-se
c030: 61 72 63 68 20 3d 20 5b 5c 22 2e 2f 62 5c 22 5d  arch = [\"./b\"]
c040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 75 73  .            rus
c050: 74 63 2d 66 6c 61 67 73 20 3d 20 5c 22 2d 6c 20  tc-flags = \"-l 
c060: 7a 20 2d 4c 20 2e 2f 5c 22 0a 20 20 20 20 20 20  z -L ./\".      
c070: 20 20 22 2c 20 74 61 72 67 65 74 29 29 0a 20 20    ", target)).  
c080: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 62 75 69        .file("bui
c090: 6c 64 2e 72 73 22 2c 20 22 22 29 3b 0a 20 0a 20  ld.rs", "");. . 
c0a0: 20 20 20 61 73 73 65 72 74 5f 74 68 61 74 28 70     assert_that(p
c0b0: 2e 63 61 72 67 6f 5f 70 72 6f 63 65 73 73 28 22  .cargo_process("
c0c0: 62 75 69 6c 64 22 29 2e 61 72 67 28 22 2d 76 22  build").arg("-v"
c0d0: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
c0e0: 20 20 20 65 78 65 63 73 28 29 2e 77 69 74 68 5f     execs().with_
c0f0: 73 74 61 74 75 73 28 30 29 2e 77 69 74 68 5f 73  status(0).with_s
c100: 74 64 65 72 72 28 22 5c 0a 5b 43 4f 4d 50 49 4c  tderr("\.[COMPIL
c110: 49 4e 47 5d 20 66 6f 6f 20 76 30 2e 35 2e 30 20  ING] foo v0.5.0 
c120: 28 5b 2e 2e 5d 0a 5b 52 55 4e 4e 49 4e 47 5d 20  ([..].[RUNNING] 
c130: 60 72 75 73 74 63 20 5b 2e 2e 5d 60 0a 5b 46 49  `rustc [..]`.[FI
c140: 4e 49 53 48 45 44 5d 20 64 65 76 20 5b 75 6e 6f  NISHED] dev [uno
c150: 70 74 69 6d 69 7a 65 64 20 2b 20 64 65 62 75 67  ptimized + debug
c160: 69 6e 66 6f 5d 20 74 61 72 67 65 74 28 73 29 20  info] target(s) 
c170: 69 6e 20 5b 2e 2e 5d 0a 22 29 29 3b 0a 0a 20 20  in [..]."));..  
c180: 20 20 61 73 73 65 72 74 5f 74 68 61 74 28 70 2e    assert_that(p.
c190: 63 61 72 67 6f 28 22 62 75 69 6c 64 22 29 0a 20  cargo("build"). 
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1b0: 2e 61 72 67 28 22 2d 76 22 29 0a 20 20 20 20 20  .arg("-v").     
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 2e 65 6e 76              .env
c1d0: 28 22 52 55 53 54 5f 4c 4f 47 22 2c 20 22 63 61  ("RUST_LOG", "ca
c1e0: 72 67 6f 3a 3a 6f 70 73 3a 3a 63 61 72 67 6f 5f  rgo::ops::cargo_
c1f0: 72 75 73 74 63 3a 3a 66 69 6e 67 65 72 70 72 69  rustc::fingerpri
c200: 6e 74 3d 69 6e 66 6f 22 29 2c 0a 20 20 20 20 20  nt=info"),.     
c210: 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63 73             execs
c220: 28 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30  ().with_status(0
c230: 29 2e 77 69 74 68 5f 73 74 64 65 72 72 28 22 5c  ).with_stderr("\
c240: 0a 5b 46 52 45 53 48 5d 20 66 6f 6f 20 76 30 2e  .[FRESH] foo v0.
c250: 35 2e 30 20 28 5b 2e 2e 5d 29 0a 5b 46 49 4e 49  5.0 ([..]).[FINI
c260: 53 48 45 44 5d 20 64 65 76 20 5b 75 6e 6f 70 74  SHED] dev [unopt
c270: 69 6d 69 7a 65 64 20 2b 20 64 65 62 75 67 69 6e  imized + debugin
c280: 66 6f 5d 20 74 61 72 67 65 74 28 73 29 20 69 6e  fo] target(s) in
c290: 20 5b 2e 2e 5d 0a 22 29 29 3b 0a 7d 0a 0a 0a 23   [..]."));.}...#
c2a0: 5b 74 65 73 74 5d 0a 66 6e 20 66 72 65 73 68 5f  [test].fn fresh_
c2b0: 62 75 69 6c 64 73 5f 70 6f 73 73 69 62 6c 65 5f  builds_possible_
c2c0: 77 69 74 68 5f 6d 75 6c 74 69 70 6c 65 5f 6d 65  with_multiple_me
c2d0: 74 61 64 61 74 61 5f 6f 76 65 72 72 69 64 65 73  tadata_overrides
c2e0: 28 29 20 7b 0a 20 20 20 20 2f 2f 20 54 68 65 20  () {.    // The 
c2f0: 62 75 67 20 69 73 20 6e 6f 6e 2d 64 65 74 65 72  bug is non-deter
c300: 6d 69 6e 69 73 74 69 63 2e 20 53 6f 6d 65 74 69  ministic. Someti
c310: 6d 65 73 20 79 6f 75 20 63 61 6e 20 67 65 74 20  mes you can get 
c320: 61 20 66 72 65 73 68 20 62 75 69 6c 64 0a 20 20  a fresh build.  
c330: 20 20 6c 65 74 20 74 61 72 67 65 74 20 3d 20 72    let target = r
c340: 75 73 74 63 5f 68 6f 73 74 28 29 3b 0a 20 20 20  ustc_host();.   
c350: 20 6c 65 74 20 70 20 3d 20 70 72 6f 6a 65 63 74   let p = project
c360: 28 22 66 6f 6f 22 29 0a 20 20 20 20 20 20 20 20  ("foo").        
c370: 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d  .file("Cargo.tom
c380: 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20  l", r#".        
c390: 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 20 20      [project].  
c3a0: 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d            name =
c3b0: 20 22 66 6f 6f 22 0a 20 20 20 20 20 20 20 20 20   "foo".         
c3c0: 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e     version = "0.
c3d0: 35 2e 30 22 0a 20 20 20 20 20 20 20 20 20 20 20  5.0".           
c3e0: 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20   authors = [].  
c3f0: 20 20 20 20 20 20 20 20 20 20 6c 69 6e 6b 73 20            links 
c400: 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20 20 20 20  = "foo".        
c410: 20 20 20 20 62 75 69 6c 64 20 3d 20 22 62 75 69      build = "bui
c420: 6c 64 2e 72 73 22 0a 20 20 20 20 20 20 20 20 22  ld.rs".        "
c430: 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  #).        .file
c440: 28 22 73 72 63 2f 6c 69 62 2e 72 73 22 2c 20 22  ("src/lib.rs", "
c450: 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65  ").        .file
c460: 28 22 2e 63 61 72 67 6f 2f 63 6f 6e 66 69 67 22  (".cargo/config"
c470: 2c 20 26 66 6f 72 6d 61 74 21 28 22 0a 20 20 20  , &format!(".   
c480: 20 20 20 20 20 20 20 20 20 5b 74 61 72 67 65 74           [target
c490: 2e 7b 7d 2e 66 6f 6f 5d 0a 20 20 20 20 20 20 20  .{}.foo].       
c4a0: 20 20 20 20 20 61 20 3d 20 5c 22 5c 22 0a 20 20       a = \"\".  
c4b0: 20 20 20 20 20 20 20 20 20 20 62 20 3d 20 5c 22            b = \"
c4c0: 5c 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  \".            c
c4d0: 20 3d 20 5c 22 5c 22 0a 20 20 20 20 20 20 20 20   = \"\".        
c4e0: 20 20 20 20 64 20 3d 20 5c 22 5c 22 0a 20 20 20      d = \"\".   
c4f0: 20 20 20 20 20 20 20 20 20 65 20 3d 20 5c 22 5c           e = \"\
c500: 22 0a 20 20 20 20 20 20 20 20 22 2c 20 74 61 72  ".        ", tar
c510: 67 65 74 29 29 0a 20 20 20 20 20 20 20 20 2e 66  get)).        .f
c520: 69 6c 65 28 22 62 75 69 6c 64 2e 72 73 22 2c 20  ile("build.rs", 
c530: 22 22 29 3b 0a 20 0a 20 20 20 20 61 73 73 65 72  "");. .    asser
c540: 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f 70  t_that(p.cargo_p
c550: 72 6f 63 65 73 73 28 22 62 75 69 6c 64 22 29 2e  rocess("build").
c560: 61 72 67 28 22 2d 76 22 29 2c 0a 20 20 20 20 20  arg("-v"),.     
c570: 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63 73             execs
c580: 28 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30  ().with_status(0
c590: 29 2e 77 69 74 68 5f 73 74 64 65 72 72 28 22 5c  ).with_stderr("\
c5a0: 0a 5b 43 4f 4d 50 49 4c 49 4e 47 5d 20 66 6f 6f  .[COMPILING] foo
c5b0: 20 76 30 2e 35 2e 30 20 28 5b 2e 2e 5d 0a 5b 52   v0.5.0 ([..].[R
c5c0: 55 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63 20 5b  UNNING] `rustc [
c5d0: 2e 2e 5d 60 0a 5b 46 49 4e 49 53 48 45 44 5d 20  ..]`.[FINISHED] 
c5e0: 64 65 76 20 5b 75 6e 6f 70 74 69 6d 69 7a 65 64  dev [unoptimized
c5f0: 20 2b 20 64 65 62 75 67 69 6e 66 6f 5d 20 74 61   + debuginfo] ta
c600: 72 67 65 74 28 73 29 20 69 6e 20 5b 2e 2e 5d 0a  rget(s) in [..].
c610: 22 29 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74  "));..    assert
c620: 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 28 22 62  _that(p.cargo("b
c630: 75 69 6c 64 22 29 0a 20 20 20 20 20 20 20 20 20  uild").         
c640: 20 20 20 20 20 20 20 20 2e 61 72 67 28 22 2d 76          .arg("-v
c650: 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ").             
c660: 20 20 20 20 2e 65 6e 76 28 22 52 55 53 54 5f 4c      .env("RUST_L
c670: 4f 47 22 2c 20 22 63 61 72 67 6f 3a 3a 6f 70 73  OG", "cargo::ops
c680: 3a 3a 63 61 72 67 6f 5f 72 75 73 74 63 3a 3a 66  ::cargo_rustc::f
c690: 69 6e 67 65 72 70 72 69 6e 74 3d 69 6e 66 6f 22  ingerprint=info"
c6a0: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
c6b0: 20 20 20 65 78 65 63 73 28 29 2e 77 69 74 68 5f     execs().with_
c6c0: 73 74 61 74 75 73 28 30 29 2e 77 69 74 68 5f 73  status(0).with_s
c6d0: 74 64 65 72 72 28 22 5c 0a 5b 46 52 45 53 48 5d  tderr("\.[FRESH]
c6e0: 20 66 6f 6f 20 76 30 2e 35 2e 30 20 28 5b 2e 2e   foo v0.5.0 ([..
c6f0: 5d 29 0a 5b 46 49 4e 49 53 48 45 44 5d 20 64 65  ]).[FINISHED] de
c700: 76 20 5b 75 6e 6f 70 74 69 6d 69 7a 65 64 20 2b  v [unoptimized +
c710: 20 64 65 62 75 67 69 6e 66 6f 5d 20 74 61 72 67   debuginfo] targ
c720: 65 74 28 73 29 20 69 6e 20 5b 2e 2e 5d 0a 22 29  et(s) in [..].")
c730: 29 3b 0a 7d 0a 0a 0a 23 5b 74 65 73 74 5d 0a 66  );.}...#[test].f
c740: 6e 20 72 65 62 75 69 6c 64 5f 6f 6e 6c 79 5f 6f  n rebuild_only_o
c750: 6e 5f 65 78 70 6c 69 63 69 74 5f 70 61 74 68 73  n_explicit_paths
c760: 28 29 20 7b 0a 20 20 20 20 6c 65 74 20 70 20 3d  () {.    let p =
c770: 20 70 72 6f 6a 65 63 74 28 22 61 22 29 0a 20 20   project("a").  
c780: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 43 61 72        .file("Car
c790: 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20  go.toml", r#".  
c7a0: 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65            [proje
c7b0: 63 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ct].            
c7c0: 6e 61 6d 65 20 3d 20 22 61 22 0a 20 20 20 20 20  name = "a".     
c7d0: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d         version =
c7e0: 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20 20 20   "0.5.0".       
c7f0: 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b       authors = [
c800: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75  ].            bu
c810: 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22  ild = "build.rs"
c820: 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20  .        "#).   
c830: 20 20 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f       .file("src/
c840: 6c 69 62 2e 72 73 22 2c 20 22 22 29 0a 20 20 20  lib.rs", "").   
c850: 20 20 20 20 20 2e 66 69 6c 65 28 22 62 75 69 6c       .file("buil
c860: 64 2e 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20  d.rs", r#".     
c870: 20 20 20 20 20 20 20 66 6e 20 6d 61 69 6e 28 29         fn main()
c880: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
c890: 20 20 20 70 72 69 6e 74 6c 6e 21 28 22 63 61 72     println!("car
c8a0: 67 6f 3a 72 65 72 75 6e 2d 69 66 2d 63 68 61 6e  go:rerun-if-chan
c8b0: 67 65 64 3d 66 6f 6f 22 29 3b 0a 20 20 20 20 20  ged=foo");.     
c8c0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74             print
c8d0: 6c 6e 21 28 22 63 61 72 67 6f 3a 72 65 72 75 6e  ln!("cargo:rerun
c8e0: 2d 69 66 2d 63 68 61 6e 67 65 64 3d 62 61 72 22  -if-changed=bar"
c8f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
c900: 0a 20 20 20 20 20 20 20 20 22 23 29 3b 0a 20 20  .        "#);.  
c910: 20 20 70 2e 62 75 69 6c 64 28 29 3b 0a 0a 20 20    p.build();..  
c920: 20 20 61 73 73 65 72 74 5f 74 68 61 74 28 70 2e    assert_that(p.
c930: 63 61 72 67 6f 28 22 62 75 69 6c 64 22 29 2e 61  cargo("build").a
c940: 72 67 28 22 2d 76 22 29 2c 0a 20 20 20 20 20 20  rg("-v"),.      
c950: 20 20 20 20 20 20 20 20 20 20 65 78 65 63 73 28            execs(
c960: 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30 29  ).with_status(0)
c970: 29 3b 0a 0a 20 20 20 20 2f 2f 20 66 69 6c 65 73  );..    // files
c980: 20 64 6f 6e 27 74 20 65 78 69 73 74 2c 20 73 6f   don't exist, so
c990: 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 72   should always r
c9a0: 65 72 75 6e 20 69 66 20 74 68 65 79 20 64 6f 6e  erun if they don
c9b0: 27 74 20 65 78 69 73 74 0a 20 20 20 20 70 72 69  't exist.    pri
c9c0: 6e 74 6c 6e 21 28 22 72 75 6e 20 77 69 74 68 6f  ntln!("run witho
c9d0: 75 74 22 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ut");.    assert
c9e0: 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 28 22 62  _that(p.cargo("b
c9f0: 75 69 6c 64 22 29 2e 61 72 67 28 22 2d 76 22 29  uild").arg("-v")
ca00: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
ca10: 20 20 65 78 65 63 73 28 29 2e 77 69 74 68 5f 73    execs().with_s
ca20: 74 61 74 75 73 28 30 29 2e 77 69 74 68 5f 73 74  tatus(0).with_st
ca30: 64 65 72 72 28 22 5c 0a 5b 43 4f 4d 50 49 4c 49  derr("\.[COMPILI
ca40: 4e 47 5d 20 61 20 76 30 2e 35 2e 30 20 28 5b 2e  NG] a v0.5.0 ([.
ca50: 2e 5d 29 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60 5b  .]).[RUNNING] `[
ca60: 2e 2e 5d 5b 2f 5d 62 75 69 6c 64 2d 73 63 72 69  ..][/]build-scri
ca70: 70 74 2d 62 75 69 6c 64 60 0a 5b 52 55 4e 4e 49  pt-build`.[RUNNI
ca80: 4e 47 5d 20 60 72 75 73 74 63 20 5b 2e 2e 5d 20  NG] `rustc [..] 
ca90: 73 72 63 5b 2f 5d 6c 69 62 2e 72 73 20 5b 2e 2e  src[/]lib.rs [..
caa0: 5d 60 0a 5b 46 49 4e 49 53 48 45 44 5d 20 64 65  ]`.[FINISHED] de
cab0: 76 20 5b 75 6e 6f 70 74 69 6d 69 7a 65 64 20 2b  v [unoptimized +
cac0: 20 64 65 62 75 67 69 6e 66 6f 5d 20 74 61 72 67   debuginfo] targ
cad0: 65 74 28 73 29 20 69 6e 20 5b 2e 2e 5d 0a 22 29  et(s) in [..].")
cae0: 29 3b 0a 0a 20 20 20 20 73 6c 65 65 70 5f 6d 73  );..    sleep_ms
caf0: 28 31 30 30 30 29 3b 0a 20 20 20 20 46 69 6c 65  (1000);.    File
cb00: 3a 3a 63 72 65 61 74 65 28 70 2e 72 6f 6f 74 28  ::create(p.root(
cb10: 29 2e 6a 6f 69 6e 28 22 66 6f 6f 22 29 29 2e 75  ).join("foo")).u
cb20: 6e 77 72 61 70 28 29 3b 0a 20 20 20 20 46 69 6c  nwrap();.    Fil
cb30: 65 3a 3a 63 72 65 61 74 65 28 70 2e 72 6f 6f 74  e::create(p.root
cb40: 28 29 2e 6a 6f 69 6e 28 22 62 61 72 22 29 29 2e  ().join("bar")).
cb50: 75 6e 77 72 61 70 28 29 3b 0a 0a 20 20 20 20 2f  unwrap();..    /
cb60: 2f 20 6e 6f 77 20 74 68 65 20 65 78 69 73 74 2c  / now the exist,
cb70: 20 73 6f 20 72 75 6e 20 6f 6e 63 65 2c 20 63 61   so run once, ca
cb80: 74 63 68 20 74 68 65 20 6d 74 69 6d 65 2c 20 74  tch the mtime, t
cb90: 68 65 6e 20 73 68 6f 75 6c 64 6e 27 74 20 72 75  hen shouldn't ru
cba0: 6e 20 61 67 61 69 6e 0a 20 20 20 20 70 72 69 6e  n again.    prin
cbb0: 74 6c 6e 21 28 22 72 75 6e 20 77 69 74 68 22 29  tln!("run with")
cbc0: 3b 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68 61  ;.    assert_tha
cbd0: 74 28 70 2e 63 61 72 67 6f 28 22 62 75 69 6c 64  t(p.cargo("build
cbe0: 22 29 2e 61 72 67 28 22 2d 76 22 29 2c 0a 20 20  ").arg("-v"),.  
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78                ex
cc00: 65 63 73 28 29 2e 77 69 74 68 5f 73 74 61 74 75  ecs().with_statu
cc10: 73 28 30 29 2e 77 69 74 68 5f 73 74 64 65 72 72  s(0).with_stderr
cc20: 28 22 5c 0a 5b 43 4f 4d 50 49 4c 49 4e 47 5d 20  ("\.[COMPILING] 
cc30: 61 20 76 30 2e 35 2e 30 20 28 5b 2e 2e 5d 29 0a  a v0.5.0 ([..]).
cc40: 5b 52 55 4e 4e 49 4e 47 5d 20 60 5b 2e 2e 5d 5b  [RUNNING] `[..][
cc50: 2f 5d 62 75 69 6c 64 2d 73 63 72 69 70 74 2d 62  /]build-script-b
cc60: 75 69 6c 64 60 0a 5b 52 55 4e 4e 49 4e 47 5d 20  uild`.[RUNNING] 
cc70: 60 72 75 73 74 63 20 5b 2e 2e 5d 20 73 72 63 5b  `rustc [..] src[
cc80: 2f 5d 6c 69 62 2e 72 73 20 5b 2e 2e 5d 60 0a 5b  /]lib.rs [..]`.[
cc90: 46 49 4e 49 53 48 45 44 5d 20 64 65 76 20 5b 75  FINISHED] dev [u
cca0: 6e 6f 70 74 69 6d 69 7a 65 64 20 2b 20 64 65 62  noptimized + deb
ccb0: 75 67 69 6e 66 6f 5d 20 74 61 72 67 65 74 28 73  uginfo] target(s
ccc0: 29 20 69 6e 20 5b 2e 2e 5d 0a 22 29 29 3b 0a 0a  ) in [..]."));..
ccd0: 20 20 20 20 70 72 69 6e 74 6c 6e 21 28 22 72 75      println!("ru
cce0: 6e 20 77 69 74 68 32 22 29 3b 0a 20 20 20 20 61  n with2");.    a
ccf0: 73 73 65 72 74 5f 74 68 61 74 28 70 2e 63 61 72  ssert_that(p.car
cd00: 67 6f 28 22 62 75 69 6c 64 22 29 2e 61 72 67 28  go("build").arg(
cd10: 22 2d 76 22 29 2c 0a 20 20 20 20 20 20 20 20 20  "-v"),.         
cd20: 20 20 20 20 20 20 20 65 78 65 63 73 28 29 2e 77         execs().w
cd30: 69 74 68 5f 73 74 61 74 75 73 28 30 29 2e 77 69  ith_status(0).wi
cd40: 74 68 5f 73 74 64 65 72 72 28 22 5c 0a 5b 46 52  th_stderr("\.[FR
cd50: 45 53 48 5d 20 61 20 76 30 2e 35 2e 30 20 28 5b  ESH] a v0.5.0 ([
cd60: 2e 2e 5d 29 0a 5b 46 49 4e 49 53 48 45 44 5d 20  ..]).[FINISHED] 
cd70: 64 65 76 20 5b 75 6e 6f 70 74 69 6d 69 7a 65 64  dev [unoptimized
cd80: 20 2b 20 64 65 62 75 67 69 6e 66 6f 5d 20 74 61   + debuginfo] ta
cd90: 72 67 65 74 28 73 29 20 69 6e 20 5b 2e 2e 5d 0a  rget(s) in [..].
cda0: 22 29 29 3b 0a 0a 20 20 20 20 73 6c 65 65 70 5f  "));..    sleep_
cdb0: 6d 73 28 31 30 30 30 29 3b 0a 0a 20 20 20 20 2f  ms(1000);..    /
cdc0: 2f 20 72 61 6e 64 6f 6d 20 6f 74 68 65 72 20 66  / random other f
cdd0: 69 6c 65 73 20 64 6f 20 6e 6f 74 20 61 66 66 65  iles do not affe
cde0: 63 74 20 66 72 65 73 68 6e 65 73 73 0a 20 20 20  ct freshness.   
cdf0: 20 70 72 69 6e 74 6c 6e 21 28 22 72 75 6e 20 62   println!("run b
ce00: 61 7a 22 29 3b 0a 20 20 20 20 46 69 6c 65 3a 3a  az");.    File::
ce10: 63 72 65 61 74 65 28 70 2e 72 6f 6f 74 28 29 2e  create(p.root().
ce20: 6a 6f 69 6e 28 22 62 61 7a 22 29 29 2e 75 6e 77  join("baz")).unw
ce30: 72 61 70 28 29 3b 0a 20 20 20 20 61 73 73 65 72  rap();.    asser
ce40: 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 28 22  t_that(p.cargo("
ce50: 62 75 69 6c 64 22 29 2e 61 72 67 28 22 2d 76 22  build").arg("-v"
ce60: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
ce70: 20 20 20 65 78 65 63 73 28 29 2e 77 69 74 68 5f     execs().with_
ce80: 73 74 61 74 75 73 28 30 29 2e 77 69 74 68 5f 73  status(0).with_s
ce90: 74 64 65 72 72 28 22 5c 0a 5b 46 52 45 53 48 5d  tderr("\.[FRESH]
cea0: 20 61 20 76 30 2e 35 2e 30 20 28 5b 2e 2e 5d 29   a v0.5.0 ([..])
ceb0: 0a 5b 46 49 4e 49 53 48 45 44 5d 20 64 65 76 20  .[FINISHED] dev 
cec0: 5b 75 6e 6f 70 74 69 6d 69 7a 65 64 20 2b 20 64  [unoptimized + d
ced0: 65 62 75 67 69 6e 66 6f 5d 20 74 61 72 67 65 74  ebuginfo] target
cee0: 28 73 29 20 69 6e 20 5b 2e 2e 5d 0a 22 29 29 3b  (s) in [..]."));
cef0: 0a 0a 20 20 20 20 2f 2f 20 62 75 74 20 63 68 61  ..    // but cha
cf00: 6e 67 69 6e 67 20 64 65 70 65 6e 64 65 6e 74 20  nging dependent 
cf10: 66 69 6c 65 73 20 64 6f 65 73 0a 20 20 20 20 70  files does.    p
cf20: 72 69 6e 74 6c 6e 21 28 22 72 75 6e 20 66 6f 6f  rintln!("run foo
cf30: 20 63 68 61 6e 67 65 22 29 3b 0a 20 20 20 20 46   change");.    F
cf40: 69 6c 65 3a 3a 63 72 65 61 74 65 28 70 2e 72 6f  ile::create(p.ro
cf50: 6f 74 28 29 2e 6a 6f 69 6e 28 22 66 6f 6f 22 29  ot().join("foo")
cf60: 29 2e 75 6e 77 72 61 70 28 29 3b 0a 20 20 20 20  ).unwrap();.    
cf70: 61 73 73 65 72 74 5f 74 68 61 74 28 70 2e 63 61  assert_that(p.ca
cf80: 72 67 6f 28 22 62 75 69 6c 64 22 29 2e 61 72 67  rgo("build").arg
cf90: 28 22 2d 76 22 29 2c 0a 20 20 20 20 20 20 20 20  ("-v"),.        
cfa0: 20 20 20 20 20 20 20 20 65 78 65 63 73 28 29 2e          execs().
cfb0: 77 69 74 68 5f 73 74 61 74 75 73 28 30 29 2e 77  with_status(0).w
cfc0: 69 74 68 5f 73 74 64 65 72 72 28 22 5c 0a 5b 43  ith_stderr("\.[C
cfd0: 4f 4d 50 49 4c 49 4e 47 5d 20 61 20 76 30 2e 35  OMPILING] a v0.5
cfe0: 2e 30 20 28 5b 2e 2e 5d 29 0a 5b 52 55 4e 4e 49  .0 ([..]).[RUNNI
cff0: 4e 47 5d 20 60 5b 2e 2e 5d 5b 2f 5d 62 75 69 6c  NG] `[..][/]buil
d000: 64 2d 73 63 72 69 70 74 2d 62 75 69 6c 64 60 0a  d-script-build`.
d010: 5b 52 55 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63  [RUNNING] `rustc
d020: 20 5b 2e 2e 5d 20 73 72 63 5b 2f 5d 6c 69 62 2e   [..] src[/]lib.
d030: 72 73 20 5b 2e 2e 5d 60 0a 5b 46 49 4e 49 53 48  rs [..]`.[FINISH
d040: 45 44 5d 20 64 65 76 20 5b 75 6e 6f 70 74 69 6d  ED] dev [unoptim
d050: 69 7a 65 64 20 2b 20 64 65 62 75 67 69 6e 66 6f  ized + debuginfo
d060: 5d 20 74 61 72 67 65 74 28 73 29 20 69 6e 20 5b  ] target(s) in [
d070: 2e 2e 5d 0a 22 29 29 3b 0a 0a 20 20 20 20 2f 2f  ..]."));..    //
d080: 20 2e 2e 20 61 73 20 64 6f 65 73 20 64 65 6c 65   .. as does dele
d090: 74 69 6e 67 20 61 20 66 69 6c 65 0a 20 20 20 20  ting a file.    
d0a0: 70 72 69 6e 74 6c 6e 21 28 22 72 75 6e 20 66 6f  println!("run fo
d0b0: 6f 20 64 65 6c 65 74 65 22 29 3b 0a 20 20 20 20  o delete");.    
d0c0: 66 73 3a 3a 72 65 6d 6f 76 65 5f 66 69 6c 65 28  fs::remove_file(
d0d0: 70 2e 72 6f 6f 74 28 29 2e 6a 6f 69 6e 28 22 62  p.root().join("b
d0e0: 61 72 22 29 29 2e 75 6e 77 72 61 70 28 29 3b 0a  ar")).unwrap();.
d0f0: 20 20 20 20 61 73 73 65 72 74 5f 74 68 61 74 28      assert_that(
d100: 70 2e 63 61 72 67 6f 28 22 62 75 69 6c 64 22 29  p.cargo("build")
d110: 2e 61 72 67 28 22 2d 76 22 29 2c 0a 20 20 20 20  .arg("-v"),.    
d120: 20 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63              exec
d130: 73 28 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28  s().with_status(
d140: 30 29 2e 77 69 74 68 5f 73 74 64 65 72 72 28 22  0).with_stderr("
d150: 5c 0a 5b 43 4f 4d 50 49 4c 49 4e 47 5d 20 61 20  \.[COMPILING] a 
d160: 76 30 2e 35 2e 30 20 28 5b 2e 2e 5d 29 0a 5b 52  v0.5.0 ([..]).[R
d170: 55 4e 4e 49 4e 47 5d 20 60 5b 2e 2e 5d 5b 2f 5d  UNNING] `[..][/]
d180: 62 75 69 6c 64 2d 73 63 72 69 70 74 2d 62 75 69  build-script-bui
d190: 6c 64 60 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60 72  ld`.[RUNNING] `r
d1a0: 75 73 74 63 20 5b 2e 2e 5d 20 73 72 63 5b 2f 5d  ustc [..] src[/]
d1b0: 6c 69 62 2e 72 73 20 5b 2e 2e 5d 60 0a 5b 46 49  lib.rs [..]`.[FI
d1c0: 4e 49 53 48 45 44 5d 20 64 65 76 20 5b 75 6e 6f  NISHED] dev [uno
d1d0: 70 74 69 6d 69 7a 65 64 20 2b 20 64 65 62 75 67  ptimized + debug
d1e0: 69 6e 66 6f 5d 20 74 61 72 67 65 74 28 73 29 20  info] target(s) 
d1f0: 69 6e 20 5b 2e 2e 5d 0a 22 29 29 3b 0a 7d 0a 0a  in [..]."));.}..
d200: 0a 23 5b 74 65 73 74 5d 0a 66 6e 20 64 6f 63 74  .#[test].fn doct
d210: 65 73 74 5f 72 65 63 69 65 76 65 73 5f 62 75 69  est_recieves_bui
d220: 6c 64 5f 6c 69 6e 6b 5f 61 72 67 73 28 29 20 7b  ld_link_args() {
d230: 0a 20 20 20 20 6c 65 74 20 70 20 3d 20 70 72 6f  .    let p = pro
d240: 6a 65 63 74 28 22 66 6f 6f 22 29 0a 20 20 20 20  ject("foo").    
d250: 20 20 20 20 2e 66 69 6c 65 28 22 43 61 72 67 6f      .file("Cargo
d260: 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20  .toml", r#".    
d270: 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65 63 74          [project
d280: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61  ].            na
d290: 6d 65 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20  me = "foo".     
d2a0: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d         version =
d2b0: 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20 20 20   "0.5.0".       
d2c0: 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b       authors = [
d2d0: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 64  ].            [d
d2e0: 65 70 65 6e 64 65 6e 63 69 65 73 2e 61 5d 0a 20  ependencies.a]. 
d2f0: 20 20 20 20 20 20 20 20 20 20 20 70 61 74 68 20             path 
d300: 3d 20 22 61 22 0a 20 20 20 20 20 20 20 20 22 23  = "a".        "#
d310: 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28  ).        .file(
d320: 22 73 72 63 2f 6c 69 62 2e 72 73 22 2c 20 22 22  "src/lib.rs", ""
d330: 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28  ).        .file(
d340: 22 61 2f 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20  "a/Cargo.toml", 
d350: 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  r#".            
d360: 5b 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20  [project].      
d370: 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 61 22        name = "a"
d380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72  .            ver
d390: 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20  sion = "0.5.0". 
d3a0: 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f             autho
d3b0: 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20  rs = [].        
d3c0: 20 20 20 20 6c 69 6e 6b 73 20 3d 20 22 62 61 72      links = "bar
d3d0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 75  ".            bu
d3e0: 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22  ild = "build.rs"
d3f0: 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20  .        "#).   
d400: 20 20 20 20 20 2e 66 69 6c 65 28 22 61 2f 73 72       .file("a/sr
d410: 63 2f 6c 69 62 2e 72 73 22 2c 20 22 22 29 0a 20  c/lib.rs", ""). 
d420: 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 61 2f         .file("a/
d430: 62 75 69 6c 64 2e 72 73 22 2c 20 72 23 22 0a 20  build.rs", r#". 
d440: 20 20 20 20 20 20 20 20 20 20 20 66 6e 20 6d 61             fn ma
d450: 69 6e 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20  in() {.         
d460: 20 20 20 20 20 20 20 70 72 69 6e 74 6c 6e 21 28         println!(
d470: 22 63 61 72 67 6f 3a 72 75 73 74 63 2d 6c 69 6e  "cargo:rustc-lin
d480: 6b 2d 73 65 61 72 63 68 3d 6e 61 74 69 76 65 3d  k-search=native=
d490: 62 61 72 22 29 3b 0a 20 20 20 20 20 20 20 20 20  bar");.         
d4a0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 22 23 29     }.        "#)
d4b0: 3b 0a 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68  ;..    assert_th
d4c0: 61 74 28 70 2e 63 61 72 67 6f 5f 70 72 6f 63 65  at(p.cargo_proce
d4d0: 73 73 28 22 74 65 73 74 22 29 2e 61 72 67 28 22  ss("test").arg("
d4e0: 2d 76 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20  -v"),.          
d4f0: 20 20 20 20 20 20 65 78 65 63 73 28 29 2e 77 69        execs().wi
d500: 74 68 5f 73 74 61 74 75 73 28 30 29 0a 20 20 20  th_status(0).   
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d520: 20 20 20 20 2e 77 69 74 68 5f 73 74 64 65 72 72      .with_stderr
d530: 5f 63 6f 6e 74 61 69 6e 73 28 22 5c 0a 5b 52 55  _contains("\.[RU
d540: 4e 4e 49 4e 47 5d 20 60 72 75 73 74 64 6f 63 20  NNING] `rustdoc 
d550: 2d 2d 74 65 73 74 20 5b 2e 2e 5d 20 2d 2d 63 72  --test [..] --cr
d560: 61 74 65 2d 6e 61 6d 65 20 66 6f 6f 20 5b 2e 2e  ate-name foo [..
d570: 5d 2d 4c 20 6e 61 74 69 76 65 3d 62 61 72 5b 2e  ]-L native=bar[.
d580: 2e 5d 60 0a 22 29 29 3b 0a 7d 0a 0a 23 5b 74 65  .]`."));.}..#[te
d590: 73 74 5d 0a 66 6e 20 70 6c 65 61 73 65 5f 72 65  st].fn please_re
d5a0: 73 70 65 63 74 5f 74 68 65 5f 64 61 67 28 29 20  spect_the_dag() 
d5b0: 7b 0a 20 20 20 20 6c 65 74 20 70 20 3d 20 70 72  {.    let p = pr
d5c0: 6f 6a 65 63 74 28 22 66 6f 6f 22 29 0a 20 20 20  oject("foo").   
d5d0: 20 20 20 20 20 2e 66 69 6c 65 28 22 43 61 72 67       .file("Carg
d5e0: 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20  o.toml", r#".   
d5f0: 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65 63           [projec
d600: 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  t].            n
d610: 61 6d 65 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20  ame = "foo".    
d620: 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20          version 
d630: 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20 20  = "0.5.0".      
d640: 20 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20        authors = 
d650: 5b 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  [].            b
d660: 75 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72 73  uild = "build.rs
d670: 22 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  "..            [
d680: 64 65 70 65 6e 64 65 6e 63 69 65 73 5d 0a 20 20  dependencies].  
d690: 20 20 20 20 20 20 20 20 20 20 61 20 3d 20 7b 20            a = { 
d6a0: 70 61 74 68 20 3d 20 27 61 27 20 7d 0a 20 20 20  path = 'a' }.   
d6b0: 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20 20       "#).       
d6c0: 20 2e 66 69 6c 65 28 22 73 72 63 2f 6c 69 62 2e   .file("src/lib.
d6d0: 72 73 22 2c 20 22 22 29 0a 20 20 20 20 20 20 20  rs", "").       
d6e0: 20 2e 66 69 6c 65 28 22 62 75 69 6c 64 2e 72 73   .file("build.rs
d6f0: 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20  ", r#".         
d700: 20 20 20 66 6e 20 6d 61 69 6e 28 29 20 7b 0a 20     fn main() {. 
d710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
d720: 72 69 6e 74 6c 6e 21 28 22 63 61 72 67 6f 3a 72  rintln!("cargo:r
d730: 75 73 74 63 2d 6c 69 6e 6b 2d 73 65 61 72 63 68  ustc-link-search
d740: 3d 6e 61 74 69 76 65 3d 66 6f 6f 22 29 3b 0a 20  =native=foo");. 
d750: 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
d760: 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20 20       "#).       
d770: 20 2e 66 69 6c 65 28 22 61 2f 43 61 72 67 6f 2e   .file("a/Cargo.
d780: 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20  toml", r#".     
d790: 20 20 20 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d         [project]
d7a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d  .            nam
d7b0: 65 20 3d 20 22 61 22 0a 20 20 20 20 20 20 20 20  e = "a".        
d7c0: 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30      version = "0
d7d0: 2e 35 2e 30 22 0a 20 20 20 20 20 20 20 20 20 20  .5.0".          
d7e0: 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20    authors = []. 
d7f0: 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 6b 73             links
d800: 20 3d 20 22 62 61 72 22 0a 20 20 20 20 20 20 20   = "bar".       
d810: 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22 62 75       build = "bu
d820: 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20 20 20  ild.rs".        
d830: 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  "#).        .fil
d840: 65 28 22 61 2f 73 72 63 2f 6c 69 62 2e 72 73 22  e("a/src/lib.rs"
d850: 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66  , "").        .f
d860: 69 6c 65 28 22 61 2f 62 75 69 6c 64 2e 72 73 22  ile("a/build.rs"
d870: 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  , r#".          
d880: 20 20 66 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20    fn main() {.  
d890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
d8a0: 69 6e 74 6c 6e 21 28 22 63 61 72 67 6f 3a 72 75  intln!("cargo:ru
d8b0: 73 74 63 2d 6c 69 6e 6b 2d 73 65 61 72 63 68 3d  stc-link-search=
d8c0: 6e 61 74 69 76 65 3d 62 61 72 22 29 3b 0a 20 20  native=bar");.  
d8d0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
d8e0: 20 20 20 20 22 23 29 3b 0a 0a 20 20 20 20 61 73      "#);..    as
d8f0: 73 65 72 74 5f 74 68 61 74 28 70 2e 63 61 72 67  sert_that(p.carg
d900: 6f 5f 70 72 6f 63 65 73 73 28 22 62 75 69 6c 64  o_process("build
d910: 22 29 2e 61 72 67 28 22 2d 76 22 29 2c 0a 20 20  ").arg("-v"),.  
d920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78                ex
d930: 65 63 73 28 29 2e 77 69 74 68 5f 73 74 61 74 75  ecs().with_statu
d940: 73 28 30 29 0a 20 20 20 20 20 20 20 20 20 20 20  s(0).           
d950: 20 20 20 20 20 20 20 20 20 20 20 20 2e 77 69 74              .wit
d960: 68 5f 73 74 64 65 72 72 5f 63 6f 6e 74 61 69 6e  h_stderr_contain
d970: 73 28 22 5c 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60  s("\.[RUNNING] `
d980: 72 75 73 74 63 20 5b 2e 2e 5d 20 2d 4c 20 6e 61  rustc [..] -L na
d990: 74 69 76 65 3d 66 6f 6f 20 2d 4c 20 6e 61 74 69  tive=foo -L nati
d9a0: 76 65 3d 62 61 72 5b 2e 2e 5d 60 0a 22 29 29 3b  ve=bar[..]`."));
d9b0: 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66 6e 20 6e  .}..#[test].fn n
d9c0: 6f 6e 5f 75 74 66 38 5f 6f 75 74 70 75 74 28 29  on_utf8_output()
d9d0: 20 7b 0a 20 20 20 20 6c 65 74 20 70 20 3d 20 70   {.    let p = p
d9e0: 72 6f 6a 65 63 74 28 22 66 6f 6f 22 29 0a 20 20  roject("foo").  
d9f0: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 43 61 72        .file("Car
da00: 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20  go.toml", r#".  
da10: 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65            [proje
da20: 63 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ct].            
da30: 6e 61 6d 65 20 3d 20 22 66 6f 6f 22 0a 20 20 20  name = "foo".   
da40: 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e           version
da50: 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20   = "0.5.0".     
da60: 20 20 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d         authors =
da70: 20 5b 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20   [].            
da80: 62 75 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72  build = "build.r
da90: 73 22 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20  s".        "#). 
daa0: 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 62 75         .file("bu
dab0: 69 6c 64 2e 72 73 22 2c 20 72 23 22 0a 20 20 20  ild.rs", r#".   
dac0: 20 20 20 20 20 20 20 20 20 75 73 65 20 73 74 64           use std
dad0: 3a 3a 69 6f 3a 3a 70 72 65 6c 75 64 65 3a 3a 2a  ::io::prelude::*
dae0: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ;..            f
daf0: 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20 20  n main() {.     
db00: 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20 6d             let m
db10: 75 74 20 6f 75 74 20 3d 20 73 74 64 3a 3a 69 6f  ut out = std::io
db20: 3a 3a 73 74 64 6f 75 74 28 29 3b 0a 20 20 20 20  ::stdout();.    
db30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 70              // p
db40: 72 69 6e 74 20 73 6f 6d 65 74 68 69 6e 67 20 74  rint something t
db50: 68 61 74 27 73 20 6e 6f 74 20 75 74 66 38 0a 20  hat's not utf8. 
db60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
db70: 75 74 2e 77 72 69 74 65 5f 61 6c 6c 28 62 22 5c  ut.write_all(b"\
db80: 78 66 66 5c 78 66 66 5c 6e 22 29 2e 75 6e 77 72  xff\xff\n").unwr
db90: 61 70 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 20  ap();..         
dba0: 20 20 20 20 20 20 20 2f 2f 20 6e 6f 77 20 70 72         // now pr
dbb0: 69 6e 74 20 73 6f 6d 65 20 63 61 72 67 6f 20 6d  int some cargo m
dbc0: 65 74 61 64 61 74 61 20 74 68 61 74 27 73 20 75  etadata that's u
dbd0: 74 66 38 0a 20 20 20 20 20 20 20 20 20 20 20 20  tf8.            
dbe0: 20 20 20 20 70 72 69 6e 74 6c 6e 21 28 22 63 61      println!("ca
dbf0: 72 67 6f 3a 72 75 73 74 63 2d 63 66 67 3d 66 6f  rgo:rustc-cfg=fo
dc00: 6f 22 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20  o");..          
dc10: 20 20 20 20 20 20 2f 2f 20 6e 6f 77 20 70 72 69        // now pri
dc20: 6e 74 20 6d 6f 72 65 20 6e 6f 6e 2d 75 74 66 38  nt more non-utf8
dc30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dc40: 20 6f 75 74 2e 77 72 69 74 65 5f 61 6c 6c 28 62   out.write_all(b
dc50: 22 5c 78 66 66 5c 78 66 66 5c 6e 22 29 2e 75 6e  "\xff\xff\n").un
dc60: 77 72 61 70 28 29 3b 0a 20 20 20 20 20 20 20 20  wrap();.        
dc70: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 22 23      }.        "#
dc80: 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28  ).        .file(
dc90: 22 73 72 63 2f 6d 61 69 6e 2e 72 73 22 2c 20 72  "src/main.rs", r
dca0: 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #".            #
dcb0: 5b 63 66 67 28 66 6f 6f 29 5d 0a 20 20 20 20 20  [cfg(foo)].     
dcc0: 20 20 20 20 20 20 20 66 6e 20 6d 61 69 6e 28 29         fn main()
dcd0: 20 7b 7d 0a 20 20 20 20 20 20 20 20 22 23 29 3b   {}.        "#);
dce0: 0a 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68 61  ..    assert_tha
dcf0: 74 28 70 2e 63 61 72 67 6f 5f 70 72 6f 63 65 73  t(p.cargo_proces
dd00: 73 28 22 62 75 69 6c 64 22 29 2e 61 72 67 28 22  s("build").arg("
dd10: 2d 76 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20  -v"),.          
dd20: 20 20 20 20 20 20 65 78 65 63 73 28 29 2e 77 69        execs().wi
dd30: 74 68 5f 73 74 61 74 75 73 28 30 29 29 3b 0a 7d  th_status(0));.}
dd40: 0a 0a 23 5b 74 65 73 74 5d 0a 66 6e 20 63 75 73  ..#[test].fn cus
dd50: 74 6f 6d 5f 74 61 72 67 65 74 5f 64 69 72 28 29  tom_target_dir()
dd60: 20 7b 0a 20 20 20 20 6c 65 74 20 70 20 3d 20 70   {.    let p = p
dd70: 72 6f 6a 65 63 74 28 22 66 6f 6f 22 29 0a 20 20  roject("foo").  
dd80: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 43 61 72        .file("Car
dd90: 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20  go.toml", r#".  
dda0: 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65            [proje
ddb0: 63 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ct].            
ddc0: 6e 61 6d 65 20 3d 20 22 66 6f 6f 22 0a 20 20 20  name = "foo".   
ddd0: 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e           version
dde0: 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20   = "0.5.0".     
ddf0: 20 20 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d         authors =
de00: 20 5b 5d 0a 0a 20 20 20 20 20 20 20 20 20 20 20   []..           
de10: 20 5b 64 65 70 65 6e 64 65 6e 63 69 65 73 5d 0a   [dependencies].
de20: 20 20 20 20 20 20 20 20 20 20 20 20 61 20 3d 20              a = 
de30: 7b 20 70 61 74 68 20 3d 20 22 61 22 20 7d 0a 20  { path = "a" }. 
de40: 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20         "#).     
de50: 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6c 69     .file("src/li
de60: 62 2e 72 73 22 2c 20 22 22 29 0a 20 20 20 20 20  b.rs", "").     
de70: 20 20 20 2e 66 69 6c 65 28 22 2e 63 61 72 67 6f     .file(".cargo
de80: 2f 63 6f 6e 66 69 67 22 2c 20 72 23 22 0a 20 20  /config", r#".  
de90: 20 20 20 20 20 20 20 20 20 20 5b 62 75 69 6c 64            [build
dea0: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 61  ].            ta
deb0: 72 67 65 74 2d 64 69 72 20 3d 20 27 74 65 73 74  rget-dir = 'test
dec0: 27 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20 20  '.        "#).  
ded0: 20 20 20 20 20 20 2e 66 69 6c 65 28 22 61 2f 43        .file("a/C
dee0: 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a  argo.toml", r#".
def0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f              [pro
df00: 6a 65 63 74 5d 0a 20 20 20 20 20 20 20 20 20 20  ject].          
df10: 20 20 6e 61 6d 65 20 3d 20 22 61 22 0a 20 20 20    name = "a".   
df20: 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e           version
df30: 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20   = "0.5.0".     
df40: 20 20 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d         authors =
df50: 20 5b 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20   [].            
df60: 62 75 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72  build = "build.r
df70: 73 22 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20  s".        "#). 
df80: 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 61 2f         .file("a/
df90: 62 75 69 6c 64 2e 72 73 22 2c 20 22 66 6e 20 6d  build.rs", "fn m
dfa0: 61 69 6e 28 29 20 7b 7d 22 29 0a 20 20 20 20 20  ain() {}").     
dfb0: 20 20 20 2e 66 69 6c 65 28 22 61 2f 73 72 63 2f     .file("a/src/
dfc0: 6c 69 62 2e 72 73 22 2c 20 22 22 29 3b 0a 0a 20  lib.rs", "");.. 
dfd0: 20 20 20 61 73 73 65 72 74 5f 74 68 61 74 28 70     assert_that(p
dfe0: 2e 63 61 72 67 6f 5f 70 72 6f 63 65 73 73 28 22  .cargo_process("
dff0: 62 75 69 6c 64 22 29 2e 61 72 67 28 22 2d 76 22  build").arg("-v"
e000: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
e010: 20 20 20 65 78 65 63 73 28 29 2e 77 69 74 68 5f     execs().with_
e020: 73 74 61 74 75 73 28 30 29 29 3b 0a 7d 0a 0a 23  status(0));.}..#
e030: 5b 74 65 73 74 5d 0a 66 6e 20 70 61 6e 69 63 5f  [test].fn panic_
e040: 61 62 6f 72 74 5f 77 69 74 68 5f 62 75 69 6c 64  abort_with_build
e050: 5f 73 63 72 69 70 74 73 28 29 20 7b 0a 20 20 20  _scripts() {.   
e060: 20 6c 65 74 20 70 20 3d 20 70 72 6f 6a 65 63 74   let p = project
e070: 28 22 66 6f 6f 22 29 0a 20 20 20 20 20 20 20 20  ("foo").        
e080: 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d  .file("Cargo.tom
e090: 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20  l", r#".        
e0a0: 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 20 20      [project].  
e0b0: 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d            name =
e0c0: 20 22 66 6f 6f 22 0a 20 20 20 20 20 20 20 20 20   "foo".         
e0d0: 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e     version = "0.
e0e0: 35 2e 30 22 0a 20 20 20 20 20 20 20 20 20 20 20  5.0".           
e0f0: 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 0a 20   authors = [].. 
e100: 20 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f 66             [prof
e110: 69 6c 65 2e 72 65 6c 65 61 73 65 5d 0a 20 20 20  ile.release].   
e120: 20 20 20 20 20 20 20 20 20 70 61 6e 69 63 20 3d           panic =
e130: 20 27 61 62 6f 72 74 27 0a 0a 20 20 20 20 20 20   'abort'..      
e140: 20 20 20 20 20 20 5b 64 65 70 65 6e 64 65 6e 63        [dependenc
e150: 69 65 73 5d 0a 20 20 20 20 20 20 20 20 20 20 20  ies].           
e160: 20 61 20 3d 20 7b 20 70 61 74 68 20 3d 20 22 61   a = { path = "a
e170: 22 20 7d 0a 20 20 20 20 20 20 20 20 22 23 29 0a  " }.        "#).
e180: 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 73          .file("s
e190: 72 63 2f 6c 69 62 2e 72 73 22 2c 20 22 65 78 74  rc/lib.rs", "ext
e1a0: 65 72 6e 20 63 72 61 74 65 20 61 3b 22 29 0a 20  ern crate a;"). 
e1b0: 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 61 2f         .file("a/
e1c0: 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23 22  Cargo.toml", r#"
e1d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 70 72  .            [pr
e1e0: 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20 20 20 20  oject].         
e1f0: 20 20 20 6e 61 6d 65 20 3d 20 22 61 22 0a 20 20     name = "a".  
e200: 20 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f            versio
e210: 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20 20 20 20  n = "0.5.0".    
e220: 20 20 20 20 20 20 20 20 61 75 74 68 6f 72 73 20          authors 
e230: 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20 20 20 20  = [].           
e240: 20 62 75 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e   build = "build.
e250: 72 73 22 0a 0a 20 20 20 20 20 20 20 20 20 20 20  rs"..           
e260: 20 5b 62 75 69 6c 64 2d 64 65 70 65 6e 64 65 6e   [build-dependen
e270: 63 69 65 73 5d 0a 20 20 20 20 20 20 20 20 20 20  cies].          
e280: 20 20 62 20 3d 20 7b 20 70 61 74 68 20 3d 20 22    b = { path = "
e290: 2e 2e 2f 62 22 20 7d 0a 20 20 20 20 20 20 20 20  ../b" }.        
e2a0: 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  "#).        .fil
e2b0: 65 28 22 61 2f 73 72 63 2f 6c 69 62 2e 72 73 22  e("a/src/lib.rs"
e2c0: 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66  , "").        .f
e2d0: 69 6c 65 28 22 61 2f 62 75 69 6c 64 2e 72 73 22  ile("a/build.rs"
e2e0: 2c 20 22 65 78 74 65 72 6e 20 63 72 61 74 65 20  , "extern crate 
e2f0: 62 3b 20 66 6e 20 6d 61 69 6e 28 29 20 7b 7d 22  b; fn main() {}"
e300: 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28  ).        .file(
e310: 22 62 2f 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20  "b/Cargo.toml", 
e320: 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  r#".            
e330: 5b 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20  [project].      
e340: 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 62 22        name = "b"
e350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72  .            ver
e360: 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22 0a 20  sion = "0.5.0". 
e370: 20 20 20 20 20 20 20 20 20 20 20 61 75 74 68 6f             autho
e380: 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20  rs = [].        
e390: 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  "#).        .fil
e3a0: 65 28 22 62 2f 73 72 63 2f 6c 69 62 2e 72 73 22  e("b/src/lib.rs"
e3b0: 2c 20 22 22 29 3b 0a 0a 20 20 20 20 61 73 73 65  , "");..    asse
e3c0: 72 74 5f 74 68 61 74 28 70 2e 63 61 72 67 6f 5f  rt_that(p.cargo_
e3d0: 70 72 6f 63 65 73 73 28 22 62 75 69 6c 64 22 29  process("build")
e3e0: 2e 61 72 67 28 22 2d 76 22 29 2e 61 72 67 28 22  .arg("-v").arg("
e3f0: 2d 2d 72 65 6c 65 61 73 65 22 29 2c 0a 20 20 20  --release"),.   
e400: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78 65               exe
e410: 63 73 28 29 2e 77 69 74 68 5f 73 74 61 74 75 73  cs().with_status
e420: 28 30 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d  (0));.}..#[test]
e430: 0a 66 6e 20 77 61 72 6e 69 6e 67 73 5f 65 6d 69  .fn warnings_emi
e440: 74 74 65 64 28 29 20 7b 0a 20 20 20 20 6c 65 74  tted() {.    let
e450: 20 70 20 3d 20 70 72 6f 6a 65 63 74 28 22 66 6f   p = project("fo
e460: 6f 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  o").        .fil
e470: 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20  e("Cargo.toml", 
e480: 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  r#".            
e490: 5b 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20 20  [project].      
e4a0: 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 66 6f        name = "fo
e4b0: 6f 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 76  o".            v
e4c0: 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30 22  ersion = "0.5.0"
e4d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 75 74  .            aut
e4e0: 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20 20  hors = [].      
e4f0: 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22 62        build = "b
e500: 75 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20 20  uild.rs".       
e510: 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69   "#).        .fi
e520: 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72 73 22 2c  le("src/lib.rs",
e530: 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69   "").        .fi
e540: 6c 65 28 22 62 75 69 6c 64 2e 72 73 22 2c 20 72  le("build.rs", r
e550: 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  #".            f
e560: 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20 20  n main() {.     
e570: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74             print
e580: 6c 6e 21 28 22 63 61 72 67 6f 3a 77 61 72 6e 69  ln!("cargo:warni
e590: 6e 67 3d 66 6f 6f 22 29 3b 0a 20 20 20 20 20 20  ng=foo");.      
e5a0: 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 6c            printl
e5b0: 6e 21 28 22 63 61 72 67 6f 3a 77 61 72 6e 69 6e  n!("cargo:warnin
e5c0: 67 3d 62 61 72 22 29 3b 0a 20 20 20 20 20 20 20  g=bar");.       
e5d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 22       }.        "
e5e0: 23 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74 5f  #);..    assert_
e5f0: 74 68 61 74 28 70 2e 63 61 72 67 6f 5f 70 72 6f  that(p.cargo_pro
e600: 63 65 73 73 28 22 62 75 69 6c 64 22 29 2e 61 72  cess("build").ar
e610: 67 28 22 2d 76 22 29 2c 0a 20 20 20 20 20 20 20  g("-v"),.       
e620: 20 20 20 20 20 20 20 20 20 65 78 65 63 73 28 29           execs()
e630: 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30 29 0a  .with_status(0).
e640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e650: 20 20 20 20 20 20 20 2e 77 69 74 68 5f 73 74 64         .with_std
e660: 65 72 72 28 22 5c 0a 5b 43 4f 4d 50 49 4c 49 4e  err("\.[COMPILIN
e670: 47 5d 20 66 6f 6f 20 76 30 2e 35 2e 30 20 28 5b  G] foo v0.5.0 ([
e680: 2e 2e 5d 29 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60  ..]).[RUNNING] `
e690: 72 75 73 74 63 20 5b 2e 2e 5d 60 0a 5b 52 55 4e  rustc [..]`.[RUN
e6a0: 4e 49 4e 47 5d 20 60 5b 2e 2e 5d 60 0a 77 61 72  NING] `[..]`.war
e6b0: 6e 69 6e 67 3a 20 66 6f 6f 0a 77 61 72 6e 69 6e  ning: foo.warnin
e6c0: 67 3a 20 62 61 72 0a 5b 52 55 4e 4e 49 4e 47 5d  g: bar.[RUNNING]
e6d0: 20 60 72 75 73 74 63 20 5b 2e 2e 5d 60 0a 5b 46   `rustc [..]`.[F
e6e0: 49 4e 49 53 48 45 44 5d 20 64 65 76 20 5b 75 6e  INISHED] dev [un
e6f0: 6f 70 74 69 6d 69 7a 65 64 20 2b 20 64 65 62 75  optimized + debu
e700: 67 69 6e 66 6f 5d 20 74 61 72 67 65 74 28 73 29  ginfo] target(s)
e710: 20 69 6e 20 5b 2e 2e 5d 0a 22 29 29 3b 0a 7d 0a   in [..]."));.}.
e720: 0a 23 5b 74 65 73 74 5d 0a 66 6e 20 77 61 72 6e  .#[test].fn warn
e730: 69 6e 67 73 5f 68 69 64 64 65 6e 5f 66 6f 72 5f  ings_hidden_for_
e740: 75 70 73 74 72 65 61 6d 28 29 20 7b 0a 20 20 20  upstream() {.   
e750: 20 50 61 63 6b 61 67 65 3a 3a 6e 65 77 28 22 62   Package::new("b
e760: 61 72 22 2c 20 22 30 2e 31 2e 30 22 29 0a 20 20  ar", "0.1.0").  
e770: 20 20 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28            .file(
e780: 22 62 75 69 6c 64 2e 72 73 22 2c 20 72 23 22 0a  "build.rs", r#".
e790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7a0: 66 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20  fn main() {.    
e7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7c0: 70 72 69 6e 74 6c 6e 21 28 22 63 61 72 67 6f 3a  println!("cargo:
e7d0: 77 61 72 6e 69 6e 67 3d 66 6f 6f 22 29 3b 0a 20  warning=foo");. 
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7f0: 20 20 20 70 72 69 6e 74 6c 6e 21 28 22 63 61 72     println!("car
e800: 67 6f 3a 77 61 72 6e 69 6e 67 3d 62 61 72 22 29  go:warning=bar")
e810: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
e820: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20    }.            
e830: 22 23 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  "#).            
e840: 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d  .file("Cargo.tom
e850: 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20  l", r#".        
e860: 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65 63 74          [project
e870: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ].              
e880: 20 20 6e 61 6d 65 20 3d 20 22 62 61 72 22 0a 20    name = "bar". 
e890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
e8a0: 65 72 73 69 6f 6e 20 3d 20 22 30 2e 31 2e 30 22  ersion = "0.1.0"
e8b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e8c0: 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20   authors = [].  
e8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75                bu
e8e0: 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22  ild = "build.rs"
e8f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 23 29  .            "#)
e900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2e 66 69  .            .fi
e910: 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72 73 22 2c  le("src/lib.rs",
e920: 20 22 22 29 0a 20 20 20 20 20 20 20 20 20 20 20   "").           
e930: 20 2e 70 75 62 6c 69 73 68 28 29 3b 0a 0a 20 20   .publish();..  
e940: 20 20 6c 65 74 20 70 20 3d 20 70 72 6f 6a 65 63    let p = projec
e950: 74 28 22 66 6f 6f 22 29 0a 20 20 20 20 20 20 20  t("foo").       
e960: 20 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f   .file("Cargo.to
e970: 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20  ml", r#".       
e980: 20 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 20       [project]. 
e990: 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20             name 
e9a0: 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20 20 20 20  = "foo".        
e9b0: 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30      version = "0
e9c0: 2e 35 2e 30 22 0a 20 20 20 20 20 20 20 20 20 20  .5.0".          
e9d0: 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 0a    authors = []..
e9e0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 64 65 70              [dep
e9f0: 65 6e 64 65 6e 63 69 65 73 5d 0a 20 20 20 20 20  endencies].     
ea00: 20 20 20 20 20 20 20 62 61 72 20 3d 20 22 2a 22         bar = "*"
ea10: 0a 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20  .        "#).   
ea20: 20 20 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f       .file("src/
ea30: 6c 69 62 2e 72 73 22 2c 20 22 22 29 3b 0a 0a 20  lib.rs", "");.. 
ea40: 20 20 20 61 73 73 65 72 74 5f 74 68 61 74 28 70     assert_that(p
ea50: 2e 63 61 72 67 6f 5f 70 72 6f 63 65 73 73 28 22  .cargo_process("
ea60: 62 75 69 6c 64 22 29 2e 61 72 67 28 22 2d 76 22  build").arg("-v"
ea70: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ),.             
ea80: 20 20 20 65 78 65 63 73 28 29 2e 77 69 74 68 5f     execs().with_
ea90: 73 74 61 74 75 73 28 30 29 0a 20 20 20 20 20 20  status(0).      
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eab0: 20 2e 77 69 74 68 5f 73 74 64 65 72 72 28 22 5c   .with_stderr("\
eac0: 0a 5b 55 50 44 41 54 49 4e 47 5d 20 72 65 67 69  .[UPDATING] regi
ead0: 73 74 72 79 20 60 5b 2e 2e 5d 60 0a 5b 44 4f 57  stry `[..]`.[DOW
eae0: 4e 4c 4f 41 44 49 4e 47 5d 20 62 61 72 20 76 30  NLOADING] bar v0
eaf0: 2e 31 2e 30 20 28 5b 2e 2e 5d 29 0a 5b 43 4f 4d  .1.0 ([..]).[COM
eb00: 50 49 4c 49 4e 47 5d 20 62 61 72 20 76 30 2e 31  PILING] bar v0.1
eb10: 2e 30 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60 72 75  .0.[RUNNING] `ru
eb20: 73 74 63 20 5b 2e 2e 5d 60 0a 5b 52 55 4e 4e 49  stc [..]`.[RUNNI
eb30: 4e 47 5d 20 60 5b 2e 2e 5d 60 0a 5b 52 55 4e 4e  NG] `[..]`.[RUNN
eb40: 49 4e 47 5d 20 60 72 75 73 74 63 20 5b 2e 2e 5d  ING] `rustc [..]
eb50: 60 0a 5b 43 4f 4d 50 49 4c 49 4e 47 5d 20 66 6f  `.[COMPILING] fo
eb60: 6f 20 76 30 2e 35 2e 30 20 28 5b 2e 2e 5d 29 0a  o v0.5.0 ([..]).
eb70: 5b 52 55 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63  [RUNNING] `rustc
eb80: 20 5b 2e 2e 5d 60 0a 5b 46 49 4e 49 53 48 45 44   [..]`.[FINISHED
eb90: 5d 20 64 65 76 20 5b 75 6e 6f 70 74 69 6d 69 7a  ] dev [unoptimiz
eba0: 65 64 20 2b 20 64 65 62 75 67 69 6e 66 6f 5d 20  ed + debuginfo] 
ebb0: 74 61 72 67 65 74 28 73 29 20 69 6e 20 5b 2e 2e  target(s) in [..
ebc0: 5d 0a 22 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74  ]."));.}..#[test
ebd0: 5d 0a 66 6e 20 77 61 72 6e 69 6e 67 73 5f 70 72  ].fn warnings_pr
ebe0: 69 6e 74 65 64 5f 6f 6e 5f 76 76 28 29 20 7b 0a  inted_on_vv() {.
ebf0: 20 20 20 20 50 61 63 6b 61 67 65 3a 3a 6e 65 77      Package::new
ec00: 28 22 62 61 72 22 2c 20 22 30 2e 31 2e 30 22 29  ("bar", "0.1.0")
ec10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2e 66 69  .            .fi
ec20: 6c 65 28 22 62 75 69 6c 64 2e 72 73 22 2c 20 72  le("build.rs", r
ec30: 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #".             
ec40: 20 20 20 66 6e 20 6d 61 69 6e 28 29 20 7b 0a 20     fn main() {. 
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec60: 20 20 20 70 72 69 6e 74 6c 6e 21 28 22 63 61 72     println!("car
ec70: 67 6f 3a 77 61 72 6e 69 6e 67 3d 66 6f 6f 22 29  go:warning=foo")
ec80: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
ec90: 20 20 20 20 20 20 70 72 69 6e 74 6c 6e 21 28 22        println!("
eca0: 63 61 72 67 6f 3a 77 61 72 6e 69 6e 67 3d 62 61  cargo:warning=ba
ecb0: 72 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  r");.           
ecc0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
ecd0: 20 20 20 22 23 29 0a 20 20 20 20 20 20 20 20 20     "#).         
ece0: 20 20 20 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e     .file("Cargo.
ecf0: 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20  toml", r#".     
ed00: 20 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f 6a             [proj
ed10: 65 63 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20  ect].           
ed20: 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 62 61 72       name = "bar
ed30: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
ed40: 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 31    version = "0.1
ed50: 2e 30 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  .0".            
ed60: 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d      authors = []
ed70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ed80: 20 62 75 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e   build = "build.
ed90: 72 73 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs".            
eda0: 22 23 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  "#).            
edb0: 2e 66 69 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72  .file("src/lib.r
edc0: 73 22 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20  s", "").        
edd0: 20 20 20 20 2e 70 75 62 6c 69 73 68 28 29 3b 0a      .publish();.
ede0: 0a 20 20 20 20 6c 65 74 20 70 20 3d 20 70 72 6f  .    let p = pro
edf0: 6a 65 63 74 28 22 66 6f 6f 22 29 0a 20 20 20 20  ject("foo").    
ee00: 20 20 20 20 2e 66 69 6c 65 28 22 43 61 72 67 6f      .file("Cargo
ee10: 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20  .toml", r#".    
ee20: 20 20 20 20 20 20 20 20 5b 70 72 6f 6a 65 63 74          [project
ee30: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61  ].            na
ee40: 6d 65 20 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20  me = "foo".     
ee50: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d         version =
ee60: 20 22 30 2e 35 2e 30 22 0a 20 20 20 20 20 20 20   "0.5.0".       
ee70: 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b       authors = [
ee80: 5d 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ]..            [
ee90: 64 65 70 65 6e 64 65 6e 63 69 65 73 5d 0a 20 20  dependencies].  
eea0: 20 20 20 20 20 20 20 20 20 20 62 61 72 20 3d 20            bar = 
eeb0: 22 2a 22 0a 20 20 20 20 20 20 20 20 22 23 29 0a  "*".        "#).
eec0: 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28 22 73          .file("s
eed0: 72 63 2f 6c 69 62 2e 72 73 22 2c 20 22 22 29 3b  rc/lib.rs", "");
eee0: 0a 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68 61  ..    assert_tha
eef0: 74 28 70 2e 63 61 72 67 6f 5f 70 72 6f 63 65 73  t(p.cargo_proces
ef00: 73 28 22 62 75 69 6c 64 22 29 2e 61 72 67 28 22  s("build").arg("
ef10: 2d 76 76 22 29 2c 0a 20 20 20 20 20 20 20 20 20  -vv"),.         
ef20: 20 20 20 20 20 20 20 65 78 65 63 73 28 29 2e 77         execs().w
ef30: 69 74 68 5f 73 74 61 74 75 73 28 30 29 0a 20 20  ith_status(0).  
ef40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef50: 20 20 20 20 20 2e 77 69 74 68 5f 73 74 64 65 72       .with_stder
ef60: 72 28 22 5c 0a 5b 55 50 44 41 54 49 4e 47 5d 20  r("\.[UPDATING] 
ef70: 72 65 67 69 73 74 72 79 20 60 5b 2e 2e 5d 60 0a  registry `[..]`.
ef80: 5b 44 4f 57 4e 4c 4f 41 44 49 4e 47 5d 20 62 61  [DOWNLOADING] ba
ef90: 72 20 76 30 2e 31 2e 30 20 28 5b 2e 2e 5d 29 0a  r v0.1.0 ([..]).
efa0: 5b 43 4f 4d 50 49 4c 49 4e 47 5d 20 62 61 72 20  [COMPILING] bar 
efb0: 76 30 2e 31 2e 30 0a 5b 52 55 4e 4e 49 4e 47 5d  v0.1.0.[RUNNING]
efc0: 20 60 72 75 73 74 63 20 5b 2e 2e 5d 60 0a 5b 52   `rustc [..]`.[R
efd0: 55 4e 4e 49 4e 47 5d 20 60 5b 2e 2e 5d 60 0a 77  UNNING] `[..]`.w
efe0: 61 72 6e 69 6e 67 3a 20 66 6f 6f 0a 77 61 72 6e  arning: foo.warn
eff0: 69 6e 67 3a 20 62 61 72 0a 5b 52 55 4e 4e 49 4e  ing: bar.[RUNNIN
f000: 47 5d 20 60 72 75 73 74 63 20 5b 2e 2e 5d 60 0a  G] `rustc [..]`.
f010: 5b 43 4f 4d 50 49 4c 49 4e 47 5d 20 66 6f 6f 20  [COMPILING] foo 
f020: 76 30 2e 35 2e 30 20 28 5b 2e 2e 5d 29 0a 5b 52  v0.5.0 ([..]).[R
f030: 55 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63 20 5b  UNNING] `rustc [
f040: 2e 2e 5d 60 0a 5b 46 49 4e 49 53 48 45 44 5d 20  ..]`.[FINISHED] 
f050: 64 65 76 20 5b 75 6e 6f 70 74 69 6d 69 7a 65 64  dev [unoptimized
f060: 20 2b 20 64 65 62 75 67 69 6e 66 6f 5d 20 74 61   + debuginfo] ta
f070: 72 67 65 74 28 73 29 20 69 6e 20 5b 2e 2e 5d 0a  rget(s) in [..].
f080: 22 29 29 3b 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a  "));.}..#[test].
f090: 66 6e 20 6f 75 74 70 75 74 5f 73 68 6f 77 73 5f  fn output_shows_
f0a0: 6f 6e 5f 76 76 28 29 20 7b 0a 20 20 20 20 6c 65  on_vv() {.    le
f0b0: 74 20 70 20 3d 20 70 72 6f 6a 65 63 74 28 22 66  t p = project("f
f0c0: 6f 6f 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69  oo").        .fi
f0d0: 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c  le("Cargo.toml",
f0e0: 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20   r#".           
f0f0: 20 5b 70 72 6f 6a 65 63 74 5d 0a 20 20 20 20 20   [project].     
f100: 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 66         name = "f
f110: 6f 6f 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  oo".            
f120: 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 35 2e 30  version = "0.5.0
f130: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 75  ".            au
f140: 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20 20  thors = [].     
f150: 20 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20 22         build = "
f160: 62 75 69 6c 64 2e 72 73 22 0a 20 20 20 20 20 20  build.rs".      
f170: 20 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66    "#).        .f
f180: 69 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72 73 22  ile("src/lib.rs"
f190: 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66  , "").        .f
f1a0: 69 6c 65 28 22 62 75 69 6c 64 2e 72 73 22 2c 20  ile("build.rs", 
f1b0: 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  r#".            
f1c0: 75 73 65 20 73 74 64 3a 3a 69 6f 3a 3a 70 72 65  use std::io::pre
f1d0: 6c 75 64 65 3a 3a 2a 3b 0a 0a 20 20 20 20 20 20  lude::*;..      
f1e0: 20 20 20 20 20 20 66 6e 20 6d 61 69 6e 28 29 20        fn main() 
f1f0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
f200: 20 20 73 74 64 3a 3a 69 6f 3a 3a 73 74 64 65 72    std::io::stder
f210: 72 28 29 2e 77 72 69 74 65 5f 61 6c 6c 28 62 22  r().write_all(b"
f220: 73 74 64 65 72 72 5c 6e 22 29 2e 75 6e 77 72 61  stderr\n").unwra
f230: 70 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  p();.           
f240: 20 20 20 20 20 73 74 64 3a 3a 69 6f 3a 3a 73 74       std::io::st
f250: 64 6f 75 74 28 29 2e 77 72 69 74 65 5f 61 6c 6c  dout().write_all
f260: 28 62 22 73 74 64 6f 75 74 5c 6e 22 29 2e 75 6e  (b"stdout\n").un
f270: 77 72 61 70 28 29 3b 0a 20 20 20 20 20 20 20 20  wrap();.        
f280: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 22 23      }.        "#
f290: 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74 5f 74  );..    assert_t
f2a0: 68 61 74 28 70 2e 63 61 72 67 6f 5f 70 72 6f 63  hat(p.cargo_proc
f2b0: 65 73 73 28 22 62 75 69 6c 64 22 29 2e 61 72 67  ess("build").arg
f2c0: 28 22 2d 76 76 22 29 2c 0a 20 20 20 20 20 20 20  ("-vv"),.       
f2d0: 20 20 20 20 20 20 20 20 20 65 78 65 63 73 28 29           execs()
f2e0: 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30 29 0a  .with_status(0).
f2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f300: 20 20 20 20 20 20 20 2e 77 69 74 68 5f 73 74 64         .with_std
f310: 6f 75 74 28 22 5c 0a 73 74 64 6f 75 74 0a 22 29  out("\.stdout.")
f320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f330: 20 20 20 20 20 20 20 20 2e 77 69 74 68 5f 73 74          .with_st
f340: 64 65 72 72 28 22 5c 0a 5b 43 4f 4d 50 49 4c 49  derr("\.[COMPILI
f350: 4e 47 5d 20 66 6f 6f 20 76 30 2e 35 2e 30 20 28  NG] foo v0.5.0 (
f360: 5b 2e 2e 5d 29 0a 5b 52 55 4e 4e 49 4e 47 5d 20  [..]).[RUNNING] 
f370: 60 72 75 73 74 63 20 5b 2e 2e 5d 60 0a 5b 52 55  `rustc [..]`.[RU
f380: 4e 4e 49 4e 47 5d 20 60 5b 2e 2e 5d 60 0a 73 74  NNING] `[..]`.st
f390: 64 65 72 72 0a 5b 52 55 4e 4e 49 4e 47 5d 20 60  derr.[RUNNING] `
f3a0: 72 75 73 74 63 20 5b 2e 2e 5d 60 0a 5b 46 49 4e  rustc [..]`.[FIN
f3b0: 49 53 48 45 44 5d 20 64 65 76 20 5b 75 6e 6f 70  ISHED] dev [unop
f3c0: 74 69 6d 69 7a 65 64 20 2b 20 64 65 62 75 67 69  timized + debugi
f3d0: 6e 66 6f 5d 20 74 61 72 67 65 74 28 73 29 20 69  nfo] target(s) i
f3e0: 6e 20 5b 2e 2e 5d 0a 22 29 29 3b 0a 7d 0a 0a 23  n [..]."));.}..#
f3f0: 5b 74 65 73 74 5d 0a 66 6e 20 6c 69 6e 6b 73 5f  [test].fn links_
f400: 77 69 74 68 5f 64 6f 74 73 28 29 20 7b 0a 20 20  with_dots() {.  
f410: 20 20 6c 65 74 20 74 61 72 67 65 74 20 3d 20 72    let target = r
f420: 75 73 74 63 5f 68 6f 73 74 28 29 3b 0a 0a 20 20  ustc_host();..  
f430: 20 20 6c 65 74 20 70 20 3d 20 70 72 6f 6a 65 63    let p = projec
f440: 74 28 22 66 6f 6f 22 29 0a 20 20 20 20 20 20 20  t("foo").       
f450: 20 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f   .file("Cargo.to
f460: 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20  ml", r#".       
f470: 20 20 20 20 20 5b 70 72 6f 6a 65 63 74 5d 0a 20       [project]. 
f480: 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20             name 
f490: 3d 20 22 66 6f 6f 22 0a 20 20 20 20 20 20 20 20  = "foo".        
f4a0: 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30      version = "0
f4b0: 2e 35 2e 30 22 0a 20 20 20 20 20 20 20 20 20 20  .5.0".          
f4c0: 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20    authors = []. 
f4d0: 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64             build
f4e0: 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 20 20   = "build.rs".  
f4f0: 20 20 20 20 20 20 20 20 20 20 6c 69 6e 6b 73 20            links 
f500: 3d 20 22 61 2e 62 22 0a 20 20 20 20 20 20 20 20  = "a.b".        
f510: 22 23 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  "#).        .fil
f520: 65 28 22 73 72 63 2f 6c 69 62 2e 72 73 22 2c 20  e("src/lib.rs", 
f530: 22 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  "").        .fil
f540: 65 28 22 62 75 69 6c 64 2e 72 73 22 2c 20 72 23  e("build.rs", r#
f550: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6e  ".            fn
f560: 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20 20 20   main() {.      
f570: 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 6c            printl
f580: 6e 21 28 22 63 61 72 67 6f 3a 72 75 73 74 63 2d  n!("cargo:rustc-
f590: 6c 69 6e 6b 2d 73 65 61 72 63 68 3d 62 61 72 22  link-search=bar"
f5a0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  ).            }.
f5b0: 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20          "#).    
f5c0: 20 20 20 20 2e 66 69 6c 65 28 22 2e 63 61 72 67      .file(".carg
f5d0: 6f 2f 63 6f 6e 66 69 67 22 2c 20 26 66 6f 72 6d  o/config", &form
f5e0: 61 74 21 28 72 23 22 0a 20 20 20 20 20 20 20 20  at!(r#".        
f5f0: 20 20 20 20 5b 74 61 72 67 65 74 2e 7b 7d 2e 27      [target.{}.'
f600: 61 2e 62 27 5d 0a 20 20 20 20 20 20 20 20 20 20  a.b'].          
f610: 20 20 72 75 73 74 63 2d 6c 69 6e 6b 2d 73 65 61    rustc-link-sea
f620: 72 63 68 20 3d 20 5b 22 66 6f 6f 22 5d 0a 20 20  rch = ["foo"].  
f630: 20 20 20 20 20 20 22 23 2c 20 74 61 72 67 65 74        "#, target
f640: 29 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74 5f  ));..    assert_
f650: 74 68 61 74 28 70 2e 63 61 72 67 6f 5f 70 72 6f  that(p.cargo_pro
f660: 63 65 73 73 28 22 62 75 69 6c 64 22 29 2e 61 72  cess("build").ar
f670: 67 28 22 2d 76 22 29 2c 0a 20 20 20 20 20 20 20  g("-v"),.       
f680: 20 20 20 20 20 20 20 20 20 65 78 65 63 73 28 29           execs()
f690: 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30 29 0a  .with_status(0).
f6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6b0: 20 20 20 20 20 20 20 2e 77 69 74 68 5f 73 74 64         .with_std
f6c0: 65 72 72 5f 63 6f 6e 74 61 69 6e 73 28 22 5c 0a  err_contains("\.
f6d0: 5b 52 55 4e 4e 49 4e 47 5d 20 60 72 75 73 74 63  [RUNNING] `rustc
f6e0: 20 2d 2d 63 72 61 74 65 2d 6e 61 6d 65 20 66 6f   --crate-name fo
f6f0: 6f 20 5b 2e 2e 5d 20 5b 2e 2e 5d 20 2d 4c 20 66  o [..] [..] -L f
f700: 6f 6f 5b 2e 2e 5d 60 0a 22 29 29 3b 0a 7d 0a 0a  oo[..]`."));.}..
f710: 23 5b 74 65 73 74 5d 0a 66 6e 20 72 75 73 74 63  #[test].fn rustc
f720: 5f 61 6e 64 5f 72 75 73 74 64 6f 63 5f 73 65 74  _and_rustdoc_set
f730: 5f 63 6f 72 72 65 63 74 6c 79 28 29 20 7b 0a 20  _correctly() {. 
f740: 20 20 20 6c 65 74 20 62 75 69 6c 64 20 3d 20 70     let build = p
f750: 72 6f 6a 65 63 74 28 22 62 75 69 6c 64 65 72 22  roject("builder"
f760: 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c 65 28  ).        .file(
f770: 22 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20 72 23  "Cargo.toml", r#
f780: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 70  ".            [p
f790: 61 63 6b 61 67 65 5d 0a 20 20 20 20 20 20 20 20  ackage].        
f7a0: 20 20 20 20 6e 61 6d 65 20 3d 20 22 62 75 69 6c      name = "buil
f7b0: 64 65 72 22 0a 20 20 20 20 20 20 20 20 20 20 20  der".           
f7c0: 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e 30 2e   version = "0.0.
f7d0: 31 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 61  1".            a
f7e0: 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20 20 20  uthors = [].    
f7f0: 20 20 20 20 20 20 20 20 62 75 69 6c 64 20 3d 20          build = 
f800: 22 62 75 69 6c 64 2e 72 73 22 0a 20 20 20 20 20  "build.rs".     
f810: 20 20 20 22 23 29 0a 20 20 20 20 20 20 20 20 2e     "#).        .
f820: 66 69 6c 65 28 22 73 72 63 2f 6c 69 62 2e 72 73  file("src/lib.rs
f830: 22 2c 20 22 22 29 0a 20 20 20 20 20 20 20 20 2e  ", "").        .
f840: 66 69 6c 65 28 22 62 75 69 6c 64 2e 72 73 22 2c  file("build.rs",
f850: 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20   r#".           
f860: 20 20 20 75 73 65 20 73 74 64 3a 3a 65 6e 76 3b     use std::env;
f870: 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f880: 66 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20  fn main() {.    
f890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
f8a0: 73 65 72 74 5f 65 71 21 28 65 6e 76 3a 3a 76 61  sert_eq!(env::va
f8b0: 72 28 22 52 55 53 54 43 22 29 2e 75 6e 77 72 61  r("RUSTC").unwra
f8c0: 70 28 29 2c 20 22 72 75 73 74 63 22 29 3b 0a 20  p(), "rustc");. 
f8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8e0: 20 61 73 73 65 72 74 5f 65 71 21 28 65 6e 76 3a   assert_eq!(env:
f8f0: 3a 76 61 72 28 22 52 55 53 54 44 4f 43 22 29 2e  :var("RUSTDOC").
f900: 75 6e 77 72 61 70 28 29 2c 20 22 72 75 73 74 64  unwrap(), "rustd
f910: 6f 63 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  oc");.          
f920: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 22 23      }.        "#
f930: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 5f 74 68  );.    assert_th
f940: 61 74 28 62 75 69 6c 64 2e 63 61 72 67 6f 5f 70  at(build.cargo_p
f950: 72 6f 63 65 73 73 28 22 62 65 6e 63 68 22 29 2c  rocess("bench"),
f960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f970: 20 65 78 65 63 73 28 29 2e 77 69 74 68 5f 73 74   execs().with_st
f980: 61 74 75 73 28 30 29 29 3b 0a 7d 0a 0a 23 5b 74  atus(0));.}..#[t
f990: 65 73 74 5d 0a 66 6e 20 63 66 67 5f 65 6e 76 5f  est].fn cfg_env_
f9a0: 76 61 72 73 5f 61 76 61 69 6c 61 62 6c 65 28 29  vars_available()
f9b0: 20 7b 0a 20 20 20 20 6c 65 74 20 62 75 69 6c 64   {.    let build
f9c0: 20 3d 20 70 72 6f 6a 65 63 74 28 22 62 75 69 6c   = project("buil
f9d0: 64 65 72 22 29 0a 20 20 20 20 20 20 20 20 2e 66  der").        .f
f9e0: 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22  ile("Cargo.toml"
f9f0: 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  , r#".          
fa00: 20 20 5b 70 61 63 6b 61 67 65 5d 0a 20 20 20 20    [package].    
fa10: 20 20 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22          name = "
fa20: 62 75 69 6c 64 65 72 22 0a 20 20 20 20 20 20 20  builder".       
fa30: 20 20 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22       version = "
fa40: 30 2e 30 2e 31 22 0a 20 20 20 20 20 20 20 20 20  0.0.1".         
fa50: 20 20 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a     authors = [].
fa60: 20 20 20 20 20 20 20 20 20 20 20 20 62 75 69 6c              buil
fa70: 64 20 3d 20 22 62 75 69 6c 64 2e 72 73 22 0a 20  d = "build.rs". 
fa80: 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20         "#).     
fa90: 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6c 69     .file("src/li
faa0: 62 2e 72 73 22 2c 20 22 22 29 0a 20 20 20 20 20  b.rs", "").     
fab0: 20 20 20 2e 66 69 6c 65 28 22 62 75 69 6c 64 2e     .file("build.
fac0: 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20  rs", r#".       
fad0: 20 20 20 20 20 75 73 65 20 73 74 64 3a 3a 65 6e       use std::en
fae0: 76 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  v;..            
faf0: 66 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20  fn main() {.    
fb00: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20              let 
fb10: 66 61 6d 20 3d 20 65 6e 76 3a 3a 76 61 72 28 22  fam = env::var("
fb20: 43 41 52 47 4f 5f 43 46 47 5f 54 41 52 47 45 54  CARGO_CFG_TARGET
fb30: 5f 46 41 4d 49 4c 59 22 29 2e 75 6e 77 72 61 70  _FAMILY").unwrap
fb40: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ();.            
fb50: 20 20 20 20 69 66 20 63 66 67 21 28 75 6e 69 78      if cfg!(unix
fb60: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
fb70: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 5f 65          assert_e
fb80: 71 21 28 66 61 6d 2c 20 22 75 6e 69 78 22 29 3b  q!(fam, "unix");
fb90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fba0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
fbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
fbc0: 73 65 72 74 5f 65 71 21 28 66 61 6d 2c 20 22 77  sert_eq!(fam, "w
fbd0: 69 6e 64 6f 77 73 22 29 3b 0a 20 20 20 20 20 20  indows");.      
fbe0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
fbf0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
fc00: 20 20 22 23 29 3b 0a 20 20 20 20 61 73 73 65 72    "#);.    asser
fc10: 74 5f 74 68 61 74 28 62 75 69 6c 64 2e 63 61 72  t_that(build.car
fc20: 67 6f 5f 70 72 6f 63 65 73 73 28 22 62 65 6e 63  go_process("benc
fc30: 68 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20  h"),.           
fc40: 20 20 20 20 20 65 78 65 63 73 28 29 2e 77 69 74       execs().wit
fc50: 68 5f 73 74 61 74 75 73 28 30 29 29 3b 0a 7d 0a  h_status(0));.}.
fc60: 0a 23 5b 74 65 73 74 5d 0a 66 6e 20 73 77 69 74  .#[test].fn swit
fc70: 63 68 5f 66 65 61 74 75 72 65 73 5f 72 65 72 75  ch_features_reru
fc80: 6e 28 29 20 7b 0a 20 20 20 20 6c 65 74 20 62 75  n() {.    let bu
fc90: 69 6c 64 20 3d 20 70 72 6f 6a 65 63 74 28 22 62  ild = project("b
fca0: 75 69 6c 64 65 72 22 29 0a 20 20 20 20 20 20 20  uilder").       
fcb0: 20 2e 66 69 6c 65 28 22 43 61 72 67 6f 2e 74 6f   .file("Cargo.to
fcc0: 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20  ml", r#".       
fcd0: 20 20 20 20 20 5b 70 61 63 6b 61 67 65 5d 0a 20       [package]. 
fce0: 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20             name 
fcf0: 3d 20 22 62 75 69 6c 64 65 72 22 0a 20 20 20 20  = "builder".    
fd00: 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20          version 
fd10: 3d 20 22 30 2e 30 2e 31 22 0a 20 20 20 20 20 20  = "0.0.1".      
fd20: 20 20 20 20 20 20 61 75 74 68 6f 72 73 20 3d 20        authors = 
fd30: 5b 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  [].            b
fd40: 75 69 6c 64 20 3d 20 22 62 75 69 6c 64 2e 72 73  uild = "build.rs
fd50: 22 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  "..            [
fd60: 66 65 61 74 75 72 65 73 5d 0a 20 20 20 20 20 20  features].      
fd70: 20 20 20 20 20 20 66 6f 6f 20 3d 20 5b 5d 0a 20        foo = []. 
fd80: 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20         "#).     
fd90: 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6d 61     .file("src/ma
fda0: 69 6e 2e 72 73 22 2c 20 72 23 22 0a 20 20 20 20  in.rs", r#".    
fdb0: 20 20 20 20 20 20 20 20 66 6e 20 6d 61 69 6e 28          fn main(
fdc0: 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
fdd0: 20 20 20 20 70 72 69 6e 74 6c 6e 21 28 69 6e 63      println!(inc
fde0: 6c 75 64 65 5f 73 74 72 21 28 63 6f 6e 63 61 74  lude_str!(concat
fdf0: 21 28 65 6e 76 21 28 22 4f 55 54 5f 44 49 52 22  !(env!("OUT_DIR"
fe00: 29 2c 20 22 2f 6f 75 74 70 75 74 22 29 29 29 3b  ), "/output")));
fe10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20  .            }. 
fe20: 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20         "#).     
fe30: 20 20 20 2e 66 69 6c 65 28 22 62 75 69 6c 64 2e     .file("build.
fe40: 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20 20 20  rs", r#".       
fe50: 20 20 20 20 20 75 73 65 20 73 74 64 3a 3a 65 6e       use std::en
fe60: 76 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  v;.            u
fe70: 73 65 20 73 74 64 3a 3a 66 73 3a 3a 46 69 6c 65  se std::fs::File
fe80: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ;.            us
fe90: 65 20 73 74 64 3a 3a 69 6f 3a 3a 57 72 69 74 65  e std::io::Write
fea0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ;.            us
feb0: 65 20 73 74 64 3a 3a 70 61 74 68 3a 3a 50 61 74  e std::path::Pat
fec0: 68 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20  h;..            
fed0: 66 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20 20 20  fn main() {.    
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20              let 
fef0: 6f 75 74 5f 64 69 72 20 3d 20 65 6e 76 3a 3a 76  out_dir = env::v
ff00: 61 72 5f 6f 73 28 22 4f 55 54 5f 44 49 52 22 29  ar_os("OUT_DIR")
ff10: 2e 75 6e 77 72 61 70 28 29 3b 0a 20 20 20 20 20  .unwrap();.     
ff20: 20 20 20 20 20 20 20 20 20 20 20 6c 65 74 20 6f             let o
ff30: 75 74 5f 64 69 72 20 3d 20 50 61 74 68 3a 3a 6e  ut_dir = Path::n
ff40: 65 77 28 26 6f 75 74 5f 64 69 72 29 2e 6a 6f 69  ew(&out_dir).joi
ff50: 6e 28 22 6f 75 74 70 75 74 22 29 3b 0a 20 20 20  n("output");.   
ff60: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 74               let
ff70: 20 6d 75 74 20 66 20 3d 20 46 69 6c 65 3a 3a 63   mut f = File::c
ff80: 72 65 61 74 65 28 26 6f 75 74 5f 64 69 72 29 2e  reate(&out_dir).
ff90: 75 6e 77 72 61 70 28 29 3b 0a 0a 20 20 20 20 20  unwrap();..     
ffa0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 65 6e             if en
ffb0: 76 3a 3a 76 61 72 5f 6f 73 28 22 43 41 52 47 4f  v::var_os("CARGO
ffc0: 5f 46 45 41 54 55 52 45 5f 46 4f 4f 22 29 2e 69  _FEATURE_FOO").i
ffd0: 73 5f 73 6f 6d 65 28 29 20 7b 0a 20 20 20 20 20  s_some() {.     
ffe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
fff0: 2e 77 72 69 74 65 5f 61 6c 6c 28 62 22 66 6f 6f  .write_all(b"foo
10000 22 29 2e 75 6e 77 72 61 70 28 29 3b 0a 20 20 20  ").unwrap();.   
10010 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65               } e
10020 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 20 20  lse {.          
10030 20 20 20 20 20 20 20 20 20 20 66 2e 77 72 69 74            f.writ
10040 65 5f 61 6c 6c 28 62 22 62 61 72 22 29 2e 75 6e  e_all(b"bar").un
10050 77 72 61 70 28 29 3b 0a 20 20 20 20 20 20 20 20  wrap();.        
10060 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
10070 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
10080 22 23 29 3b 0a 20 20 20 20 62 75 69 6c 64 2e 62  "#);.    build.b
10090 75 69 6c 64 28 29 3b 0a 0a 20 20 20 20 61 73 73  uild();..    ass
100a0 65 72 74 5f 74 68 61 74 28 62 75 69 6c 64 2e 63  ert_that(build.c
100b0 61 72 67 6f 28 22 72 75 6e 22 29 2e 61 72 67 28  argo("run").arg(
100c0 22 2d 76 22 29 2e 61 72 67 28 22 2d 2d 66 65 61  "-v").arg("--fea
100d0 74 75 72 65 73 3d 66 6f 6f 22 29 2c 0a 20 20 20  tures=foo"),.   
100e0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78 65               exe
100f0 63 73 28 29 2e 77 69 74 68 5f 73 74 61 74 75 73  cs().with_status
10100 28 30 29 2e 77 69 74 68 5f 73 74 64 6f 75 74 28  (0).with_stdout(
10110 22 66 6f 6f 5c 6e 22 29 29 3b 0a 20 20 20 20 61  "foo\n"));.    a
10120 73 73 65 72 74 5f 74 68 61 74 28 62 75 69 6c 64  ssert_that(build
10130 2e 63 61 72 67 6f 28 22 72 75 6e 22 29 2e 61 72  .cargo("run").ar
10140 67 28 22 2d 76 22 29 2c 0a 20 20 20 20 20 20 20  g("-v"),.       
10150 20 20 20 20 20 20 20 20 20 65 78 65 63 73 28 29           execs()
10160 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30 29 2e  .with_status(0).
10170 77 69 74 68 5f 73 74 64 6f 75 74 28 22 62 61 72  with_stdout("bar
10180 5c 6e 22 29 29 3b 0a 20 20 20 20 61 73 73 65 72  \n"));.    asser
10190 74 5f 74 68 61 74 28 62 75 69 6c 64 2e 63 61 72  t_that(build.car
101a0 67 6f 28 22 72 75 6e 22 29 2e 61 72 67 28 22 2d  go("run").arg("-
101b0 76 22 29 2e 61 72 67 28 22 2d 2d 66 65 61 74 75  v").arg("--featu
101c0 72 65 73 3d 66 6f 6f 22 29 2c 0a 20 20 20 20 20  res=foo"),.     
101d0 20 20 20 20 20 20 20 20 20 20 20 65 78 65 63 73             execs
101e0 28 29 2e 77 69 74 68 5f 73 74 61 74 75 73 28 30  ().with_status(0
101f0 29 2e 77 69 74 68 5f 73 74 64 6f 75 74 28 22 66  ).with_stdout("f
10200 6f 6f 5c 6e 22 29 29 3b 0a 7d 0a 0a 23 5b 74 65  oo\n"));.}..#[te
10210 73 74 5d 0a 66 6e 20 61 73 73 75 6d 65 5f 62 75  st].fn assume_bu
10220 69 6c 64 5f 73 63 72 69 70 74 5f 77 68 65 6e 5f  ild_script_when_
10230 62 75 69 6c 64 5f 72 73 5f 70 72 65 73 65 6e 74  build_rs_present
10240 28 29 20 7b 0a 20 20 20 20 6c 65 74 20 70 20 3d  () {.    let p =
10250 20 70 72 6f 6a 65 63 74 28 22 62 75 69 6c 64 65   project("builde
10260 72 22 29 0a 20 20 20 20 20 20 20 20 2e 66 69 6c  r").        .fil
10270 65 28 22 43 61 72 67 6f 2e 74 6f 6d 6c 22 2c 20  e("Cargo.toml", 
10280 72 23 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  r#".            
10290 5b 70 61 63 6b 61 67 65 5d 0a 20 20 20 20 20 20  [package].      
102a0 20 20 20 20 20 20 6e 61 6d 65 20 3d 20 22 62 75        name = "bu
102b0 69 6c 64 65 72 22 0a 20 20 20 20 20 20 20 20 20  ilder".         
102c0 20 20 20 76 65 72 73 69 6f 6e 20 3d 20 22 30 2e     version = "0.
102d0 30 2e 31 22 0a 20 20 20 20 20 20 20 20 20 20 20  0.1".           
102e0 20 61 75 74 68 6f 72 73 20 3d 20 5b 5d 0a 20 20   authors = [].  
102f0 20 20 20 20 20 20 22 23 29 0a 20 20 20 20 20 20        "#).      
10300 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6d 61 69    .file("src/mai
10310 6e 2e 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20  n.rs", r#".     
10320 20 20 20 20 20 20 20 66 6e 20 6d 61 69 6e 28 29         fn main()
10330 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
10340 20 20 20 69 66 20 21 20 63 66 67 21 28 66 6f 6f     if ! cfg!(foo
10350 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
10360 20 20 20 20 20 20 20 20 70 61 6e 69 63 21 28 22          panic!("
10370 74 68 65 20 62 75 69 6c 64 20 73 63 72 69 70 74  the build script
10380 20 77 61 73 20 6e 6f 74 20 72 75 6e 22 29 3b 0a   was not run");.
10390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103a0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a  }.            }.
103b0 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20          "#).    
103c0 20 20 20 20 2e 66 69 6c 65 28 22 62 75 69 6c 64      .file("build
103d0 2e 72 73 22 2c 20 72 23 22 0a 20 20 20 20 20 20  .rs", r#".      
103e0 20 20 20 20 20 20 66 6e 20 6d 61 69 6e 28 29 20        fn main() 
103f0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
10400 20 20 70 72 69 6e 74 6c 6e 21 28 22 63 61 72 67    println!("carg
10410 6f 3a 72 75 73 74 63 2d 63 66 67 3d 66 6f 6f 22  o:rustc-cfg=foo"
10420 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
10430 0a 20 20 20 20 20 20 20 20 22 23 29 3b 0a 20 20  .        "#);.  
10440 20 20 70 2e 62 75 69 6c 64 28 29 3b 0a 0a 20 20    p.build();..  
10450 20 20 61 73 73 65 72 74 5f 74 68 61 74 28 70 2e    assert_that(p.
10460 63 61 72 67 6f 28 22 72 75 6e 22 29 2e 61 72 67  cargo("run").arg
10470 28 22 2d 76 22 29 2c 0a 20 20 20 20 20 20 20 20  ("-v"),.        
10480 20 20 20 20 20 20 20 20 65 78 65 63 73 28 29 2e          execs().
10490 77 69 74 68 5f 73 74 61 74 75 73 28 30 29 29 3b  with_status(0));
104a0 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66 6e 20 69  .}..#[test].fn i
104b0 66 5f 62 75 69 6c 64 5f 73 65 74 5f 74 6f 5f 66  f_build_set_to_f
104c0 61 6c 73 65 5f 64 6f 6e 74 5f 74 72 65 61 74 5f  alse_dont_treat_
104d0 62 75 69 6c 64 5f 72 73 5f 61 73 5f 62 75 69 6c  build_rs_as_buil
104e0 64 5f 73 63 72 69 70 74 28 29 20 7b 0a 20 20 20  d_script() {.   
104f0 20 6c 65 74 20 70 20 3d 20 70 72 6f 6a 65 63 74   let p = project
10500 28 22 62 75 69 6c 64 65 72 22 29 0a 20 20 20 20  ("builder").    
10510 20 20 20 20 2e 66 69 6c 65 28 22 43 61 72 67 6f      .file("Cargo
10520 2e 74 6f 6d 6c 22 2c 20 72 23 22 0a 20 20 20 20  .toml", r#".    
10530 20 20 20 20 20 20 20 20 5b 70 61 63 6b 61 67 65          [package
10540 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 61  ].            na
10550 6d 65 20 3d 20 22 62 75 69 6c 64 65 72 22 0a 20  me = "builder". 
10560 20 20 20 20 20 20 20 20 20 20 20 76 65 72 73 69             versi
10570 6f 6e 20 3d 20 22 30 2e 30 2e 31 22 0a 20 20 20  on = "0.0.1".   
10580 20 20 20 20 20 20 20 20 20 61 75 74 68 6f 72 73           authors
10590 20 3d 20 5b 5d 0a 20 20 20 20 20 20 20 20 20 20   = [].          
105a0 20 20 62 75 69 6c 64 20 3d 20 66 61 6c 73 65 0a    build = false.
105b0 20 20 20 20 20 20 20 20 22 23 29 0a 20 20 20 20          "#).    
105c0 20 20 20 20 2e 66 69 6c 65 28 22 73 72 63 2f 6d      .file("src/m
105d0 61 69 6e 2e 72 73 22 2c 20 72 23 22 0a 20 20 20  ain.rs", r#".   
105e0 20 20 20 20 20 20 20 20 20 66 6e 20 6d 61 69 6e           fn main
105f0 28 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20  () {.           
10600 20 20 20 20 20 69 66 20 63 66 67 21 28 66 6f 6f       if cfg!(foo
10610 29 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) {.            
10620 20 20 20 20 20 20 20 20 70 61 6e 69 63 21 28 22          panic!("
10630 74 68 65 20 62 75 69 6c 64 20 73 63 72 69 70 74  the build script
10640 20 77 61 73 20 72 75 6e 22 29 3b 0a 20 20 20 20   was run");.    
10650 20 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20              }.  
10660 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
10670 20 20 20 20 22 23 29 0a 20 20 20 20 20 20 20 20      "#).        
10680 2e 66 69 6c 65 28 22 62 75 69 6c 64 2e 72 73 22  .file("build.rs"
10690 2c 20 72 23 22 0a 20 20 20 20 20 20 20 20 20 20  , r#".          
106a0 20 20 66 6e 20 6d 61 69 6e 28 29 20 7b 0a 20 20    fn main() {.  
106b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
106c0 69 6e 74 6c 6e 21 28 22 63 61 72 67 6f 3a 72 75  intln!("cargo:ru
106d0 73 74 63 2d 63 66 67 3d 66 6f 6f 22 29 3b 0a 20  stc-cfg=foo");. 
106e0 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
106f0 20 20 20 20 20 22 23 29 3b 0a 20 20 20 20 70 2e       "#);.    p.
10700 62 75 69 6c 64 28 29 3b 0a 0a 20 20 20 20 61 73  build();..    as
10710 73 65 72 74 5f 74 68 61 74 28 70 2e 63 61 72 67  sert_that(p.carg
10720 6f 28 22 72 75 6e 22 29 2e 61 72 67 28 22 2d 76  o("run").arg("-v
10730 22 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  "),.            
10740 20 20 20 20 65 78 65 63 73 28 29 2e 77 69 74 68      execs().with
10750 5f 73 74 61 74 75 73 28 30 29 29 3b 0a 7d 0a     _status(0));.}.