Hex Artifact Content
Not logged in

Artifact 41d50cc14228310725ed29d64665e837c9b06be6:


0000: 2f 2f 20 43 6f 70 79 72 69 67 68 74 20 32 30 31  // Copyright 201
0010: 32 2d 32 30 31 34 20 54 68 65 20 52 75 73 74 20  2-2014 The Rust 
0020: 50 72 6f 6a 65 63 74 20 44 65 76 65 6c 6f 70 65  Project Develope
0030: 72 73 2e 20 53 65 65 20 74 68 65 20 43 4f 50 59  rs. See the COPY
0040: 52 49 47 48 54 0a 2f 2f 20 66 69 6c 65 20 61 74  RIGHT.// file at
0050: 20 74 68 65 20 74 6f 70 2d 6c 65 76 65 6c 20 64   the top-level d
0060: 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 69 73  irectory of this
0070: 20 64 69 73 74 72 69 62 75 74 69 6f 6e 20 61 6e   distribution an
0080: 64 20 61 74 0a 2f 2f 20 68 74 74 70 3a 2f 2f 72  d at.// http://r
0090: 75 73 74 2d 6c 61 6e 67 2e 6f 72 67 2f 43 4f 50  ust-lang.org/COP
00a0: 59 52 49 47 48 54 2e 0a 2f 2f 0a 2f 2f 20 4c 69  YRIGHT..//.// Li
00b0: 63 65 6e 73 65 64 20 75 6e 64 65 72 20 74 68 65  censed under the
00c0: 20 41 70 61 63 68 65 20 4c 69 63 65 6e 73 65 2c   Apache License,
00d0: 20 56 65 72 73 69 6f 6e 20 32 2e 30 20 3c 4c 49   Version 2.0 <LI
00e0: 43 45 4e 53 45 2d 41 50 41 43 48 45 20 6f 72 0a  CENSE-APACHE or.
00f0: 2f 2f 20 68 74 74 70 3a 2f 2f 77 77 77 2e 61 70  // http://www.ap
0100: 61 63 68 65 2e 6f 72 67 2f 6c 69 63 65 6e 73 65  ache.org/license
0110: 73 2f 4c 49 43 45 4e 53 45 2d 32 2e 30 3e 20 6f  s/LICENSE-2.0> o
0120: 72 20 74 68 65 20 4d 49 54 20 6c 69 63 65 6e 73  r the MIT licens
0130: 65 0a 2f 2f 20 3c 4c 49 43 45 4e 53 45 2d 4d 49  e.// <LICENSE-MI
0140: 54 20 6f 72 20 68 74 74 70 3a 2f 2f 6f 70 65 6e  T or http://open
0150: 73 6f 75 72 63 65 2e 6f 72 67 2f 6c 69 63 65 6e  source.org/licen
0160: 73 65 73 2f 4d 49 54 3e 2c 20 61 74 20 79 6f 75  ses/MIT>, at you
0170: 72 0a 2f 2f 20 6f 70 74 69 6f 6e 2e 20 54 68 69  r.// option. Thi
0180: 73 20 66 69 6c 65 20 6d 61 79 20 6e 6f 74 20 62  s file may not b
0190: 65 20 63 6f 70 69 65 64 2c 20 6d 6f 64 69 66 69  e copied, modifi
01a0: 65 64 2c 20 6f 72 20 64 69 73 74 72 69 62 75 74  ed, or distribut
01b0: 65 64 0a 2f 2f 20 65 78 63 65 70 74 20 61 63 63  ed.// except acc
01c0: 6f 72 64 69 6e 67 20 74 6f 20 74 68 6f 73 65 20  ording to those 
01d0: 74 65 72 6d 73 2e 0a 70 75 62 20 75 73 65 20 73  terms..pub use s
01e0: 65 6c 66 3a 3a 4d 6f 64 65 3a 3a 2a 3b 0a 0a 75  elf::Mode::*;..u
01f0: 73 65 20 73 74 64 3a 3a 66 6d 74 3b 0a 75 73 65  se std::fmt;.use
0200: 20 73 74 64 3a 3a 73 74 72 3a 3a 46 72 6f 6d 53   std::str::FromS
0210: 74 72 3b 0a 75 73 65 20 73 74 64 3a 3a 70 61 74  tr;.use std::pat
0220: 68 3a 3a 50 61 74 68 42 75 66 3b 0a 0a 23 5b 64  h::PathBuf;..#[d
0230: 65 72 69 76 65 28 43 6c 6f 6e 65 2c 20 43 6f 70  erive(Clone, Cop
0240: 79 2c 20 50 61 72 74 69 61 6c 45 71 2c 20 44 65  y, PartialEq, De
0250: 62 75 67 29 5d 0a 70 75 62 20 65 6e 75 6d 20 4d  bug)].pub enum M
0260: 6f 64 65 20 7b 0a 20 20 20 20 43 6f 6d 70 69 6c  ode {.    Compil
0270: 65 46 61 69 6c 2c 0a 20 20 20 20 50 61 72 73 65  eFail,.    Parse
0280: 46 61 69 6c 2c 0a 20 20 20 20 52 75 6e 46 61 69  Fail,.    RunFai
0290: 6c 2c 0a 20 20 20 20 52 75 6e 50 61 73 73 2c 0a  l,.    RunPass,.
02a0: 20 20 20 20 52 75 6e 50 61 73 73 56 61 6c 67 72      RunPassValgr
02b0: 69 6e 64 2c 0a 20 20 20 20 50 72 65 74 74 79 2c  ind,.    Pretty,
02c0: 0a 20 20 20 20 44 65 62 75 67 49 6e 66 6f 47 64  .    DebugInfoGd
02d0: 62 2c 0a 20 20 20 20 44 65 62 75 67 49 6e 66 6f  b,.    DebugInfo
02e0: 4c 6c 64 62 2c 0a 20 20 20 20 43 6f 64 65 67 65  Lldb,.    Codege
02f0: 6e 2c 0a 20 20 20 20 52 75 73 74 64 6f 63 2c 0a  n,.    Rustdoc,.
0300: 20 20 20 20 43 6f 64 65 67 65 6e 55 6e 69 74 73      CodegenUnits
0310: 2c 0a 20 20 20 20 49 6e 63 72 65 6d 65 6e 74 61  ,.    Incrementa
0320: 6c 2c 0a 20 20 20 20 52 75 6e 4d 61 6b 65 2c 0a  l,.    RunMake,.
0330: 20 20 20 20 55 69 2c 0a 20 20 20 20 4d 69 72 4f      Ui,.    MirO
0340: 70 74 2c 0a 7d 0a 0a 69 6d 70 6c 20 46 72 6f 6d  pt,.}..impl From
0350: 53 74 72 20 66 6f 72 20 4d 6f 64 65 20 7b 0a 20  Str for Mode {. 
0360: 20 20 20 74 79 70 65 20 45 72 72 20 3d 20 28 29     type Err = ()
0370: 3b 0a 20 20 20 20 66 6e 20 66 72 6f 6d 5f 73 74  ;.    fn from_st
0380: 72 28 73 3a 20 26 73 74 72 29 20 2d 3e 20 52 65  r(s: &str) -> Re
0390: 73 75 6c 74 3c 4d 6f 64 65 2c 20 28 29 3e 20 7b  sult<Mode, ()> {
03a0: 0a 20 20 20 20 20 20 20 20 6d 61 74 63 68 20 73  .        match s
03b0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 22   {.            "
03c0: 63 6f 6d 70 69 6c 65 2d 66 61 69 6c 22 20 3d 3e  compile-fail" =>
03d0: 20 4f 6b 28 43 6f 6d 70 69 6c 65 46 61 69 6c 29   Ok(CompileFail)
03e0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 70  ,.            "p
03f0: 61 72 73 65 2d 66 61 69 6c 22 20 3d 3e 20 4f 6b  arse-fail" => Ok
0400: 28 50 61 72 73 65 46 61 69 6c 29 2c 0a 20 20 20  (ParseFail),.   
0410: 20 20 20 20 20 20 20 20 20 22 72 75 6e 2d 66 61           "run-fa
0420: 69 6c 22 20 3d 3e 20 4f 6b 28 52 75 6e 46 61 69  il" => Ok(RunFai
0430: 6c 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  l),.            
0440: 22 72 75 6e 2d 70 61 73 73 22 20 3d 3e 20 4f 6b  "run-pass" => Ok
0450: 28 52 75 6e 50 61 73 73 29 2c 0a 20 20 20 20 20  (RunPass),.     
0460: 20 20 20 20 20 20 20 22 72 75 6e 2d 70 61 73 73         "run-pass
0470: 2d 76 61 6c 67 72 69 6e 64 22 20 3d 3e 20 4f 6b  -valgrind" => Ok
0480: 28 52 75 6e 50 61 73 73 56 61 6c 67 72 69 6e 64  (RunPassValgrind
0490: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  ),.            "
04a0: 70 72 65 74 74 79 22 20 3d 3e 20 4f 6b 28 50 72  pretty" => Ok(Pr
04b0: 65 74 74 79 29 2c 0a 20 20 20 20 20 20 20 20 20  etty),.         
04c0: 20 20 20 22 64 65 62 75 67 69 6e 66 6f 2d 6c 6c     "debuginfo-ll
04d0: 64 62 22 20 3d 3e 20 4f 6b 28 44 65 62 75 67 49  db" => Ok(DebugI
04e0: 6e 66 6f 4c 6c 64 62 29 2c 0a 20 20 20 20 20 20  nfoLldb),.      
04f0: 20 20 20 20 20 20 22 64 65 62 75 67 69 6e 66 6f        "debuginfo
0500: 2d 67 64 62 22 20 3d 3e 20 4f 6b 28 44 65 62 75  -gdb" => Ok(Debu
0510: 67 49 6e 66 6f 47 64 62 29 2c 0a 20 20 20 20 20  gInfoGdb),.     
0520: 20 20 20 20 20 20 20 22 63 6f 64 65 67 65 6e 22         "codegen"
0530: 20 3d 3e 20 4f 6b 28 43 6f 64 65 67 65 6e 29 2c   => Ok(Codegen),
0540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 72 75  .            "ru
0550: 73 74 64 6f 63 22 20 3d 3e 20 4f 6b 28 52 75 73  stdoc" => Ok(Rus
0560: 74 64 6f 63 29 2c 0a 20 20 20 20 20 20 20 20 20  tdoc),.         
0570: 20 20 20 22 63 6f 64 65 67 65 6e 2d 75 6e 69 74     "codegen-unit
0580: 73 22 20 3d 3e 20 4f 6b 28 43 6f 64 65 67 65 6e  s" => Ok(Codegen
0590: 55 6e 69 74 73 29 2c 0a 20 20 20 20 20 20 20 20  Units),.        
05a0: 20 20 20 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c      "incremental
05b0: 22 20 3d 3e 20 4f 6b 28 49 6e 63 72 65 6d 65 6e  " => Ok(Incremen
05c0: 74 61 6c 29 2c 0a 20 20 20 20 20 20 20 20 20 20  tal),.          
05d0: 20 20 22 72 75 6e 2d 6d 61 6b 65 22 20 3d 3e 20    "run-make" => 
05e0: 4f 6b 28 52 75 6e 4d 61 6b 65 29 2c 0a 20 20 20  Ok(RunMake),.   
05f0: 20 20 20 20 20 20 20 20 20 22 75 69 22 20 3d 3e           "ui" =>
0600: 20 4f 6b 28 55 69 29 2c 0a 20 20 20 20 20 20 20   Ok(Ui),.       
0610: 20 20 20 20 20 22 6d 69 72 2d 6f 70 74 22 20 3d       "mir-opt" =
0620: 3e 20 4f 6b 28 4d 69 72 4f 70 74 29 2c 0a 20 20  > Ok(MirOpt),.  
0630: 20 20 20 20 20 20 20 20 20 20 5f 20 3d 3e 20 45            _ => E
0640: 72 72 28 28 29 29 2c 0a 20 20 20 20 20 20 20 20  rr(()),.        
0650: 7d 0a 20 20 20 20 7d 0a 7d 0a 0a 69 6d 70 6c 20  }.    }.}..impl 
0660: 66 6d 74 3a 3a 44 69 73 70 6c 61 79 20 66 6f 72  fmt::Display for
0670: 20 4d 6f 64 65 20 7b 0a 20 20 20 20 66 6e 20 66   Mode {.    fn f
0680: 6d 74 28 26 73 65 6c 66 2c 20 66 3a 20 26 6d 75  mt(&self, f: &mu
0690: 74 20 66 6d 74 3a 3a 46 6f 72 6d 61 74 74 65 72  t fmt::Formatter
06a0: 29 20 2d 3e 20 66 6d 74 3a 3a 52 65 73 75 6c 74  ) -> fmt::Result
06b0: 20 7b 0a 20 20 20 20 20 20 20 20 66 6d 74 3a 3a   {.        fmt::
06c0: 44 69 73 70 6c 61 79 3a 3a 66 6d 74 28 6d 61 74  Display::fmt(mat
06d0: 63 68 20 2a 73 65 6c 66 20 7b 0a 20 20 20 20 20  ch *self {.     
06e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
06f0: 20 20 20 20 20 20 20 20 20 43 6f 6d 70 69 6c 65           Compile
0700: 46 61 69 6c 20 3d 3e 20 22 63 6f 6d 70 69 6c 65  Fail => "compile
0710: 2d 66 61 69 6c 22 2c 0a 20 20 20 20 20 20 20 20  -fail",.        
0720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0730: 20 20 20 20 20 20 50 61 72 73 65 46 61 69 6c 20        ParseFail 
0740: 3d 3e 20 22 70 61 72 73 65 2d 66 61 69 6c 22 2c  => "parse-fail",
0750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
0770: 75 6e 46 61 69 6c 20 3d 3e 20 22 72 75 6e 2d 66  unFail => "run-f
0780: 61 69 6c 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ail",.          
0790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07a0: 20 20 20 20 52 75 6e 50 61 73 73 20 3d 3e 20 22      RunPass => "
07b0: 72 75 6e 2d 70 61 73 73 22 2c 0a 20 20 20 20 20  run-pass",.     
07c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07d0: 20 20 20 20 20 20 20 20 20 52 75 6e 50 61 73 73           RunPass
07e0: 56 61 6c 67 72 69 6e 64 20 3d 3e 20 22 72 75 6e  Valgrind => "run
07f0: 2d 70 61 73 73 2d 76 61 6c 67 72 69 6e 64 22 2c  -pass-valgrind",
0800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
0820: 72 65 74 74 79 20 3d 3e 20 22 70 72 65 74 74 79  retty => "pretty
0830: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
0840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0850: 20 44 65 62 75 67 49 6e 66 6f 47 64 62 20 3d 3e   DebugInfoGdb =>
0860: 20 22 64 65 62 75 67 69 6e 66 6f 2d 67 64 62 22   "debuginfo-gdb"
0870: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
0880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0890: 44 65 62 75 67 49 6e 66 6f 4c 6c 64 62 20 3d 3e  DebugInfoLldb =>
08a0: 20 22 64 65 62 75 67 69 6e 66 6f 2d 6c 6c 64 62   "debuginfo-lldb
08b0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
08c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08d0: 20 43 6f 64 65 67 65 6e 20 3d 3e 20 22 63 6f 64   Codegen => "cod
08e0: 65 67 65 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  egen",.         
08f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0900: 20 20 20 20 20 52 75 73 74 64 6f 63 20 3d 3e 20       Rustdoc => 
0910: 22 72 75 73 74 64 6f 63 22 2c 0a 20 20 20 20 20  "rustdoc",.     
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0930: 20 20 20 20 20 20 20 20 20 43 6f 64 65 67 65 6e           Codegen
0940: 55 6e 69 74 73 20 3d 3e 20 22 63 6f 64 65 67 65  Units => "codege
0950: 6e 2d 75 6e 69 74 73 22 2c 0a 20 20 20 20 20 20  n-units",.      
0960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0970: 20 20 20 20 20 20 20 20 49 6e 63 72 65 6d 65 6e          Incremen
0980: 74 61 6c 20 3d 3e 20 22 69 6e 63 72 65 6d 65 6e  tal => "incremen
0990: 74 61 6c 22 2c 0a 20 20 20 20 20 20 20 20 20 20  tal",.          
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09b0: 20 20 20 20 52 75 6e 4d 61 6b 65 20 3d 3e 20 22      RunMake => "
09c0: 72 75 6e 2d 6d 61 6b 65 22 2c 0a 20 20 20 20 20  run-make",.     
09d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09e0: 20 20 20 20 20 20 20 20 20 55 69 20 3d 3e 20 22           Ui => "
09f0: 75 69 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ui",.           
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a10: 20 20 20 4d 69 72 4f 70 74 20 3d 3e 20 22 6d 69     MirOpt => "mi
0a20: 72 2d 6f 70 74 22 2c 0a 20 20 20 20 20 20 20 20  r-opt",.        
0a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a40: 20 20 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20    },.           
0a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
0a60: 29 0a 20 20 20 20 7d 0a 7d 0a 0a 23 5b 64 65 72  ).    }.}..#[der
0a70: 69 76 65 28 43 6c 6f 6e 65 29 5d 0a 70 75 62 20  ive(Clone)].pub 
0a80: 73 74 72 75 63 74 20 43 6f 6e 66 69 67 20 7b 0a  struct Config {.
0a90: 20 20 20 20 2f 2f 20 54 68 65 20 6c 69 62 72 61      // The libra
0aa0: 72 79 20 70 61 74 68 73 20 72 65 71 75 69 72 65  ry paths require
0ab0: 64 20 66 6f 72 20 72 75 6e 6e 69 6e 67 20 74 68  d for running th
0ac0: 65 20 63 6f 6d 70 69 6c 65 72 0a 20 20 20 20 70  e compiler.    p
0ad0: 75 62 20 63 6f 6d 70 69 6c 65 5f 6c 69 62 5f 70  ub compile_lib_p
0ae0: 61 74 68 3a 20 50 61 74 68 42 75 66 2c 0a 0a 20  ath: PathBuf,.. 
0af0: 20 20 20 2f 2f 20 54 68 65 20 6c 69 62 72 61 72     // The librar
0b00: 79 20 70 61 74 68 73 20 72 65 71 75 69 72 65 64  y paths required
0b10: 20 66 6f 72 20 72 75 6e 6e 69 6e 67 20 63 6f 6d   for running com
0b20: 70 69 6c 65 64 20 70 72 6f 67 72 61 6d 73 0a 20  piled programs. 
0b30: 20 20 20 70 75 62 20 72 75 6e 5f 6c 69 62 5f 70     pub run_lib_p
0b40: 61 74 68 3a 20 50 61 74 68 42 75 66 2c 0a 0a 20  ath: PathBuf,.. 
0b50: 20 20 20 2f 2f 20 54 68 65 20 72 75 73 74 63 20     // The rustc 
0b60: 65 78 65 63 75 74 61 62 6c 65 0a 20 20 20 20 70  executable.    p
0b70: 75 62 20 72 75 73 74 63 5f 70 61 74 68 3a 20 50  ub rustc_path: P
0b80: 61 74 68 42 75 66 2c 0a 0a 20 20 20 20 2f 2f 20  athBuf,..    // 
0b90: 54 68 65 20 72 75 73 74 64 6f 63 20 65 78 65 63  The rustdoc exec
0ba0: 75 74 61 62 6c 65 0a 20 20 20 20 70 75 62 20 72  utable.    pub r
0bb0: 75 73 74 64 6f 63 5f 70 61 74 68 3a 20 50 61 74  ustdoc_path: Pat
0bc0: 68 42 75 66 2c 0a 0a 20 20 20 20 2f 2f 20 54 68  hBuf,..    // Th
0bd0: 65 20 70 79 74 68 6f 6e 20 65 78 65 63 75 74 61  e python executa
0be0: 62 6c 65 20 74 6f 20 75 73 65 20 66 6f 72 20 4c  ble to use for L
0bf0: 4c 44 42 0a 20 20 20 20 70 75 62 20 6c 6c 64 62  LDB.    pub lldb
0c00: 5f 70 79 74 68 6f 6e 3a 20 53 74 72 69 6e 67 2c  _python: String,
0c10: 0a 0a 20 20 20 20 2f 2f 20 54 68 65 20 70 79 74  ..    // The pyt
0c20: 68 6f 6e 20 65 78 65 63 75 74 61 62 6c 65 20 74  hon executable t
0c30: 6f 20 75 73 65 20 66 6f 72 20 68 74 6d 6c 64 6f  o use for htmldo
0c40: 63 63 6b 0a 20 20 20 20 70 75 62 20 64 6f 63 63  cck.    pub docc
0c50: 6b 5f 70 79 74 68 6f 6e 3a 20 53 74 72 69 6e 67  k_python: String
0c60: 2c 0a 0a 20 20 20 20 2f 2f 20 54 68 65 20 6c 6c  ,..    // The ll
0c70: 76 6d 20 46 69 6c 65 43 68 65 63 6b 20 62 69 6e  vm FileCheck bin
0c80: 61 72 79 20 70 61 74 68 0a 20 20 20 20 70 75 62  ary path.    pub
0c90: 20 6c 6c 76 6d 5f 66 69 6c 65 63 68 65 63 6b 3a   llvm_filecheck:
0ca0: 20 4f 70 74 69 6f 6e 3c 50 61 74 68 42 75 66 3e   Option<PathBuf>
0cb0: 2c 0a 0a 20 20 20 20 2f 2f 20 54 68 65 20 76 61  ,..    // The va
0cc0: 6c 67 72 69 6e 64 20 70 61 74 68 0a 20 20 20 20  lgrind path.    
0cd0: 70 75 62 20 76 61 6c 67 72 69 6e 64 5f 70 61 74  pub valgrind_pat
0ce0: 68 3a 20 4f 70 74 69 6f 6e 3c 53 74 72 69 6e 67  h: Option<String
0cf0: 3e 2c 0a 0a 20 20 20 20 2f 2f 20 57 68 65 74 68  >,..    // Wheth
0d00: 65 72 20 74 6f 20 66 61 69 6c 20 69 66 20 77 65  er to fail if we
0d10: 20 63 61 6e 27 74 20 72 75 6e 20 72 75 6e 2d 70   can't run run-p
0d20: 61 73 73 2d 76 61 6c 67 72 69 6e 64 20 74 65 73  ass-valgrind tes
0d30: 74 73 20 75 6e 64 65 72 20 76 61 6c 67 72 69 6e  ts under valgrin
0d40: 64 0a 20 20 20 20 2f 2f 20 28 6f 72 2c 20 61 6c  d.    // (or, al
0d50: 74 65 72 6e 61 74 69 76 65 6c 79 2c 20 74 6f 20  ternatively, to 
0d60: 73 69 6c 65 6e 74 6c 79 20 72 75 6e 20 74 68 65  silently run the
0d70: 6d 20 6c 69 6b 65 20 72 65 67 75 6c 61 72 20 72  m like regular r
0d80: 75 6e 2d 70 61 73 73 20 74 65 73 74 73 29 2e 0a  un-pass tests)..
0d90: 20 20 20 20 70 75 62 20 66 6f 72 63 65 5f 76 61      pub force_va
0da0: 6c 67 72 69 6e 64 3a 20 62 6f 6f 6c 2c 0a 0a 20  lgrind: bool,.. 
0db0: 20 20 20 2f 2f 20 54 68 65 20 64 69 72 65 63 74     // The direct
0dc0: 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ory containing t
0dd0: 68 65 20 74 65 73 74 73 20 74 6f 20 72 75 6e 0a  he tests to run.
0de0: 20 20 20 20 70 75 62 20 73 72 63 5f 62 61 73 65      pub src_base
0df0: 3a 20 50 61 74 68 42 75 66 2c 0a 0a 20 20 20 20  : PathBuf,..    
0e00: 2f 2f 20 54 68 65 20 64 69 72 65 63 74 6f 72 79  // The directory
0e10: 20 77 68 65 72 65 20 70 72 6f 67 72 61 6d 73 20   where programs 
0e20: 73 68 6f 75 6c 64 20 62 65 20 62 75 69 6c 74 0a  should be built.
0e30: 20 20 20 20 70 75 62 20 62 75 69 6c 64 5f 62 61      pub build_ba
0e40: 73 65 3a 20 50 61 74 68 42 75 66 2c 0a 0a 20 20  se: PathBuf,..  
0e50: 20 20 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66    // The name of
0e60: 20 74 68 65 20 73 74 61 67 65 20 62 65 69 6e 67   the stage being
0e70: 20 62 75 69 6c 74 20 28 73 74 61 67 65 31 2c 20   built (stage1, 
0e80: 65 74 63 29 0a 20 20 20 20 70 75 62 20 73 74 61  etc).    pub sta
0e90: 67 65 5f 69 64 3a 20 53 74 72 69 6e 67 2c 0a 0a  ge_id: String,..
0ea0: 20 20 20 20 2f 2f 20 54 68 65 20 74 65 73 74 20      // The test 
0eb0: 6d 6f 64 65 2c 20 63 6f 6d 70 69 6c 65 2d 66 61  mode, compile-fa
0ec0: 69 6c 2c 20 72 75 6e 2d 66 61 69 6c 2c 20 72 75  il, run-fail, ru
0ed0: 6e 2d 70 61 73 73 0a 20 20 20 20 70 75 62 20 6d  n-pass.    pub m
0ee0: 6f 64 65 3a 20 4d 6f 64 65 2c 0a 0a 20 20 20 20  ode: Mode,..    
0ef0: 2f 2f 20 52 75 6e 20 69 67 6e 6f 72 65 64 20 74  // Run ignored t
0f00: 65 73 74 73 0a 20 20 20 20 70 75 62 20 72 75 6e  ests.    pub run
0f10: 5f 69 67 6e 6f 72 65 64 3a 20 62 6f 6f 6c 2c 0a  _ignored: bool,.
0f20: 0a 20 20 20 20 2f 2f 20 4f 6e 6c 79 20 72 75 6e  .    // Only run
0f30: 20 74 65 73 74 73 20 74 68 61 74 20 6d 61 74 63   tests that matc
0f40: 68 20 74 68 69 73 20 66 69 6c 74 65 72 0a 20 20  h this filter.  
0f50: 20 20 70 75 62 20 66 69 6c 74 65 72 3a 20 4f 70    pub filter: Op
0f60: 74 69 6f 6e 3c 53 74 72 69 6e 67 3e 2c 0a 0a 20  tion<String>,.. 
0f70: 20 20 20 2f 2f 20 45 78 61 63 74 6c 79 20 6d 61     // Exactly ma
0f80: 74 63 68 20 74 68 65 20 66 69 6c 74 65 72 2c 20  tch the filter, 
0f90: 72 61 74 68 65 72 20 74 68 61 6e 20 61 20 73 75  rather than a su
0fa0: 62 73 74 72 69 6e 67 0a 20 20 20 20 70 75 62 20  bstring.    pub 
0fb0: 66 69 6c 74 65 72 5f 65 78 61 63 74 3a 20 62 6f  filter_exact: bo
0fc0: 6f 6c 2c 0a 0a 20 20 20 20 2f 2f 20 57 72 69 74  ol,..    // Writ
0fd0: 65 20 6f 75 74 20 61 20 70 61 72 73 65 61 62 6c  e out a parseabl
0fe0: 65 20 6c 6f 67 20 6f 66 20 74 65 73 74 73 20 74  e log of tests t
0ff0: 68 61 74 20 77 65 72 65 20 72 75 6e 0a 20 20 20  hat were run.   
1000: 20 70 75 62 20 6c 6f 67 66 69 6c 65 3a 20 4f 70   pub logfile: Op
1010: 74 69 6f 6e 3c 50 61 74 68 42 75 66 3e 2c 0a 0a  tion<PathBuf>,..
1020: 20 20 20 20 2f 2f 20 41 20 63 6f 6d 6d 61 6e 64      // A command
1030: 20 6c 69 6e 65 20 74 6f 20 70 72 65 66 69 78 20   line to prefix 
1040: 70 72 6f 67 72 61 6d 20 65 78 65 63 75 74 69 6f  program executio
1050: 6e 20 77 69 74 68 2c 0a 20 20 20 20 2f 2f 20 66  n with,.    // f
1060: 6f 72 20 72 75 6e 6e 69 6e 67 20 75 6e 64 65 72  or running under
1070: 20 76 61 6c 67 72 69 6e 64 0a 20 20 20 20 70 75   valgrind.    pu
1080: 62 20 72 75 6e 74 6f 6f 6c 3a 20 4f 70 74 69 6f  b runtool: Optio
1090: 6e 3c 53 74 72 69 6e 67 3e 2c 0a 0a 20 20 20 20  n<String>,..    
10a0: 2f 2f 20 46 6c 61 67 73 20 74 6f 20 70 61 73 73  // Flags to pass
10b0: 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   to the compiler
10c0: 20 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20 66   when building f
10d0: 6f 72 20 74 68 65 20 68 6f 73 74 0a 20 20 20 20  or the host.    
10e0: 70 75 62 20 68 6f 73 74 5f 72 75 73 74 63 66 6c  pub host_rustcfl
10f0: 61 67 73 3a 20 4f 70 74 69 6f 6e 3c 53 74 72 69  ags: Option<Stri
1100: 6e 67 3e 2c 0a 0a 20 20 20 20 2f 2f 20 46 6c 61  ng>,..    // Fla
1110: 67 73 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68  gs to pass to th
1120: 65 20 63 6f 6d 70 69 6c 65 72 20 77 68 65 6e 20  e compiler when 
1130: 62 75 69 6c 64 69 6e 67 20 66 6f 72 20 74 68 65  building for the
1140: 20 74 61 72 67 65 74 0a 20 20 20 20 70 75 62 20   target.    pub 
1150: 74 61 72 67 65 74 5f 72 75 73 74 63 66 6c 61 67  target_rustcflag
1160: 73 3a 20 4f 70 74 69 6f 6e 3c 53 74 72 69 6e 67  s: Option<String
1170: 3e 2c 0a 0a 20 20 20 20 2f 2f 20 54 61 72 67 65  >,..    // Targe
1180: 74 20 73 79 73 74 65 6d 20 74 6f 20 62 65 20 74  t system to be t
1190: 65 73 74 65 64 0a 20 20 20 20 70 75 62 20 74 61  ested.    pub ta
11a0: 72 67 65 74 3a 20 53 74 72 69 6e 67 2c 0a 0a 20  rget: String,.. 
11b0: 20 20 20 2f 2f 20 48 6f 73 74 20 74 72 69 70 6c     // Host tripl
11c0: 65 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 69 6c  e for the compil
11d0: 65 72 20 62 65 69 6e 67 20 69 6e 76 6f 6b 65 64  er being invoked
11e0: 0a 20 20 20 20 70 75 62 20 68 6f 73 74 3a 20 53  .    pub host: S
11f0: 74 72 69 6e 67 2c 0a 0a 20 20 20 20 2f 2f 20 50  tring,..    // P
1200: 61 74 68 20 74 6f 20 2f 20 6e 61 6d 65 20 6f 66  ath to / name of
1210: 20 74 68 65 20 47 44 42 20 65 78 65 63 75 74 61   the GDB executa
1220: 62 6c 65 0a 20 20 20 20 70 75 62 20 67 64 62 3a  ble.    pub gdb:
1230: 20 4f 70 74 69 6f 6e 3c 53 74 72 69 6e 67 3e 2c   Option<String>,
1240: 0a 0a 20 20 20 20 2f 2f 20 56 65 72 73 69 6f 6e  ..    // Version
1250: 20 6f 66 20 47 44 42 2c 20 65 6e 63 6f 64 65 64   of GDB, encoded
1260: 20 61 73 20 28 28 6d 61 6a 6f 72 20 2a 20 31 30   as ((major * 10
1270: 30 30 29 20 2b 20 6d 69 6e 6f 72 29 20 2a 20 31  00) + minor) * 1
1280: 30 30 30 20 2b 20 70 61 74 63 68 0a 20 20 20 20  000 + patch.    
1290: 70 75 62 20 67 64 62 5f 76 65 72 73 69 6f 6e 3a  pub gdb_version:
12a0: 20 4f 70 74 69 6f 6e 3c 75 33 32 3e 2c 0a 0a 20   Option<u32>,.. 
12b0: 20 20 20 2f 2f 20 57 68 65 74 68 65 72 20 47 44     // Whether GD
12c0: 42 20 68 61 73 20 6e 61 74 69 76 65 20 72 75 73  B has native rus
12d0: 74 20 73 75 70 70 6f 72 74 0a 20 20 20 20 70 75  t support.    pu
12e0: 62 20 67 64 62 5f 6e 61 74 69 76 65 5f 72 75 73  b gdb_native_rus
12f0: 74 3a 20 62 6f 6f 6c 2c 0a 0a 20 20 20 20 2f 2f  t: bool,..    //
1300: 20 56 65 72 73 69 6f 6e 20 6f 66 20 4c 4c 44 42   Version of LLDB
1310: 0a 20 20 20 20 70 75 62 20 6c 6c 64 62 5f 76 65  .    pub lldb_ve
1320: 72 73 69 6f 6e 3a 20 4f 70 74 69 6f 6e 3c 53 74  rsion: Option<St
1330: 72 69 6e 67 3e 2c 0a 0a 20 20 20 20 2f 2f 20 56  ring>,..    // V
1340: 65 72 73 69 6f 6e 20 6f 66 20 4c 4c 56 4d 0a 20  ersion of LLVM. 
1350: 20 20 20 70 75 62 20 6c 6c 76 6d 5f 76 65 72 73     pub llvm_vers
1360: 69 6f 6e 3a 20 4f 70 74 69 6f 6e 3c 53 74 72 69  ion: Option<Stri
1370: 6e 67 3e 2c 0a 0a 20 20 20 20 2f 2f 20 50 61 74  ng>,..    // Pat
1380: 68 20 74 6f 20 74 68 65 20 61 6e 64 72 6f 69 64  h to the android
1390: 20 74 6f 6f 6c 73 0a 20 20 20 20 70 75 62 20 61   tools.    pub a
13a0: 6e 64 72 6f 69 64 5f 63 72 6f 73 73 5f 70 61 74  ndroid_cross_pat
13b0: 68 3a 20 50 61 74 68 42 75 66 2c 0a 0a 20 20 20  h: PathBuf,..   
13c0: 20 2f 2f 20 45 78 74 72 61 20 70 61 72 61 6d 65   // Extra parame
13d0: 74 65 72 20 74 6f 20 72 75 6e 20 61 64 62 20 6f  ter to run adb o
13e0: 6e 20 61 72 6d 2d 6c 69 6e 75 78 2d 61 6e 64 72  n arm-linux-andr
13f0: 6f 69 64 65 61 62 69 0a 20 20 20 20 70 75 62 20  oideabi.    pub 
1400: 61 64 62 5f 70 61 74 68 3a 20 53 74 72 69 6e 67  adb_path: String
1410: 2c 0a 0a 20 20 20 20 2f 2f 20 45 78 74 72 61 20  ,..    // Extra 
1420: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 72 75 6e  parameter to run
1430: 20 74 65 73 74 20 73 75 69 74 65 20 6f 6e 20 61   test suite on a
1440: 72 6d 2d 6c 69 6e 75 78 2d 61 6e 64 72 6f 69 64  rm-linux-android
1450: 65 61 62 69 0a 20 20 20 20 70 75 62 20 61 64 62  eabi.    pub adb
1460: 5f 74 65 73 74 5f 64 69 72 3a 20 53 74 72 69 6e  _test_dir: Strin
1470: 67 2c 0a 0a 20 20 20 20 2f 2f 20 73 74 61 74 75  g,..    // statu
1480: 73 20 77 68 65 74 68 65 72 20 61 6e 64 72 6f 69  s whether androi
1490: 64 20 64 65 76 69 63 65 20 61 76 61 69 6c 61 62  d device availab
14a0: 6c 65 20 6f 72 20 6e 6f 74 0a 20 20 20 20 70 75  le or not.    pu
14b0: 62 20 61 64 62 5f 64 65 76 69 63 65 5f 73 74 61  b adb_device_sta
14c0: 74 75 73 3a 20 62 6f 6f 6c 2c 0a 0a 20 20 20 20  tus: bool,..    
14d0: 2f 2f 20 74 68 65 20 70 61 74 68 20 63 6f 6e 74  // the path cont
14e0: 61 69 6e 69 6e 67 20 4c 4c 44 42 27 73 20 50 79  aining LLDB's Py
14f0: 74 68 6f 6e 20 6d 6f 64 75 6c 65 0a 20 20 20 20  thon module.    
1500: 70 75 62 20 6c 6c 64 62 5f 70 79 74 68 6f 6e 5f  pub lldb_python_
1510: 64 69 72 3a 20 4f 70 74 69 6f 6e 3c 53 74 72 69  dir: Option<Stri
1520: 6e 67 3e 2c 0a 0a 20 20 20 20 2f 2f 20 45 78 70  ng>,..    // Exp
1530: 6c 61 69 6e 20 77 68 61 74 27 73 20 67 6f 69 6e  lain what's goin
1540: 67 20 6f 6e 0a 20 20 20 20 70 75 62 20 76 65 72  g on.    pub ver
1550: 62 6f 73 65 3a 20 62 6f 6f 6c 2c 0a 0a 20 20 20  bose: bool,..   
1560: 20 2f 2f 20 50 72 69 6e 74 20 6f 6e 65 20 63 68   // Print one ch
1570: 61 72 61 63 74 65 72 20 70 65 72 20 74 65 73 74  aracter per test
1580: 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 65 20   instead of one 
1590: 6c 69 6e 65 0a 20 20 20 20 70 75 62 20 71 75 69  line.    pub qui
15a0: 65 74 3a 20 62 6f 6f 6c 2c 0a 0a 20 20 20 20 2f  et: bool,..    /
15b0: 2f 20 77 68 65 72 65 20 74 6f 20 66 69 6e 64 20  / where to find 
15c0: 74 68 65 20 71 65 6d 75 20 74 65 73 74 20 63 6c  the qemu test cl
15d0: 69 65 6e 74 20 70 72 6f 63 65 73 73 2c 20 69 66  ient process, if
15e0: 20 77 65 27 72 65 20 75 73 69 6e 67 20 69 74 0a   we're using it.
15f0: 20 20 20 20 70 75 62 20 71 65 6d 75 5f 74 65 73      pub qemu_tes
1600: 74 5f 63 6c 69 65 6e 74 3a 20 4f 70 74 69 6f 6e  t_client: Option
1610: 3c 50 61 74 68 42 75 66 3e 2c 0a 0a 20 20 20 20  <PathBuf>,..    
1620: 2f 2f 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  // Configuration
1630: 20 66 6f 72 20 76 61 72 69 6f 75 73 20 72 75 6e   for various run
1640: 2d 6d 61 6b 65 20 74 65 73 74 73 20 66 72 6f 62  -make tests frob
1650: 62 69 6e 67 20 74 68 69 6e 67 73 20 6c 69 6b 65  bing things like
1660: 20 43 20 63 6f 6d 70 69 6c 65 72 73 0a 20 20 20   C compilers.   
1670: 20 2f 2f 20 6f 72 20 71 75 65 72 79 69 6e 67 20   // or querying 
1680: 61 62 6f 75 74 20 76 61 72 69 6f 75 73 20 4c 4c  about various LL
1690: 56 4d 20 63 6f 6d 70 6f 6e 65 6e 74 20 69 6e 66  VM component inf
16a0: 6f 72 6d 61 74 69 6f 6e 2e 0a 20 20 20 20 70 75  ormation..    pu
16b0: 62 20 63 63 3a 20 53 74 72 69 6e 67 2c 0a 20 20  b cc: String,.  
16c0: 20 20 70 75 62 20 63 78 78 3a 20 53 74 72 69 6e    pub cxx: Strin
16d0: 67 2c 0a 20 20 20 20 70 75 62 20 63 66 6c 61 67  g,.    pub cflag
16e0: 73 3a 20 53 74 72 69 6e 67 2c 0a 20 20 20 20 70  s: String,.    p
16f0: 75 62 20 6c 6c 76 6d 5f 63 6f 6d 70 6f 6e 65 6e  ub llvm_componen
1700: 74 73 3a 20 53 74 72 69 6e 67 2c 0a 20 20 20 20  ts: String,.    
1710: 70 75 62 20 6c 6c 76 6d 5f 63 78 78 66 6c 61 67  pub llvm_cxxflag
1720: 73 3a 20 53 74 72 69 6e 67 2c 0a 20 20 20 20 70  s: String,.    p
1730: 75 62 20 6e 6f 64 65 6a 73 3a 20 4f 70 74 69 6f  ub nodejs: Optio
1740: 6e 3c 53 74 72 69 6e 67 3e 2c 0a 7d 0a           n<String>,.}.