/ Hex Artifact Content
Login

Artifact 204efd3a87ec1d62da2efde42c673b18b955350a9d3c6ac0b4dbba5bc8595808:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 74 63 6c 73 68  #!/usr/bin/tclsh
0010: 0a 23 0a 23 20 44 6f 63 75 6d 65 6e 74 61 74 69  .#.# Documentati
0020: 6f 6e 20 66 6f 72 20 74 68 69 73 20 73 63 72 69  on for this scri
0030: 70 74 2e 20 54 68 69 73 20 6d 61 79 20 62 65 20  pt. This may be 
0040: 6f 75 74 70 75 74 20 74 6f 20 73 74 64 65 72 72  output to stderr
0050: 0a 23 20 69 66 20 74 68 65 20 73 63 72 69 70 74  .# if the script
0060: 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 6e 63 6f   is invoked inco
0070: 72 72 65 63 74 6c 79 2e 20 53 65 65 20 74 68 65  rrectly. See the
0080: 20 5b 70 72 6f 63 65 73 73 5f 6f 70 74 69 6f 6e   [process_option
0090: 73 5d 0a 23 20 70 72 6f 63 20 62 65 6c 6f 77 2e  s].# proc below.
00a0: 0a 23 0a 73 65 74 20 3a 3a 55 53 41 47 45 5f 4d  .#.set ::USAGE_M
00b0: 45 53 53 41 47 45 20 7b 0a 54 68 69 73 20 54 63  ESSAGE {.This Tc
00c0: 6c 20 73 63 72 69 70 74 20 69 73 20 75 73 65 64  l script is used
00d0: 20 74 6f 20 74 65 73 74 20 74 68 65 20 76 61 72   to test the var
00e0: 69 6f 75 73 20 63 6f 6e 66 69 67 75 72 61 74 69  ious configurati
00f0: 6f 6e 73 20 72 65 71 75 69 72 65 64 0a 62 65 66  ons required.bef
0100: 6f 72 65 20 72 65 6c 65 61 73 69 6e 67 20 61 20  ore releasing a 
0110: 6e 65 77 20 76 65 72 73 69 6f 6e 2e 20 53 75 70  new version. Sup
0120: 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
0130: 69 6e 65 20 6f 70 74 69 6f 6e 73 20 28 61 6c 6c  ine options (all
0140: 0a 6f 70 74 69 6f 6e 61 6c 29 20 61 72 65 3a 0a  .optional) are:.
0150: 0a 20 20 20 20 2d 2d 62 75 69 6c 64 6f 6e 6c 79  .    --buildonly
0160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0170: 20 20 20 20 20 20 20 20 28 4a 75 73 74 20 62 75          (Just bu
0180: 69 6c 64 20 74 65 73 74 66 69 78 74 75 72 65 20  ild testfixture 
0190: 2d 20 64 6f 20 6e 6f 74 20 72 75 6e 29 0a 20 20  - do not run).  
01a0: 20 20 2d 2d 63 6f 6e 66 69 67 20 20 20 43 4f 4e    --config   CON
01b0: 46 49 47 4e 41 4d 45 20 20 20 20 20 20 20 20 20  FIGNAME         
01c0: 20 20 20 20 20 28 52 75 6e 20 6f 6e 6c 79 20 43       (Run only C
01d0: 4f 4e 46 49 47 4e 41 4d 45 29 0a 20 20 20 20 2d  ONFIGNAME).    -
01e0: 2d 64 72 79 72 75 6e 20 20 20 20 20 20 20 20 20  -dryrun         
01f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0200: 20 20 28 50 72 69 6e 74 20 77 68 61 74 20 77 6f    (Print what wo
0210: 75 6c 64 20 68 61 76 65 20 68 61 70 70 65 6e 65  uld have happene
0220: 64 29 0a 20 20 20 20 2d 66 7c 2d 2d 66 6f 72 63  d).    -f|--forc
0230: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
0240: 20 20 20 20 20 20 20 20 20 20 28 52 75 6e 20 65            (Run e
0250: 76 65 6e 20 69 66 20 75 6e 63 6f 6d 6d 69 74 74  ven if uncommitt
0260: 65 64 20 63 68 61 6e 67 65 73 29 0a 20 20 20 20  ed changes).    
0270: 2d 2d 69 6e 66 6f 20 20 20 20 20 20 20 20 20 20  --info          
0280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0290: 20 20 20 28 53 68 6f 77 20 64 69 61 67 6e 6f 73     (Show diagnos
02a0: 74 69 63 20 69 6e 66 6f 29 0a 20 20 20 20 2d 2d  tic info).    --
02b0: 6a 6f 62 73 20 20 20 20 20 4e 20 20 20 20 20 20  jobs     N      
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02d0: 20 28 55 73 65 20 4e 20 70 72 6f 63 65 73 73 65   (Use N processe
02e0: 73 20 2d 20 64 65 66 61 75 6c 74 20 31 29 0a 20  s - default 1). 
02f0: 20 20 20 2d 2d 6b 65 65 70 20 20 20 20 20 20 20     --keep       
0300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0310: 20 20 20 20 20 20 28 44 65 6c 65 74 65 20 6e 6f        (Delete no
0320: 20 66 69 6c 65 73 20 61 66 74 65 72 20 65 61 63   files after eac
0330: 68 20 74 65 73 74 20 72 75 6e 29 0a 20 20 20 20  h test run).    
0340: 2d 2d 6d 73 76 63 20 20 20 20 20 20 20 20 20 20  --msvc          
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0360: 20 20 20 28 55 73 65 20 4d 53 56 43 20 61 73 20     (Use MSVC as 
0370: 74 68 65 20 63 6f 6d 70 69 6c 65 72 29 0a 20 20  the compiler).  
0380: 20 20 2d 2d 70 6c 61 74 66 6f 72 6d 20 50 4c 41    --platform PLA
0390: 54 46 4f 52 4d 20 20 20 20 20 20 20 20 20 20 20  TFORM           
03a0: 20 20 20 20 20 28 73 65 65 20 62 65 6c 6f 77 29       (see below)
03b0: 0a 20 20 20 20 2d 2d 70 72 6f 67 72 65 73 73 20  .    --progress 
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 20 20 28 53 68 6f 77 20 70 72          (Show pr
03e0: 6f 67 72 65 73 73 20 6d 65 73 73 61 67 65 73 29  ogress messages)
03f0: 0a 20 20 20 20 2d 2d 71 75 69 63 6b 20 20 20 20  .    --quick    
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0410: 20 20 20 20 20 20 20 20 28 52 75 6e 20 22 76 65          (Run "ve
0420: 72 79 71 75 69 63 6b 2e 74 65 73 74 22 20 6f 6e  ryquick.test" on
0430: 6c 79 29 0a 20 20 20 20 2d 2d 76 65 72 79 71 75  ly).    --veryqu
0440: 69 63 6b 20 20 20 20 20 20 20 20 20 20 20 20 20  ick             
0450: 20 20 20 20 20 20 20 20 20 20 20 28 52 75 6e 20             (Run 
0460: 22 6d 61 6b 65 20 73 6d 6f 6b 65 74 65 73 74 22  "make smoketest"
0470: 20 6f 6e 6c 79 29 0a 20 20 20 20 2d 2d 77 69 74   only).    --wit
0480: 68 2d 74 63 6c 3d 44 49 52 20 20 20 20 20 20 20  h-tcl=DIR       
0490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 55                (U
04a0: 73 65 20 54 43 4c 20 62 75 69 6c 64 20 61 74 20  se TCL build at 
04b0: 44 49 52 29 0a 0a 54 68 65 20 73 63 72 69 70 74  DIR)..The script
04c0: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
04d0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
04e0: 72 20 2d 2d 70 6c 61 74 66 6f 72 6d 20 75 73 69  r --platform usi
04f0: 6e 67 20 74 68 65 0a 24 74 63 6c 5f 70 6c 61 74  ng the.$tcl_plat
0500: 66 6f 72 6d 28 6f 73 29 20 61 6e 64 20 24 74 63  form(os) and $tc
0510: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69  l_platform(machi
0520: 6e 65 29 20 76 61 72 69 61 62 6c 65 73 2e 20 20  ne) variables.  
0530: 53 75 70 70 6f 72 74 65 64 0a 70 6c 61 74 66 6f  Supported.platfo
0540: 72 6d 73 20 61 72 65 20 22 4c 69 6e 75 78 2d 78  rms are "Linux-x
0550: 38 36 22 2c 20 22 4c 69 6e 75 78 2d 78 38 36 5f  86", "Linux-x86_
0560: 36 34 22 2c 20 22 44 61 72 77 69 6e 2d 69 33 38  64", "Darwin-i38
0570: 36 22 2c 0a 22 44 61 72 77 69 6e 2d 78 38 36 5f  6",."Darwin-x86_
0580: 36 34 22 2c 20 22 57 69 6e 64 6f 77 73 20 4e 54  64", "Windows NT
0590: 2d 69 6e 74 65 6c 22 2c 20 61 6e 64 20 22 57 69  -intel", and "Wi
05a0: 6e 64 6f 77 73 20 4e 54 2d 61 6d 64 36 34 22 2e  ndows NT-amd64".
05b0: 0a 0a 45 76 65 72 79 20 74 65 73 74 20 62 65 67  ..Every test beg
05c0: 69 6e 73 20 77 69 74 68 20 61 20 66 72 65 73 68  ins with a fresh
05d0: 20 72 75 6e 20 6f 66 20 74 68 65 20 63 6f 6e 66   run of the conf
05e0: 69 67 75 72 65 20 73 63 72 69 70 74 20 61 74 20  igure script at 
05f0: 74 68 65 20 74 6f 70 0a 6f 66 20 74 68 65 20 53  the top.of the S
0600: 51 4c 69 74 65 20 73 6f 75 72 63 65 20 74 72 65  QLite source tre
0610: 65 2e 0a 7d 0a 0a 23 20 52 65 74 75 72 6e 20 61  e..}..# Return a
0620: 20 74 69 6d 65 73 74 61 6d 70 20 6f 66 20 74 68   timestamp of th
0630: 65 20 66 6f 72 6d 20 48 48 3a 4d 4d 3a 53 53 0a  e form HH:MM:SS.
0640: 23 0a 70 72 6f 63 20 6e 6f 77 20 7b 7d 20 7b 0a  #.proc now {} {.
0650: 20 20 72 65 74 75 72 6e 20 5b 63 6c 6f 63 6b 20    return [clock 
0660: 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65  format [clock se
0670: 63 6f 6e 64 73 5d 20 2d 66 6f 72 6d 61 74 20 25  conds] -format %
0680: 48 3a 25 4d 3a 25 53 5d 0a 7d 0a 0a 23 20 4f 6d  H:%M:%S].}..# Om
0690: 69 74 20 63 6f 6d 6d 65 6e 74 73 20 28 74 65 78  it comments (tex
06a0: 74 20 62 65 74 77 65 65 6e 20 23 20 61 6e 64 20  t between # and 
06b0: 5c 6e 29 20 69 6e 20 61 20 6c 6f 6e 67 20 6d 75  \n) in a long mu
06c0: 6c 74 69 2d 6c 69 6e 65 20 73 74 72 69 6e 67 2e  lti-line string.
06d0: 0a 23 0a 70 72 6f 63 20 73 74 72 69 70 5f 63 6f  .#.proc strip_co
06e0: 6d 6d 65 6e 74 73 20 7b 69 6e 7d 20 7b 0a 20 20  mments {in} {.  
06f0: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 23 5b 5e  regsub -all {#[^
0700: 5c 6e 5d 2a 5c 6e 7d 20 24 69 6e 20 7b 7d 20 6f  \n]*\n} $in {} o
0710: 75 74 0a 20 20 72 65 74 75 72 6e 20 24 6f 75 74  ut.  return $out
0720: 0a 7d 0a 0a 61 72 72 61 79 20 73 65 74 20 3a 3a  .}..array set ::
0730: 43 6f 6e 66 69 67 73 20 5b 73 74 72 69 70 5f 63  Configs [strip_c
0740: 6f 6d 6d 65 6e 74 73 20 7b 0a 20 20 22 44 65 66  omments {.  "Def
0750: 61 75 6c 74 22 20 7b 0a 20 20 20 20 2d 4f 32 0a  ault" {.    -O2.
0760: 20 20 20 20 2d 2d 64 69 73 61 62 6c 65 2d 61 6d      --disable-am
0770: 61 6c 67 61 6d 61 74 69 6f 6e 20 2d 2d 64 69 73  algamation --dis
0780: 61 62 6c 65 2d 73 68 61 72 65 64 0a 20 20 20 20  able-shared.    
0790: 2d 2d 65 6e 61 62 6c 65 2d 73 65 73 73 69 6f 6e  --enable-session
07a0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e  .    -DSQLITE_EN
07b0: 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45  ABLE_DESERIALIZE
07c0: 0a 20 20 7d 0a 20 20 22 53 61 6e 69 74 69 7a 65  .  }.  "Sanitize
07d0: 22 20 7b 0a 20 20 20 20 43 43 3d 63 6c 61 6e 67  " {.    CC=clang
07e0: 20 2d 66 73 61 6e 69 74 69 7a 65 3d 75 6e 64 65   -fsanitize=unde
07f0: 66 69 6e 65 64 0a 20 20 20 20 2d 44 53 51 4c 49  fined.    -DSQLI
0800: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
0810: 20 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 73 65 73      --enable-ses
0820: 73 69 6f 6e 0a 20 20 7d 0a 20 20 22 53 74 64 63  sion.  }.  "Stdc
0830: 61 6c 6c 22 20 7b 0a 20 20 20 20 2d 44 55 53 45  all" {.    -DUSE
0840: 5f 53 54 44 43 41 4c 4c 3d 31 0a 20 20 20 20 2d  _STDCALL=1.    -
0850: 4f 32 0a 20 20 7d 0a 20 20 22 48 61 76 65 2d 4e  O2.  }.  "Have-N
0860: 6f 74 22 20 7b 0a 20 20 20 20 23 20 54 68 65 20  ot" {.    # The 
0870: 22 48 61 76 65 2d 4e 6f 74 22 20 63 6f 6e 66 69  "Have-Not" confi
0880: 67 75 72 61 74 69 6f 6e 20 73 65 74 73 20 61 6c  guration sets al
0890: 6c 20 70 6f 73 73 69 62 6c 65 20 2d 55 48 41 56  l possible -UHAV
08a0: 45 5f 66 65 61 74 75 72 65 20 6f 70 74 69 6f 6e  E_feature option
08b0: 73 0a 20 20 20 20 23 20 69 6e 20 6f 72 64 65 72  s.    # in order
08c0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
08d0: 74 68 65 20 63 6f 64 65 20 77 6f 72 6b 73 20 65  the code works e
08e0: 76 65 6e 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  ven on platforms
08f0: 20 74 68 61 74 20 6c 61 63 6b 0a 20 20 20 20 23   that lack.    #
0900: 20 74 68 65 73 65 20 73 75 70 70 6f 72 74 20 73   these support s
0910: 65 72 76 69 63 65 73 2e 0a 20 20 20 20 2d 44 48  ervices..    -DH
0920: 41 56 45 5f 46 44 41 54 41 53 59 4e 43 3d 30 0a  AVE_FDATASYNC=0.
0930: 20 20 20 20 2d 44 48 41 56 45 5f 47 4d 54 49 4d      -DHAVE_GMTIM
0940: 45 5f 52 3d 30 0a 20 20 20 20 2d 44 48 41 56 45  E_R=0.    -DHAVE
0950: 5f 49 53 4e 41 4e 3d 30 0a 20 20 20 20 2d 44 48  _ISNAN=0.    -DH
0960: 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f 52 3d  AVE_LOCALTIME_R=
0970: 30 0a 20 20 20 20 2d 44 48 41 56 45 5f 4c 4f 43  0.    -DHAVE_LOC
0980: 41 4c 54 49 4d 45 5f 53 3d 30 0a 20 20 20 20 2d  ALTIME_S=0.    -
0990: 44 48 41 56 45 5f 4d 41 4c 4c 4f 43 5f 55 53 41  DHAVE_MALLOC_USA
09a0: 42 4c 45 5f 53 49 5a 45 3d 30 0a 20 20 20 20 2d  BLE_SIZE=0.    -
09b0: 44 48 41 56 45 5f 53 54 52 43 48 52 4e 55 4c 3d  DHAVE_STRCHRNUL=
09c0: 30 0a 20 20 20 20 2d 44 48 41 56 45 5f 55 53 4c  0.    -DHAVE_USL
09d0: 45 45 50 3d 30 0a 20 20 20 20 2d 44 48 41 56 45  EEP=0.    -DHAVE
09e0: 5f 55 54 49 4d 45 3d 30 0a 20 20 7d 0a 20 20 22  _UTIME=0.  }.  "
09f0: 55 6e 6c 6f 63 6b 2d 4e 6f 74 69 66 79 22 20 7b  Unlock-Notify" {
0a00: 0a 20 20 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53  .    -O2.    -DS
0a10: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
0a20: 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 20 20 2d  OCK_NOTIFY.    -
0a30: 44 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41  DSQLITE_THREADSA
0a40: 46 45 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  FE.    -DSQLITE_
0a50: 54 43 4c 5f 44 45 46 41 55 4c 54 5f 46 55 4c 4c  TCL_DEFAULT_FULL
0a60: 4d 55 54 45 58 3d 31 0a 20 20 7d 0a 20 20 22 55  MUTEX=1.  }.  "U
0a70: 73 65 72 2d 41 75 74 68 22 20 7b 0a 20 20 20 20  ser-Auth" {.    
0a80: 2d 4f 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  -O2.    -DSQLITE
0a90: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
0aa0: 54 49 4f 4e 3d 31 0a 20 20 7d 0a 20 20 22 53 65  TION=1.  }.  "Se
0ab0: 63 75 72 65 2d 44 65 6c 65 74 65 22 20 7b 0a 20  cure-Delete" {. 
0ac0: 20 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53 51 4c     -O2.    -DSQL
0ad0: 49 54 45 5f 53 45 43 55 52 45 5f 44 45 4c 45 54  ITE_SECURE_DELET
0ae0: 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  E=1.    -DSQLITE
0af0: 5f 53 4f 55 4e 44 45 58 3d 31 0a 20 20 7d 0a 20  _SOUNDEX=1.  }. 
0b00: 20 22 55 70 64 61 74 65 2d 44 65 6c 65 74 65 2d   "Update-Delete-
0b10: 4c 69 6d 69 74 22 20 7b 0a 20 20 20 20 2d 4f 32  Limit" {.    -O2
0b20: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45  .    -DSQLITE_DE
0b30: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
0b40: 54 3d 34 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  T=4.    -DSQLITE
0b50: 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
0b60: 45 4c 45 54 45 5f 4c 49 4d 49 54 3d 31 0a 20 20  ELETE_LIMIT=1.  
0b70: 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c    -DSQLITE_ENABL
0b80: 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
0b90: 53 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4c  S.    -DSQLITE_L
0ba0: 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54 43 48  IKE_DOESNT_MATCH
0bb0: 5f 42 4c 4f 42 53 0a 20 20 20 20 2d 44 53 51 4c  _BLOBS.    -DSQL
0bc0: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f  ITE_ENABLE_CURSO
0bd0: 52 5f 48 49 4e 54 53 0a 20 20 20 20 2d 2d 65 6e  R_HINTS.    --en
0be0: 61 62 6c 65 2d 6a 73 6f 6e 31 0a 20 20 7d 0a 20  able-json1.  }. 
0bf0: 20 22 43 68 65 63 6b 2d 53 79 6d 62 6f 6c 73 22   "Check-Symbols"
0c00: 20 7b 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f   {.    -DSQLITE_
0c10: 4d 45 4d 44 45 42 55 47 3d 31 0a 20 20 20 20 2d  MEMDEBUG=1.    -
0c20: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  DSQLITE_ENABLE_F
0c30: 54 53 33 5f 50 41 52 45 4e 54 48 45 53 49 53 3d  TS3_PARENTHESIS=
0c40: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  1.    -DSQLITE_E
0c50: 4e 41 42 4c 45 5f 46 54 53 33 3d 31 0a 20 20 20  NABLE_FTS3=1.   
0c60: 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
0c70: 5f 52 54 52 45 45 3d 31 0a 20 20 20 20 2d 44 53  _RTREE=1.    -DS
0c80: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
0c90: 53 59 53 35 3d 31 0a 20 20 20 20 2d 44 53 51 4c  SYS5=1.    -DSQL
0ca0: 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
0cb0: 53 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  S3=1.    -DSQLIT
0cc0: 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
0cd0: 4d 45 54 41 44 41 54 41 3d 31 0a 20 20 20 20 2d  METADATA=1.    -
0ce0: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  DSQLITE_ENABLE_U
0cf0: 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
0d00: 49 54 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  IT=1.    -DSQLIT
0d10: 45 5f 53 45 43 55 52 45 5f 44 45 4c 45 54 45 3d  E_SECURE_DELETE=
0d20: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 53  1.    -DSQLITE_S
0d30: 4f 55 4e 44 45 58 3d 31 0a 20 20 20 20 2d 44 53  OUNDEX=1.    -DS
0d40: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
0d50: 4d 49 43 5f 57 52 49 54 45 3d 31 0a 20 20 20 20  MIC_WRITE=1.    
0d60: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
0d70: 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e  MEMORY_MANAGEMEN
0d80: 54 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  T=1.    -DSQLITE
0d90: 5f 45 4e 41 42 4c 45 5f 4f 56 45 52 53 49 5a 45  _ENABLE_OVERSIZE
0da0: 5f 43 45 4c 4c 5f 43 48 45 43 4b 3d 31 0a 20 20  _CELL_CHECK=1.  
0db0: 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c    -DSQLITE_ENABL
0dc0: 45 5f 53 54 41 54 34 0a 20 20 20 20 2d 44 53 51  E_STAT4.    -DSQ
0dd0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
0de0: 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20  _SCANSTATUS.    
0df0: 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 20 2d  --enable-json1 -
0e00: 2d 65 6e 61 62 6c 65 2d 66 74 73 35 20 2d 2d 65  -enable-fts5 --e
0e10: 6e 61 62 6c 65 2d 73 65 73 73 69 6f 6e 0a 20 20  nable-session.  
0e20: 7d 0a 20 20 22 44 65 62 75 67 2d 4f 6e 65 22 20  }.  "Debug-One" 
0e30: 7b 0a 20 20 20 20 2d 2d 64 69 73 61 62 6c 65 2d  {.    --disable-
0e40: 73 68 61 72 65 64 0a 20 20 20 20 2d 4f 32 20 2d  shared.    -O2 -
0e50: 66 75 6e 73 69 67 6e 65 64 2d 63 68 61 72 0a 20  funsigned-char. 
0e60: 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 42 55     -DSQLITE_DEBU
0e70: 47 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  G=1.    -DSQLITE
0e80: 5f 4d 45 4d 44 45 42 55 47 3d 31 0a 20 20 20 20  _MEMDEBUG=1.    
0e90: 2d 44 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e  -DSQLITE_MUTEX_N
0ea0: 4f 4f 50 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  OOP=1.    -DSQLI
0eb0: 54 45 5f 54 43 4c 5f 44 45 46 41 55 4c 54 5f 46  TE_TCL_DEFAULT_F
0ec0: 55 4c 4c 4d 55 54 45 58 3d 31 0a 20 20 20 20 2d  ULLMUTEX=1.    -
0ed0: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  DSQLITE_ENABLE_F
0ee0: 54 53 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  TS3=1.    -DSQLI
0ef0: 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45 3d  TE_ENABLE_RTREE=
0f00: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  1.    -DSQLITE_E
0f10: 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 3d 31 0a  NABLE_MEMSYS5=1.
0f20: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
0f30: 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44  BLE_COLUMN_METAD
0f40: 41 54 41 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  ATA=1.    -DSQLI
0f50: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
0f60: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
0f70: 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
0f80: 4e 53 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  NS.    -DSQLITE_
0f90: 4d 41 58 5f 41 54 54 41 43 48 45 44 3d 31 32 35  MAX_ATTACHED=125
0fa0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4d 55  .    -DSQLITE_MU
0fb0: 54 41 54 49 4f 4e 5f 54 45 53 54 0a 20 20 20 20  TATION_TEST.    
0fc0: 2d 2d 65 6e 61 62 6c 65 2d 66 74 73 35 20 2d 2d  --enable-fts5 --
0fd0: 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 0a 20 20 7d  enable-json1.  }
0fe0: 0a 20 20 22 46 61 73 74 2d 4f 6e 65 22 20 7b 0a  .  "Fast-One" {.
0ff0: 20 20 20 20 2d 4f 36 0a 20 20 20 20 2d 44 53 51      -O6.    -DSQ
1000: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
1010: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
1020: 45 4e 41 42 4c 45 5f 52 54 52 45 45 3d 31 0a 20  ENABLE_RTREE=1. 
1030: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
1040: 4c 45 5f 53 54 41 54 34 0a 20 20 20 20 2d 44 53  LE_STAT4.    -DS
1050: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 42 55  QLITE_ENABLE_RBU
1060: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4d 41  .    -DSQLITE_MA
1070: 58 5f 41 54 54 41 43 48 45 44 3d 31 32 35 0a 20  X_ATTACHED=125. 
1080: 20 20 20 2d 44 4c 4f 4e 47 44 4f 55 42 4c 45 5f     -DLONGDOUBLE_
1090: 54 59 50 45 3d 64 6f 75 62 6c 65 0a 20 20 20 20  TYPE=double.    
10a0: 2d 2d 65 6e 61 62 6c 65 2d 73 65 73 73 69 6f 6e  --enable-session
10b0: 0a 20 20 7d 0a 20 20 22 44 65 76 69 63 65 2d 4f  .  }.  "Device-O
10c0: 6e 65 22 20 7b 0a 20 20 20 20 2d 4f 32 0a 20 20  ne" {.    -O2.  
10d0: 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 42 55 47    -DSQLITE_DEBUG
10e0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
10f0: 44 45 46 41 55 4c 54 5f 41 55 54 4f 56 41 43 55  DEFAULT_AUTOVACU
1100: 55 4d 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  UM=1.    -DSQLIT
1110: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
1120: 53 49 5a 45 3d 36 34 0a 20 20 20 20 2d 44 53 51  SIZE=64.    -DSQ
1130: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 41 47  LITE_DEFAULT_PAG
1140: 45 5f 53 49 5a 45 3d 31 30 32 34 0a 20 20 20 20  E_SIZE=1024.    
1150: 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  -DSQLITE_DEFAULT
1160: 5f 54 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a 45  _TEMP_CACHE_SIZE
1170: 3d 33 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  =32.    -DSQLITE
1180: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 3d 31 0a 20  _DISABLE_LFS=1. 
1190: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
11a0: 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 3d  LE_ATOMIC_WRITE=
11b0: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  1.    -DSQLITE_E
11c0: 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 3d 31 0a  NABLE_IOTRACE=1.
11d0: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
11e0: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
11f0: 45 4d 45 4e 54 3d 31 0a 20 20 20 20 2d 44 53 51  EMENT=1.    -DSQ
1200: 4c 49 54 45 5f 4d 41 58 5f 50 41 47 45 5f 53 49  LITE_MAX_PAGE_SI
1210: 5a 45 3d 34 30 39 36 0a 20 20 20 20 2d 44 53 51  ZE=4096.    -DSQ
1220: 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
1230: 58 54 45 4e 53 49 4f 4e 3d 31 0a 20 20 20 20 2d  XTENSION=1.    -
1240: 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f  DSQLITE_OMIT_PRO
1250: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 3d 31  GRESS_CALLBACK=1
1260: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4f 4d  .    -DSQLITE_OM
1270: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 3d  IT_VIRTUALTABLE=
1280: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  1.    -DSQLITE_E
1290: 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
12a0: 55 4d 4e 53 0a 20 20 20 20 2d 44 53 51 4c 49 54  UMNS.    -DSQLIT
12b0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 33 0a 20  E_TEMP_STORE=3. 
12c0: 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e     --enable-json
12d0: 31 0a 20 20 7d 0a 20 20 22 44 65 76 69 63 65 2d  1.  }.  "Device-
12e0: 54 77 6f 22 20 7b 0a 20 20 20 20 2d 44 53 51 4c  Two" {.    -DSQL
12f0: 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e  ITE_4_BYTE_ALIGN
1300: 45 44 5f 4d 41 4c 4c 4f 43 3d 31 0a 20 20 20 20  ED_MALLOC=1.    
1310: 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  -DSQLITE_DEFAULT
1320: 5f 41 55 54 4f 56 41 43 55 55 4d 3d 31 0a 20 20  _AUTOVACUUM=1.  
1330: 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55    -DSQLITE_DEFAU
1340: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3d 31 30  LT_CACHE_SIZE=10
1350: 30 30 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  00.    -DSQLITE_
1360: 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f  DEFAULT_LOCKING_
1370: 4d 4f 44 45 3d 30 0a 20 20 20 20 2d 44 53 51 4c  MODE=0.    -DSQL
1380: 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 41 47 45  ITE_DEFAULT_PAGE
1390: 5f 53 49 5a 45 3d 31 30 32 34 0a 20 20 20 20 2d  _SIZE=1024.    -
13a0: 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  DSQLITE_DEFAULT_
13b0: 54 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a 45 3d  TEMP_CACHE_SIZE=
13c0: 31 30 30 30 0a 20 20 20 20 2d 44 53 51 4c 49 54  1000.    -DSQLIT
13d0: 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 3d 31 0a  E_DISABLE_LFS=1.
13e0: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
13f0: 42 4c 45 5f 46 54 53 33 3d 31 0a 20 20 20 20 2d  BLE_FTS3=1.    -
1400: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  DSQLITE_ENABLE_M
1410: 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54  EMORY_MANAGEMENT
1420: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
1430: 45 4e 41 42 4c 45 5f 52 54 52 45 45 3d 31 0a 20  ENABLE_RTREE=1. 
1440: 20 20 20 2d 44 53 51 4c 49 54 45 5f 4d 41 58 5f     -DSQLITE_MAX_
1450: 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 3d  COMPOUND_SELECT=
1460: 35 30 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  50.    -DSQLITE_
1470: 4d 41 58 5f 50 41 47 45 5f 53 49 5a 45 3d 33 32  MAX_PAGE_SIZE=32
1480: 37 36 38 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  768.    -DSQLITE
1490: 5f 4f 4d 49 54 5f 54 52 41 43 45 3d 31 0a 20 20  _OMIT_TRACE=1.  
14a0: 20 20 2d 44 53 51 4c 49 54 45 5f 54 45 4d 50 5f    -DSQLITE_TEMP_
14b0: 53 54 4f 52 45 3d 33 0a 20 20 20 20 2d 44 53 51  STORE=3.    -DSQ
14c0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d  LITE_THREADSAFE=
14d0: 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  2.    -DSQLITE_E
14e0: 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a  NABLE_DESERIALIZ
14f0: 45 3d 31 0a 20 20 20 20 2d 2d 65 6e 61 62 6c 65  E=1.    --enable
1500: 2d 6a 73 6f 6e 31 20 2d 2d 65 6e 61 62 6c 65 2d  -json1 --enable-
1510: 66 74 73 35 20 2d 2d 65 6e 61 62 6c 65 2d 73 65  fts5 --enable-se
1520: 73 73 69 6f 6e 0a 20 20 7d 0a 20 20 22 4c 6f 63  ssion.  }.  "Loc
1530: 6b 69 6e 67 2d 53 74 79 6c 65 22 20 7b 0a 20 20  king-Style" {.  
1540: 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53 51 4c 49    -O2.    -DSQLI
1550: 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e  TE_ENABLE_LOCKIN
1560: 47 5f 53 54 59 4c 45 3d 31 0a 20 20 7d 0a 20 20  G_STYLE=1.  }.  
1570: 22 41 70 70 6c 65 22 20 7b 0a 20 20 20 20 2d 4f  "Apple" {.    -O
1580: 73 0a 20 20 20 20 2d 44 48 41 56 45 5f 47 4d 54  s.    -DHAVE_GMT
1590: 49 4d 45 5f 52 3d 31 0a 20 20 20 20 2d 44 48 41  IME_R=1.    -DHA
15a0: 56 45 5f 49 53 4e 41 4e 3d 31 0a 20 20 20 20 2d  VE_ISNAN=1.    -
15b0: 44 48 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f  DHAVE_LOCALTIME_
15c0: 52 3d 31 0a 20 20 20 20 2d 44 48 41 56 45 5f 50  R=1.    -DHAVE_P
15d0: 52 45 41 44 3d 31 0a 20 20 20 20 2d 44 48 41 56  READ=1.    -DHAV
15e0: 45 5f 50 57 52 49 54 45 3d 31 0a 20 20 20 20 2d  E_PWRITE=1.    -
15f0: 44 48 41 56 45 5f 55 53 4c 45 45 50 3d 31 0a 20  DHAVE_USLEEP=1. 
1600: 20 20 20 2d 44 48 41 56 45 5f 55 53 4c 45 45 50     -DHAVE_USLEEP
1610: 3d 31 0a 20 20 20 20 2d 44 48 41 56 45 5f 55 54  =1.    -DHAVE_UT
1620: 49 4d 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  IME=1.    -DSQLI
1630: 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  TE_DEFAULT_CACHE
1640: 5f 53 49 5a 45 3d 31 30 30 30 0a 20 20 20 20 2d  _SIZE=1000.    -
1650: 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  DSQLITE_DEFAULT_
1660: 43 4b 50 54 46 55 4c 4c 46 53 59 4e 43 3d 31 0a  CKPTFULLFSYNC=1.
1670: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 46      -DSQLITE_DEF
1680: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 31  AULT_MEMSTATUS=1
1690: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45  .    -DSQLITE_DE
16a0: 46 41 55 4c 54 5f 50 41 47 45 5f 53 49 5a 45 3d  FAULT_PAGE_SIZE=
16b0: 31 30 32 34 0a 20 20 20 20 2d 44 53 51 4c 49 54  1024.    -DSQLIT
16c0: 45 5f 44 49 53 41 42 4c 45 5f 50 41 47 45 43 41  E_DISABLE_PAGECA
16d0: 43 48 45 5f 4f 56 45 52 46 4c 4f 57 5f 53 54 41  CHE_OVERFLOW_STA
16e0: 54 53 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  TS=1.    -DSQLIT
16f0: 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d  E_ENABLE_API_ARM
1700: 4f 52 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  OR=1.    -DSQLIT
1710: 45 5f 45 4e 41 42 4c 45 5f 41 55 54 4f 5f 50 52  E_ENABLE_AUTO_PR
1720: 4f 46 49 4c 45 3d 31 0a 20 20 20 20 2d 44 53 51  OFILE=1.    -DSQ
1730: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 4c 4f 43  LITE_ENABLE_FLOC
1740: 4b 54 49 4d 45 4f 55 54 3d 31 0a 20 20 20 20 2d  KTIMEOUT=1.    -
1750: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  DSQLITE_ENABLE_F
1760: 54 53 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  TS3=1.    -DSQLI
1770: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 5f 50  TE_ENABLE_FTS3_P
1780: 41 52 45 4e 54 48 45 53 49 53 3d 31 0a 20 20 20  ARENTHESIS=1.   
1790: 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
17a0: 5f 46 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 3d  _FTS3_TOKENIZER=
17b0: 31 0a 20 20 20 20 69 66 3a 6f 73 3d 3d 22 44 61  1.    if:os=="Da
17c0: 72 77 69 6e 22 20 2d 44 53 51 4c 49 54 45 5f 45  rwin" -DSQLITE_E
17d0: 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54  NABLE_LOCKING_ST
17e0: 59 4c 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  YLE=1.    -DSQLI
17f0: 54 45 5f 45 4e 41 42 4c 45 5f 50 45 52 53 49 53  TE_ENABLE_PERSIS
1800: 54 5f 57 41 4c 3d 31 0a 20 20 20 20 2d 44 53 51  T_WAL=1.    -DSQ
1810: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 55 52 47  LITE_ENABLE_PURG
1820: 45 41 42 4c 45 5f 50 43 41 43 48 45 3d 31 0a 20  EABLE_PCACHE=1. 
1830: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
1840: 4c 45 5f 52 54 52 45 45 3d 31 0a 20 20 20 20 2d  LE_RTREE=1.    -
1850: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  DSQLITE_ENABLE_S
1860: 4e 41 50 53 48 4f 54 3d 31 0a 20 20 20 20 23 20  NAPSHOT=1.    # 
1870: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
1880: 53 51 4c 4c 4f 47 3d 31 0a 20 20 20 20 2d 44 53  SQLLOG=1.    -DS
1890: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
18a0: 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
18b0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
18c0: 4d 41 58 5f 4c 45 4e 47 54 48 3d 32 31 34 37 34  MAX_LENGTH=21474
18d0: 38 33 36 34 35 0a 20 20 20 20 2d 44 53 51 4c 49  83645.    -DSQLI
18e0: 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
18f0: 4e 55 4d 42 45 52 3d 35 30 30 30 30 30 0a 20 20  NUMBER=500000.  
1900: 20 20 23 20 2d 44 53 51 4c 49 54 45 5f 4d 45 4d    # -DSQLITE_MEM
1910: 44 45 42 55 47 3d 31 0a 20 20 20 20 2d 44 53 51  DEBUG=1.    -DSQ
1920: 4c 49 54 45 5f 4e 4f 5f 53 59 4e 43 3d 31 0a 20  LITE_NO_SYNC=1. 
1930: 20 20 20 2d 44 53 51 4c 49 54 45 5f 4f 4d 49 54     -DSQLITE_OMIT
1940: 5f 41 55 54 4f 52 45 53 45 54 3d 31 0a 20 20 20  _AUTORESET=1.   
1950: 20 2d 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c   -DSQLITE_OMIT_L
1960: 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 3d 31 0a  OAD_EXTENSION=1.
1970: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 50 52 45      -DSQLITE_PRE
1980: 46 45 52 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e  FER_PROXY_LOCKIN
1990: 47 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  G=1.    -DSQLITE
19a0: 5f 53 45 52 49 45 53 5f 43 4f 4e 53 54 52 41 49  _SERIES_CONSTRAI
19b0: 4e 54 5f 56 45 52 49 46 59 3d 31 0a 20 20 20 20  NT_VERIFY=1.    
19c0: 2d 44 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  -DSQLITE_THREADS
19d0: 41 46 45 3d 32 0a 20 20 20 20 2d 44 53 51 4c 49  AFE=2.    -DSQLI
19e0: 54 45 5f 55 53 45 5f 55 52 49 3d 31 0a 20 20 20  TE_USE_URI=1.   
19f0: 20 2d 44 53 51 4c 49 54 45 5f 57 52 49 54 45 5f   -DSQLITE_WRITE_
1a00: 57 41 4c 46 52 41 4d 45 5f 50 52 45 42 55 46 46  WALFRAME_PREBUFF
1a10: 45 52 45 44 3d 31 0a 20 20 20 20 2d 44 55 53 45  ERED=1.    -DUSE
1a20: 5f 47 55 41 52 44 45 44 5f 46 44 3d 31 0a 20 20  _GUARDED_FD=1.  
1a30: 20 20 2d 44 55 53 45 5f 50 52 45 41 44 3d 31 0a    -DUSE_PREAD=1.
1a40: 20 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f      --enable-jso
1a50: 6e 31 20 2d 2d 65 6e 61 62 6c 65 2d 66 74 73 35  n1 --enable-fts5
1a60: 0a 20 20 7d 0a 20 20 22 45 78 74 72 61 2d 52 6f  .  }.  "Extra-Ro
1a70: 62 75 73 74 6e 65 73 73 22 20 7b 0a 20 20 20 20  bustness" {.    
1a80: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
1a90: 4f 56 45 52 53 49 5a 45 5f 43 45 4c 4c 5f 43 48  OVERSIZE_CELL_CH
1aa0: 45 43 4b 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  ECK=1.    -DSQLI
1ab0: 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3d  TE_MAX_ATTACHED=
1ac0: 36 32 0a 20 20 7d 0a 20 20 22 44 65 76 6b 69 74  62.  }.  "Devkit
1ad0: 22 20 7b 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  " {.    -DSQLITE
1ae0: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
1af0: 52 4d 41 54 3d 34 0a 20 20 20 20 2d 44 53 51 4c  RMAT=4.    -DSQL
1b00: 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1b10: 3d 33 30 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  =30.    -DSQLITE
1b20: 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d  _ENABLE_COLUMN_M
1b30: 45 54 41 44 41 54 41 0a 20 20 20 20 2d 44 53 51  ETADATA.    -DSQ
1b40: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
1b50: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e  .    -DSQLITE_EN
1b60: 41 42 4c 45 5f 46 54 53 35 0a 20 20 20 20 2d 44  ABLE_FTS5.    -D
1b70: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1b80: 53 34 5f 50 41 52 45 4e 54 48 45 53 49 53 0a 20  S4_PARENTHESIS. 
1b90: 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41     -DSQLITE_DISA
1ba0: 42 4c 45 5f 46 54 53 34 5f 44 45 46 45 52 52 45  BLE_FTS4_DEFERRE
1bb0: 44 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  D.    -DSQLITE_E
1bc0: 4e 41 42 4c 45 5f 52 54 52 45 45 0a 20 20 20 20  NABLE_RTREE.    
1bd0: 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 20 2d  --enable-json1 -
1be0: 2d 65 6e 61 62 6c 65 2d 66 74 73 35 0a 20 20 7d  -enable-fts5.  }
1bf0: 0a 20 20 22 4e 6f 2d 6c 6f 6f 6b 61 73 69 64 65  .  "No-lookaside
1c00: 22 20 7b 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  " {.    -DSQLITE
1c10: 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54  _TEST_REALLOC_ST
1c20: 52 45 53 53 3d 31 0a 20 20 20 20 2d 44 53 51 4c  RESS=1.    -DSQL
1c30: 49 54 45 5f 4f 4d 49 54 5f 4c 4f 4f 4b 41 53 49  ITE_OMIT_LOOKASI
1c40: 44 45 3d 31 0a 20 20 20 20 2d 44 48 41 56 45 5f  DE=1.    -DHAVE_
1c50: 55 53 4c 45 45 50 3d 31 0a 20 20 7d 0a 20 20 22  USLEEP=1.  }.  "
1c60: 56 61 6c 67 72 69 6e 64 22 20 7b 0a 20 20 20 20  Valgrind" {.    
1c70: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
1c80: 53 54 41 54 34 0a 20 20 20 20 2d 44 53 51 4c 49  STAT4.    -DSQLI
1c90: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 20  TE_ENABLE_FTS4. 
1ca0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
1cb0: 4c 45 5f 52 54 52 45 45 0a 20 20 20 20 2d 44 53  LE_RTREE.    -DS
1cc0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
1cd0: 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 20 20  DEN_COLUMNS.    
1ce0: 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 0a 20  --enable-json1. 
1cf0: 20 7d 0a 0a 20 20 23 20 54 68 65 20 6e 65 78 74   }..  # The next
1d00: 20 67 72 6f 75 70 20 6f 66 20 63 6f 6e 66 69 67   group of config
1d10: 75 72 61 74 69 6f 6e 73 20 61 72 65 20 75 73 65  urations are use
1d20: 64 20 6f 6e 6c 79 20 62 79 20 74 68 65 0a 20 20  d only by the.  
1d30: 23 20 46 61 69 6c 75 72 65 2d 44 65 74 65 63 74  # Failure-Detect
1d40: 69 6f 6e 20 70 6c 61 74 66 6f 72 6d 2e 20 20 54  ion platform.  T
1d50: 68 65 79 20 61 72 65 20 61 6c 6c 20 74 68 65 20  hey are all the 
1d60: 73 61 6d 65 2c 20 62 75 74 20 77 65 20 6e 65 65  same, but we nee
1d70: 64 0a 20 20 23 20 64 69 66 66 65 72 65 6e 74 20  d.  # different 
1d80: 6e 61 6d 65 73 20 66 6f 72 20 74 68 65 6d 20 61  names for them a
1d90: 6c 6c 20 73 6f 20 74 68 61 74 20 74 68 65 79 20  ll so that they 
1da0: 72 65 73 75 6c 74 73 20 61 70 70 65 61 72 20 69  results appear i
1db0: 6e 20 73 65 70 61 72 61 74 65 0a 20 20 23 20 73  n separate.  # s
1dc0: 75 62 64 69 72 65 63 74 6f 72 69 65 73 2e 0a 20  ubdirectories.. 
1dd0: 20 23 0a 20 20 46 61 69 6c 30 20 7b 2d 4f 30 7d   #.  Fail0 {-O0}
1de0: 0a 20 20 46 61 69 6c 32 20 7b 2d 4f 30 7d 0a 20  .  Fail2 {-O0}. 
1df0: 20 46 61 69 6c 33 20 7b 2d 4f 30 7d 0a 20 20 46   Fail3 {-O0}.  F
1e00: 61 69 6c 34 20 7b 2d 4f 30 7d 0a 20 20 46 75 7a  ail4 {-O0}.  Fuz
1e10: 7a 46 61 69 6c 31 20 7b 2d 4f 30 7d 0a 20 20 46  zFail1 {-O0}.  F
1e20: 75 7a 7a 46 61 69 6c 32 20 7b 2d 4f 30 7d 0a 7d  uzzFail2 {-O0}.}
1e30: 5d 0a 0a 61 72 72 61 79 20 73 65 74 20 3a 3a 50  ]..array set ::P
1e40: 6c 61 74 66 6f 72 6d 73 20 5b 73 74 72 69 70 5f  latforms [strip_
1e50: 63 6f 6d 6d 65 6e 74 73 20 7b 0a 20 20 4c 69 6e  comments {.  Lin
1e60: 75 78 2d 78 38 36 5f 36 34 20 7b 0a 20 20 20 20  ux-x86_64 {.    
1e70: 22 43 68 65 63 6b 2d 53 79 6d 62 6f 6c 73 22 20  "Check-Symbols" 
1e80: 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 73            checks
1e90: 79 6d 62 6f 6c 73 0a 20 20 20 20 22 46 61 73 74  ymbols.    "Fast
1ea0: 2d 4f 6e 65 22 20 20 20 20 20 20 20 20 20 20 20  -One"           
1eb0: 20 20 20 20 20 22 66 75 7a 7a 74 65 73 74 20 74       "fuzztest t
1ec0: 65 73 74 22 0a 20 20 20 20 22 44 65 62 75 67 2d  est".    "Debug-
1ed0: 4f 6e 65 22 20 20 20 20 20 20 20 20 20 20 20 20  One"            
1ee0: 20 20 20 22 6d 70 74 65 73 74 20 74 65 73 74 22     "mptest test"
1ef0: 0a 20 20 20 20 22 48 61 76 65 2d 4e 6f 74 22 20  .    "Have-Not" 
1f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f10: 65 73 74 0a 20 20 20 20 22 53 65 63 75 72 65 2d  est.    "Secure-
1f20: 44 65 6c 65 74 65 22 20 20 20 20 20 20 20 20 20  Delete"         
1f30: 20 20 74 65 73 74 0a 20 20 20 20 22 55 6e 6c 6f    test.    "Unlo
1f40: 63 6b 2d 4e 6f 74 69 66 79 22 20 20 20 20 20 20  ck-Notify"      
1f50: 20 20 20 20 20 22 51 55 49 43 4b 54 45 53 54 5f       "QUICKTEST_
1f60: 49 4e 43 4c 55 44 45 3d 6e 6f 74 69 66 79 32 2e  INCLUDE=notify2.
1f70: 74 65 73 74 20 74 65 73 74 22 0a 20 20 20 20 22  test test".    "
1f80: 55 73 65 72 2d 41 75 74 68 22 20 20 20 20 20 20  User-Auth"      
1f90: 20 20 20 20 20 20 20 20 20 74 63 6c 74 65 73 74           tcltest
1fa0: 0a 20 20 20 20 22 55 70 64 61 74 65 2d 44 65 6c  .    "Update-Del
1fb0: 65 74 65 2d 4c 69 6d 69 74 22 20 20 20 20 20 74  ete-Limit"     t
1fc0: 65 73 74 0a 20 20 20 20 22 45 78 74 72 61 2d 52  est.    "Extra-R
1fd0: 6f 62 75 73 74 6e 65 73 73 22 20 20 20 20 20 20  obustness"      
1fe0: 20 20 74 65 73 74 0a 20 20 20 20 22 44 65 76 69    test.    "Devi
1ff0: 63 65 2d 54 77 6f 22 20 20 20 20 20 20 20 20 20  ce-Two"         
2000: 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22 4e       test.    "N
2010: 6f 2d 6c 6f 6f 6b 61 73 69 64 65 22 20 20 20 20  o-lookaside"    
2020: 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20 20          test.   
2030: 20 22 44 65 76 6b 69 74 22 20 20 20 20 20 20 20   "Devkit"       
2040: 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 0a             test.
2050: 20 20 20 20 22 41 70 70 6c 65 22 20 20 20 20 20      "Apple"     
2060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
2070: 73 74 0a 20 20 20 20 22 53 61 6e 69 74 69 7a 65  st.    "Sanitize
2080: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
2090: 20 7b 51 55 49 43 4b 54 45 53 54 5f 4f 4d 49 54   {QUICKTEST_OMIT
20a0: 3d 66 75 6e 63 34 2e 74 65 73 74 2c 6e 61 6e 2e  =func4.test,nan.
20b0: 74 65 73 74 20 74 65 73 74 7d 0a 20 20 20 20 22  test test}.    "
20c0: 44 65 76 69 63 65 2d 4f 6e 65 22 20 20 20 20 20  Device-One"     
20d0: 20 20 20 20 20 20 20 20 20 66 75 6c 6c 74 65 73           fulltes
20e0: 74 0a 20 20 20 20 22 44 65 66 61 75 6c 74 22 20  t.    "Default" 
20f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2100: 22 74 68 72 65 61 64 74 65 73 74 20 66 75 6c 6c  "threadtest full
2110: 74 65 73 74 22 0a 20 20 20 20 22 56 61 6c 67 72  test".    "Valgr
2120: 69 6e 64 22 20 20 20 20 20 20 20 20 20 20 20 20  ind"            
2130: 20 20 20 20 76 61 6c 67 72 69 6e 64 74 65 73 74      valgrindtest
2140: 0a 20 20 7d 0a 20 20 4c 69 6e 75 78 2d 69 36 38  .  }.  Linux-i68
2150: 36 20 7b 0a 20 20 20 20 22 44 65 76 6b 69 74 22  6 {.    "Devkit"
2160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2170: 20 20 74 65 73 74 0a 20 20 20 20 22 48 61 76 65    test.    "Have
2180: 2d 4e 6f 74 22 20 20 20 20 20 20 20 20 20 20 20  -Not"           
2190: 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22 55       test.    "U
21a0: 6e 6c 6f 63 6b 2d 4e 6f 74 69 66 79 22 20 20 20  nlock-Notify"   
21b0: 20 20 20 20 20 20 20 20 22 51 55 49 43 4b 54 45          "QUICKTE
21c0: 53 54 5f 49 4e 43 4c 55 44 45 3d 6e 6f 74 69 66  ST_INCLUDE=notif
21d0: 79 32 2e 74 65 73 74 20 74 65 73 74 22 0a 20 20  y2.test test".  
21e0: 20 20 22 44 65 76 69 63 65 2d 4f 6e 65 22 20 20    "Device-One"  
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
2200: 0a 20 20 20 20 22 44 65 76 69 63 65 2d 54 77 6f  .    "Device-Two
2210: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  "              t
2220: 65 73 74 0a 20 20 20 20 22 44 65 66 61 75 6c 74  est.    "Default
2230: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
2240: 20 20 22 74 68 72 65 61 64 74 65 73 74 20 66 75    "threadtest fu
2250: 6c 6c 74 65 73 74 22 0a 20 20 7d 0a 20 20 44 61  lltest".  }.  Da
2260: 72 77 69 6e 2d 69 33 38 36 20 7b 0a 20 20 20 20  rwin-i386 {.    
2270: 22 4c 6f 63 6b 69 6e 67 2d 53 74 79 6c 65 22 20  "Locking-Style" 
2280: 20 20 20 20 20 20 20 20 20 20 22 6d 70 74 65 73            "mptes
2290: 74 20 74 65 73 74 22 0a 20 20 20 20 22 48 61 76  t test".    "Hav
22a0: 65 2d 4e 6f 74 22 20 20 20 20 20 20 20 20 20 20  e-Not"          
22b0: 20 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22        test.    "
22c0: 41 70 70 6c 65 22 20 20 20 20 20 20 20 20 20 20  Apple"          
22d0: 20 20 20 20 20 20 20 20 20 22 74 68 72 65 61 64           "thread
22e0: 74 65 73 74 20 66 75 6c 6c 74 65 73 74 22 0a 20  test fulltest". 
22f0: 20 7d 0a 20 20 44 61 72 77 69 6e 2d 78 38 36 5f   }.  Darwin-x86_
2300: 36 34 20 7b 0a 20 20 20 20 22 4c 6f 63 6b 69 6e  64 {.    "Lockin
2310: 67 2d 53 74 79 6c 65 22 20 20 20 20 20 20 20 20  g-Style"        
2320: 20 20 20 22 6d 70 74 65 73 74 20 74 65 73 74 22     "mptest test"
2330: 0a 20 20 20 20 22 48 61 76 65 2d 4e 6f 74 22 20  .    "Have-Not" 
2340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2350: 65 73 74 0a 20 20 20 20 22 41 70 70 6c 65 22 20  est.    "Apple" 
2360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2370: 20 20 22 74 68 72 65 61 64 74 65 73 74 20 66 75    "threadtest fu
2380: 6c 6c 74 65 73 74 22 0a 20 20 7d 0a 20 20 22 57  lltest".  }.  "W
2390: 69 6e 64 6f 77 73 20 4e 54 2d 69 6e 74 65 6c 22  indows NT-intel"
23a0: 20 7b 0a 20 20 20 20 22 53 74 64 63 61 6c 6c 22   {.    "Stdcall"
23b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c0: 20 74 65 73 74 0a 20 20 20 20 22 48 61 76 65 2d   test.    "Have-
23d0: 4e 6f 74 22 20 20 20 20 20 20 20 20 20 20 20 20  Not"            
23e0: 20 20 20 20 74 65 73 74 0a 20 20 20 20 22 44 65      test.    "De
23f0: 66 61 75 6c 74 22 20 20 20 20 20 20 20 20 20 20  fault"          
2400: 20 20 20 20 20 20 20 22 6d 70 74 65 73 74 20 66         "mptest f
2410: 75 6c 6c 74 65 73 74 6f 6e 6c 79 22 0a 20 20 7d  ulltestonly".  }
2420: 0a 20 20 22 57 69 6e 64 6f 77 73 20 4e 54 2d 61  .  "Windows NT-a
2430: 6d 64 36 34 22 20 7b 0a 20 20 20 20 22 53 74 64  md64" {.    "Std
2440: 63 61 6c 6c 22 20 20 20 20 20 20 20 20 20 20 20  call"           
2450: 20 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22        test.    "
2460: 48 61 76 65 2d 4e 6f 74 22 20 20 20 20 20 20 20  Have-Not"       
2470: 20 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20           test.  
2480: 20 20 22 44 65 66 61 75 6c 74 22 20 20 20 20 20    "Default"     
2490: 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 70 74              "mpt
24a0: 65 73 74 20 66 75 6c 6c 74 65 73 74 6f 6e 6c 79  est fulltestonly
24b0: 22 0a 20 20 7d 0a 0a 20 20 23 20 54 68 65 20 46  ".  }..  # The F
24c0: 61 69 6c 75 72 65 2d 44 65 74 65 63 74 69 6f 6e  ailure-Detection
24d0: 20 70 6c 61 74 66 6f 72 6d 20 72 75 6e 73 20 76   platform runs v
24e0: 61 72 69 6f 75 73 20 74 65 73 74 73 20 74 68 61  arious tests tha
24f0: 74 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 20  t deliberately. 
2500: 20 23 20 66 61 69 6c 2e 20 20 54 68 69 73 20 69   # fail.  This i
2510: 73 20 75 73 65 64 20 61 73 20 61 20 74 65 73 74  s used as a test
2520: 20 6f 66 20 74 68 69 73 20 73 63 72 69 70 74 20   of this script 
2530: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
2540: 68 69 73 20 73 63 72 69 70 74 0a 20 20 23 20 63  his script.  # c
2550: 6f 72 72 65 63 74 6c 79 20 69 64 65 6e 74 69 66  orrectly identif
2560: 69 65 73 20 66 61 69 6c 75 72 65 73 2e 0a 20 20  ies failures..  
2570: 23 0a 20 20 46 61 69 6c 75 72 65 2d 44 65 74 65  #.  Failure-Dete
2580: 63 74 69 6f 6e 20 7b 0a 20 20 20 20 46 61 69 6c  ction {.    Fail
2590: 30 20 20 20 20 20 22 54 45 53 54 5f 46 41 49 4c  0     "TEST_FAIL
25a0: 55 52 45 3d 30 20 74 65 73 74 22 0a 20 20 20 20  URE=0 test".    
25b0: 53 61 6e 69 74 69 7a 65 20 20 22 54 45 53 54 5f  Sanitize  "TEST_
25c0: 46 41 49 4c 55 52 45 3d 31 20 74 65 73 74 22 0a  FAILURE=1 test".
25d0: 20 20 20 20 46 61 69 6c 32 20 20 20 20 20 22 54      Fail2     "T
25e0: 45 53 54 5f 46 41 49 4c 55 52 45 3d 32 20 76 61  EST_FAILURE=2 va
25f0: 6c 67 72 69 6e 64 74 65 73 74 22 0a 20 20 20 20  lgrindtest".    
2600: 46 61 69 6c 33 20 20 20 20 20 22 54 45 53 54 5f  Fail3     "TEST_
2610: 46 41 49 4c 55 52 45 3d 33 20 76 61 6c 67 72 69  FAILURE=3 valgri
2620: 6e 64 74 65 73 74 22 0a 20 20 20 20 46 61 69 6c  ndtest".    Fail
2630: 34 20 20 20 20 20 22 54 45 53 54 5f 46 41 49 4c  4     "TEST_FAIL
2640: 55 52 45 3d 34 20 74 65 73 74 22 0a 20 20 20 20  URE=4 test".    
2650: 46 75 7a 7a 46 61 69 6c 31 20 22 54 45 53 54 5f  FuzzFail1 "TEST_
2660: 46 41 49 4c 55 52 45 3d 35 20 74 65 73 74 22 0a  FAILURE=5 test".
2670: 20 20 20 20 46 75 7a 7a 46 61 69 6c 32 20 22 54      FuzzFail2 "T
2680: 45 53 54 5f 46 41 49 4c 55 52 45 3d 35 20 76 61  EST_FAILURE=5 va
2690: 6c 67 72 69 6e 64 74 65 73 74 22 0a 20 20 7d 0a  lgrindtest".  }.
26a0: 7d 5d 0a 0a 0a 23 20 45 6e 64 20 6f 66 20 63 6f  }]...# End of co
26b0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 65 63 74  nfiguration sect
26c0: 69 6f 6e 2e 0a 23 23 23 23 23 23 23 23 23 23 23  ion..###########
26d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2700: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
2710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2750: 23 23 23 23 23 23 23 23 0a 0a 23 20 43 6f 6e 66  ########..# Conf
2760: 69 67 75 72 61 74 69 6f 6e 20 76 65 72 69 66 69  iguration verifi
2770: 63 61 74 69 6f 6e 3a 20 43 68 65 63 6b 20 74 68  cation: Check th
2780: 61 74 20 65 61 63 68 20 65 6e 74 72 79 20 69 6e  at each entry in
2790: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6e   the list of con
27a0: 66 69 67 73 0a 23 20 73 70 65 63 69 66 69 65 64  figs.# specified
27b0: 20 66 6f 72 20 65 61 63 68 20 70 6c 61 74 66 6f   for each platfo
27c0: 72 6d 73 20 65 78 69 73 74 73 2e 0a 23 0a 66 6f  rms exists..#.fo
27d0: 72 65 61 63 68 20 7b 6b 65 79 20 76 61 6c 75 65  reach {key value
27e0: 7d 20 5b 61 72 72 61 79 20 67 65 74 20 3a 3a 50  } [array get ::P
27f0: 6c 61 74 66 6f 72 6d 73 5d 20 7b 0a 20 20 66 6f  latforms] {.  fo
2800: 72 65 61 63 68 20 7b 76 20 74 7d 20 24 76 61 6c  reach {v t} $val
2810: 75 65 20 7b 0a 20 20 20 20 69 66 20 7b 30 3d 3d  ue {.    if {0==
2820: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 43  [info exists ::C
2830: 6f 6e 66 69 67 73 28 24 76 29 5d 7d 20 7b 0a 20  onfigs($v)]} {. 
2840: 20 20 20 20 20 70 75 74 73 20 73 74 64 65 72 72       puts stderr
2850: 20 22 4e 6f 20 73 75 63 68 20 63 6f 6e 66 69 67   "No such config
2860: 75 72 61 74 69 6f 6e 3a 20 5c 22 24 76 5c 22 22  uration: \"$v\""
2870: 0a 20 20 20 20 20 20 65 78 69 74 20 2d 31 0a 20  .      exit -1. 
2880: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23 20 4f 75     }.  }.}..# Ou
2890: 74 70 75 74 20 6c 6f 67 2e 20 20 20 44 69 73 61  tput log.   Disa
28a0: 62 6c 65 64 20 66 6f 72 20 73 6c 61 76 65 20 69  bled for slave i
28b0: 6e 74 65 72 70 72 65 74 65 72 73 2e 0a 23 0a 69  nterpreters..#.i
28c0: 66 20 7b 5b 6c 69 6e 64 65 78 20 24 61 72 67 76  f {[lindex $argv
28d0: 20 65 6e 64 5d 21 3d 22 2d 2d 73 6c 61 76 65 22   end]!="--slave"
28e0: 7d 20 7b 0a 20 20 73 65 74 20 4c 4f 47 20 5b 6f  } {.  set LOG [o
28f0: 70 65 6e 20 72 65 6c 65 61 73 65 74 65 73 74 2d  pen releasetest-
2900: 6f 75 74 2e 74 78 74 20 77 5d 0a 20 20 70 72 6f  out.txt w].  pro
2910: 63 20 50 55 54 53 20 7b 74 78 74 7d 20 7b 0a 20  c PUTS {txt} {. 
2920: 20 20 20 70 75 74 73 20 24 74 78 74 0a 20 20 20     puts $txt.   
2930: 20 70 75 74 73 20 24 3a 3a 4c 4f 47 20 24 74 78   puts $::LOG $tx
2940: 74 0a 20 20 20 20 66 6c 75 73 68 20 24 3a 3a 4c  t.    flush $::L
2950: 4f 47 0a 20 20 7d 0a 20 20 70 72 6f 63 20 50 55  OG.  }.  proc PU
2960: 54 53 4e 4e 4c 20 7b 74 78 74 7d 20 7b 0a 20 20  TSNNL {txt} {.  
2970: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
2980: 65 20 24 74 78 74 0a 20 20 20 20 70 75 74 73 20  e $txt.    puts 
2990: 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 3a 3a 4c 4f  -nonewline $::LO
29a0: 47 20 24 74 78 74 0a 20 20 20 20 66 6c 75 73 68  G $txt.    flush
29b0: 20 24 3a 3a 4c 4f 47 0a 20 20 7d 0a 20 20 70 72   $::LOG.  }.  pr
29c0: 6f 63 20 50 55 54 53 45 52 52 20 7b 74 78 74 7d  oc PUTSERR {txt}
29d0: 20 7b 0a 20 20 20 20 70 75 74 73 20 73 74 64 65   {.    puts stde
29e0: 72 72 20 24 74 78 74 0a 20 20 20 20 70 75 74 73  rr $txt.    puts
29f0: 20 24 3a 3a 4c 4f 47 20 24 74 78 74 0a 20 20 20   $::LOG $txt.   
2a00: 20 66 6c 75 73 68 20 24 3a 3a 4c 4f 47 0a 20 20   flush $::LOG.  
2a10: 7d 0a 20 20 70 75 74 73 20 24 4c 4f 47 20 22 24  }.  puts $LOG "$
2a20: 61 72 67 76 30 20 24 61 72 67 76 22 0a 20 20 73  argv0 $argv".  s
2a30: 65 74 20 74 6d 30 20 5b 63 6c 6f 63 6b 20 66 6f  et tm0 [clock fo
2a40: 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f  rmat [clock seco
2a50: 6e 64 73 5d 20 2d 66 6f 72 6d 61 74 20 7b 25 59  nds] -format {%Y
2a60: 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 7d  -%m-%d %H:%M:%S}
2a70: 20 2d 67 6d 74 20 31 5d 0a 20 20 70 75 74 73 20   -gmt 1].  puts 
2a80: 24 4c 4f 47 20 22 73 74 61 72 74 2d 74 69 6d 65  $LOG "start-time
2a90: 3a 20 24 74 6d 30 20 55 54 43 22 0a 7d 20 65 6c  : $tm0 UTC".} el
2aa0: 73 65 20 7b 0a 20 20 70 72 6f 63 20 50 55 54 53  se {.  proc PUTS
2ab0: 20 7b 74 78 74 7d 20 7b 0a 20 20 20 20 70 75 74   {txt} {.    put
2ac0: 73 20 24 74 78 74 0a 20 20 7d 0a 20 20 70 72 6f  s $txt.  }.  pro
2ad0: 63 20 50 55 54 53 4e 4e 4c 20 7b 74 78 74 7d 20  c PUTSNNL {txt} 
2ae0: 7b 0a 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65  {.    puts -none
2af0: 77 6c 69 6e 65 20 24 74 78 74 0a 20 20 7d 0a 20  wline $txt.  }. 
2b00: 20 70 72 6f 63 20 50 55 54 53 45 52 52 20 7b 74   proc PUTSERR {t
2b10: 78 74 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 73  xt} {.    puts s
2b20: 74 64 65 72 72 20 24 74 78 74 0a 20 20 7d 0a 7d  tderr $txt.  }.}
2b30: 0a 0a 23 20 4f 70 65 6e 20 74 68 65 20 66 69 6c  ..# Open the fil
2b40: 65 20 24 6c 6f 67 66 69 6c 65 20 61 6e 64 20 6c  e $logfile and l
2b50: 6f 6f 6b 20 66 6f 72 20 61 20 72 65 70 6f 72 74  ook for a report
2b60: 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
2b70: 66 20 65 72 72 6f 72 73 0a 23 20 61 6e 64 20 74  f errors.# and t
2b80: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 65 73  he number of tes
2b90: 74 20 63 61 73 65 73 20 72 75 6e 2e 20 20 41 64  t cases run.  Ad
2ba0: 64 20 74 68 65 73 65 20 76 61 6c 75 65 73 20 74  d these values t
2bb0: 6f 20 74 68 65 20 67 6c 6f 62 61 6c 0a 23 20 24  o the global.# $
2bc0: 3a 3a 4e 45 52 52 43 41 53 45 20 61 6e 64 20 24  ::NERRCASE and $
2bd0: 3a 3a 4e 54 45 53 54 43 41 53 45 20 76 61 72 69  ::NTESTCASE vari
2be0: 61 62 6c 65 73 2e 0a 23 0a 23 20 49 66 20 61 6e  ables..#.# If an
2bf0: 79 20 65 72 72 6f 72 73 20 6f 63 63 75 72 2c 20  y errors occur, 
2c00: 74 68 65 6e 20 77 72 69 74 65 20 69 6e 74 6f 20  then write into 
2c10: 24 65 72 72 6d 73 67 56 61 72 20 74 68 65 20 74  $errmsgVar the t
2c20: 65 78 74 20 6f 66 20 61 6e 20 61 70 70 72 6f 70  ext of an approp
2c30: 72 69 61 74 65 0a 23 20 6f 6e 65 2d 6c 69 6e 65  riate.# one-line
2c40: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74   error message t
2c50: 6f 20 73 68 6f 77 20 6f 6e 20 74 68 65 20 6f 75  o show on the ou
2c60: 74 70 75 74 2e 0a 23 0a 70 72 6f 63 20 63 6f 75  tput..#.proc cou
2c70: 6e 74 5f 74 65 73 74 73 5f 61 6e 64 5f 65 72 72  nt_tests_and_err
2c80: 6f 72 73 20 7b 6c 6f 67 66 69 6c 65 20 72 63 56  ors {logfile rcV
2c90: 61 72 20 65 72 72 6d 73 67 56 61 72 7d 20 7b 0a  ar errmsgVar} {.
2ca0: 20 20 69 66 20 7b 24 3a 3a 44 52 59 52 55 4e 7d    if {$::DRYRUN}
2cb0: 20 72 65 74 75 72 6e 0a 20 20 75 70 76 61 72 20   return.  upvar 
2cc0: 31 20 24 72 63 56 61 72 20 72 63 20 24 65 72 72  1 $rcVar rc $err
2cd0: 6d 73 67 56 61 72 20 65 72 72 6d 73 67 0a 20 20  msgVar errmsg.  
2ce0: 73 65 74 20 66 64 20 5b 6f 70 65 6e 20 24 6c 6f  set fd [open $lo
2cf0: 67 66 69 6c 65 20 72 62 5d 0a 20 20 73 65 74 20  gfile rb].  set 
2d00: 73 65 65 6e 20 30 0a 20 20 77 68 69 6c 65 20 7b  seen 0.  while {
2d10: 21 5b 65 6f 66 20 24 66 64 5d 7d 20 7b 0a 20 20  ![eof $fd]} {.  
2d20: 20 20 73 65 74 20 6c 69 6e 65 20 5b 67 65 74 73    set line [gets
2d30: 20 24 66 64 5d 0a 20 20 20 20 69 66 20 7b 5b 72   $fd].    if {[r
2d40: 65 67 65 78 70 20 7b 28 5c 64 2b 29 20 65 72 72  egexp {(\d+) err
2d50: 6f 72 73 20 6f 75 74 20 6f 66 20 28 5c 64 2b 29  ors out of (\d+)
2d60: 20 74 65 73 74 73 7d 20 24 6c 69 6e 65 20 61 6c   tests} $line al
2d70: 6c 20 6e 65 72 72 20 6e 74 65 73 74 5d 7d 20 7b  l nerr ntest]} {
2d80: 0a 20 20 20 20 20 20 69 6e 63 72 20 3a 3a 4e 45  .      incr ::NE
2d90: 52 52 43 41 53 45 20 24 6e 65 72 72 0a 20 20 20  RRCASE $nerr.   
2da0: 20 20 20 69 6e 63 72 20 3a 3a 4e 54 45 53 54 43     incr ::NTESTC
2db0: 41 53 45 20 24 6e 74 65 73 74 0a 20 20 20 20 20  ASE $ntest.     
2dc0: 20 73 65 74 20 73 65 65 6e 20 31 0a 20 20 20 20   set seen 1.    
2dd0: 20 20 69 66 20 7b 24 6e 65 72 72 3e 30 7d 20 7b    if {$nerr>0} {
2de0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 72 63 20  .        set rc 
2df0: 31 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 72  1.        set er
2e00: 72 6d 73 67 20 24 6c 69 6e 65 0a 20 20 20 20 20  rmsg $line.     
2e10: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20   }.    }.    if 
2e20: 7b 5b 72 65 67 65 78 70 20 7b 72 75 6e 74 69 6d  {[regexp {runtim
2e30: 65 20 65 72 72 6f 72 3a 20 2b 28 2e 2a 29 7d 20  e error: +(.*)} 
2e40: 24 6c 69 6e 65 20 61 6c 6c 20 6d 73 67 5d 7d 20  $line all msg]} 
2e50: 7b 0a 20 20 20 20 20 20 23 20 73 6b 69 70 20 6f  {.      # skip o
2e60: 76 65 72 20 22 76 61 6c 75 65 20 69 73 20 6f 75  ver "value is ou
2e70: 74 73 69 64 65 20 72 61 6e 67 65 22 20 65 72 72  tside range" err
2e80: 6f 72 73 0a 20 20 20 20 20 20 69 66 20 7b 5b 72  ors.      if {[r
2e90: 65 67 65 78 70 20 7b 76 61 6c 75 65 20 2e 2a 20  egexp {value .* 
2ea0: 69 73 20 6f 75 74 73 69 64 65 20 74 68 65 20 72  is outside the r
2eb0: 61 6e 67 65 20 6f 66 20 72 65 70 72 65 73 65 6e  ange of represen
2ec0: 74 61 62 6c 65 7d 20 24 6c 69 6e 65 5d 7d 20 7b  table} $line]} {
2ed0: 0a 20 20 20 20 20 20 20 20 20 23 20 6e 6f 6f 70  .         # noop
2ee0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  .      } else {.
2ef0: 20 20 20 20 20 20 20 20 69 6e 63 72 20 3a 3a 4e          incr ::N
2f00: 45 52 52 43 41 53 45 0a 20 20 20 20 20 20 20 20  ERRCASE.        
2f10: 69 66 20 7b 24 72 63 3d 3d 30 7d 20 7b 0a 20 20  if {$rc==0} {.  
2f20: 20 20 20 20 20 20 20 20 73 65 74 20 72 63 20 31          set rc 1
2f30: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 65  .          set e
2f40: 72 72 6d 73 67 20 24 6d 73 67 0a 20 20 20 20 20  rrmsg $msg.     
2f50: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
2f60: 20 7d 0a 20 20 20 20 69 66 20 7b 5b 72 65 67 65   }.    if {[rege
2f70: 78 70 20 7b 66 61 74 61 6c 20 65 72 72 6f 72 20  xp {fatal error 
2f80: 2b 28 2e 2a 29 7d 20 24 6c 69 6e 65 20 61 6c 6c  +(.*)} $line all
2f90: 20 6d 73 67 5d 7d 20 7b 0a 20 20 20 20 20 20 69   msg]} {.      i
2fa0: 6e 63 72 20 3a 3a 4e 45 52 52 43 41 53 45 0a 20  ncr ::NERRCASE. 
2fb0: 20 20 20 20 20 69 66 20 7b 24 72 63 3d 3d 30 7d       if {$rc==0}
2fc0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 72   {.        set r
2fd0: 63 20 31 0a 20 20 20 20 20 20 20 20 73 65 74 20  c 1.        set 
2fe0: 65 72 72 6d 73 67 20 24 6d 73 67 0a 20 20 20 20  errmsg $msg.    
2ff0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
3000: 20 7b 5b 72 65 67 65 78 70 20 7b 45 52 52 4f 52   {[regexp {ERROR
3010: 20 53 55 4d 4d 41 52 59 3a 20 28 5c 64 2b 29 20   SUMMARY: (\d+) 
3020: 65 72 72 6f 72 73 2e 2a 7d 20 24 6c 69 6e 65 20  errors.*} $line 
3030: 61 6c 6c 20 63 6e 74 5d 20 26 26 20 24 63 6e 74  all cnt] && $cnt
3040: 3e 30 7d 20 7b 0a 20 20 20 20 20 20 69 6e 63 72  >0} {.      incr
3050: 20 3a 3a 4e 45 52 52 43 41 53 45 0a 20 20 20 20   ::NERRCASE.    
3060: 20 20 69 66 20 7b 24 72 63 3d 3d 30 7d 20 7b 0a    if {$rc==0} {.
3070: 20 20 20 20 20 20 20 20 73 65 74 20 72 63 20 31          set rc 1
3080: 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 72 72  .        set err
3090: 6d 73 67 20 24 61 6c 6c 0a 20 20 20 20 20 20 7d  msg $all.      }
30a0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 5b  .    }.    if {[
30b0: 72 65 67 65 78 70 20 7b 5e 56 45 52 53 49 4f 4e  regexp {^VERSION
30c0: 3a 20 33 5c 2e 5c 64 2b 2e 5c 64 2b 7d 20 24 6c  : 3\.\d+.\d+} $l
30d0: 69 6e 65 5d 7d 20 7b 0a 20 20 20 20 20 20 73 65  ine]} {.      se
30e0: 74 20 76 20 5b 73 74 72 69 6e 67 20 72 61 6e 67  t v [string rang
30f0: 65 20 24 6c 69 6e 65 20 39 20 65 6e 64 5d 0a 20  e $line 9 end]. 
3100: 20 20 20 20 20 69 66 20 7b 24 3a 3a 53 51 4c 49       if {$::SQLI
3110: 54 45 5f 56 45 52 53 49 4f 4e 20 65 71 20 22 22  TE_VERSION eq ""
3120: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
3130: 3a 3a 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  ::SQLITE_VERSION
3140: 20 24 76 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   $v.      } else
3150: 69 66 20 7b 24 3a 3a 53 51 4c 49 54 45 5f 56 45  if {$::SQLITE_VE
3160: 52 53 49 4f 4e 20 6e 65 20 24 76 7d 20 7b 0a 20  RSION ne $v} {. 
3170: 20 20 20 20 20 20 20 73 65 74 20 72 63 20 31 0a         set rc 1.
3180: 20 20 20 20 20 20 20 20 73 65 74 20 65 72 72 6d          set errm
3190: 73 67 20 22 76 65 72 73 69 6f 6e 20 63 6f 6e 66  sg "version conf
31a0: 6c 69 63 74 3a 20 7b 24 3a 3a 53 51 4c 49 54 45  lict: {$::SQLITE
31b0: 5f 56 45 52 53 49 4f 4e 7d 20 76 73 2e 20 7b 24  _VERSION} vs. {$
31c0: 76 7d 22 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  v}".      }.    
31d0: 7d 0a 20 20 7d 0a 20 20 63 6c 6f 73 65 20 24 66  }.  }.  close $f
31e0: 64 0a 20 20 69 66 20 7b 24 3a 3a 42 55 49 4c 44  d.  if {$::BUILD
31f0: 4f 4e 4c 59 7d 20 7b 0a 20 20 20 20 69 6e 63 72  ONLY} {.    incr
3200: 20 3a 3a 4e 54 45 53 54 43 41 53 45 0a 20 20 20   ::NTESTCASE.   
3210: 20 69 66 20 7b 24 72 63 21 3d 30 7d 20 7b 0a 20   if {$rc!=0} {. 
3220: 20 20 20 20 20 73 65 74 20 65 72 72 6d 73 67 20       set errmsg 
3230: 22 42 75 69 6c 64 20 66 61 69 6c 65 64 22 0a 20  "Build failed". 
3240: 20 20 20 7d 0a 20 20 7d 20 65 6c 73 65 69 66 20     }.  } elseif 
3250: 7b 21 24 73 65 65 6e 7d 20 7b 0a 20 20 20 20 73  {!$seen} {.    s
3260: 65 74 20 72 63 20 31 0a 20 20 20 20 73 65 74 20  et rc 1.    set 
3270: 65 72 72 6d 73 67 20 22 54 65 73 74 20 64 69 64  errmsg "Test did
3280: 20 6e 6f 74 20 63 6f 6d 70 6c 65 74 65 22 0a 20   not complete". 
3290: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 72 65 61     if {[file rea
32a0: 64 61 62 6c 65 20 63 6f 72 65 5d 7d 20 7b 0a 20  dable core]} {. 
32b0: 20 20 20 20 20 61 70 70 65 6e 64 20 65 72 72 6d       append errm
32c0: 73 67 20 22 20 2d 20 63 6f 72 65 20 66 69 6c 65  sg " - core file
32d0: 20 65 78 69 73 74 73 22 0a 20 20 20 20 7d 0a 20   exists".    }. 
32e0: 20 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d   }.}..#---------
32f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3330: 2d 0a 23 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  -.# This command
3340: 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 73 20 74   is invoked as t
3350: 68 65 20 5b 6d 61 69 6e 5d 20 72 6f 75 74 69 6e  he [main] routin
3360: 65 20 66 6f 72 20 73 63 72 69 70 74 73 20 72 75  e for scripts ru
3370: 6e 20 77 69 74 68 20 74 68 65 0a 23 20 22 2d 2d  n with the.# "--
3380: 73 6c 61 76 65 22 20 6f 70 74 69 6f 6e 2e 0a 23  slave" option..#
3390: 0a 23 20 46 6f 72 20 65 61 63 68 20 74 65 73 74  .# For each test
33a0: 20 28 69 2e 65 2e 20 22 63 6f 6e 66 69 67 75 72   (i.e. "configur
33b0: 65 20 26 26 20 6d 61 6b 65 20 74 65 73 74 22 20  e && make test" 
33c0: 65 78 65 63 75 74 69 6f 6e 29 2c 20 74 68 65 20  execution), the 
33d0: 6d 61 73 74 65 72 0a 23 20 70 72 6f 63 65 73 73  master.# process
33e0: 20 73 70 61 77 6e 73 20 61 20 70 72 6f 63 65 73   spawns a proces
33f0: 73 20 77 69 74 68 20 74 68 65 20 2d 2d 73 6c 61  s with the --sla
3400: 76 65 20 6f 70 74 69 6f 6e 2e 20 49 74 20 77 72  ve option. It wr
3410: 69 74 65 73 20 74 77 6f 20 6c 69 6e 65 73 0a 23  ites two lines.#
3420: 20 74 6f 20 74 68 65 20 73 6c 61 76 65 73 20 73   to the slaves s
3430: 74 64 69 6e 2e 20 54 68 65 20 66 69 72 73 74 20  tdin. The first 
3440: 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c  contains a singl
3450: 65 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20  e boolean value 
3460: 2d 20 74 68 65 0a 23 20 76 61 6c 75 65 20 6f 66  - the.# value of
3470: 20 3a 3a 54 52 41 43 45 20 74 6f 20 75 73 65 20   ::TRACE to use 
3480: 69 6e 20 74 68 65 20 73 6c 61 76 65 20 73 63 72  in the slave scr
3490: 69 70 74 2e 20 54 68 65 20 73 65 63 6f 6e 64 20  ipt. The second 
34a0: 6c 69 6e 65 20 63 6f 6e 74 61 69 6e 73 20 61 0a  line contains a.
34b0: 23 20 6c 69 73 74 20 69 6e 20 74 68 65 20 73 61  # list in the sa
34c0: 6d 65 20 66 6f 72 6d 61 74 20 61 73 20 65 61 63  me format as eac
34d0: 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  h element of the
34e0: 20 6c 69 73 74 20 70 61 73 73 65 64 20 74 6f 20   list passed to 
34f0: 74 68 65 0a 23 20 5b 72 75 6e 5f 61 6c 6c 5f 74  the.# [run_all_t
3500: 65 73 74 5f 73 75 69 74 65 73 5d 20 63 6f 6d 6d  est_suites] comm
3510: 61 6e 64 20 69 6e 20 74 68 65 20 6d 61 73 74 65  and in the maste
3520: 72 20 70 72 6f 63 65 73 73 2e 0a 23 0a 23 20 54  r process..#.# T
3530: 68 65 20 73 6c 61 76 65 20 74 68 65 6e 20 72 75  he slave then ru
3540: 6e 73 20 74 68 65 20 22 63 6f 6e 66 69 67 75 72  ns the "configur
3550: 65 20 26 26 20 6d 61 6b 65 20 74 65 73 74 22 20  e && make test" 
3560: 63 6f 6d 6d 61 6e 64 73 20 73 70 65 63 69 66 69  commands specifi
3570: 65 64 2e 20 49 74 0a 23 20 65 78 69 74 73 20 73  ed. It.# exits s
3580: 75 63 63 65 73 73 66 75 6c 6c 79 20 69 66 20 74  uccessfully if t
3590: 68 65 20 74 65 73 74 73 20 70 61 73 73 65 73 2c  he tests passes,
35a0: 20 6f 72 20 77 69 74 68 20 61 20 6e 6f 6e 2d 7a   or with a non-z
35b0: 65 72 6f 20 65 72 72 6f 72 20 63 6f 64 65 0a 23  ero error code.#
35c0: 20 6f 74 68 65 72 77 69 73 65 2e 0a 23 0a 70 72   otherwise..#.pr
35d0: 6f 63 20 72 75 6e 5f 73 6c 61 76 65 5f 74 65 73  oc run_slave_tes
35e0: 74 20 7b 7d 20 7b 0a 20 20 23 20 52 65 61 64 20  t {} {.  # Read 
35f0: 67 6c 6f 62 61 6c 20 76 61 72 73 20 63 6f 6e 66  global vars conf
3600: 69 67 75 72 61 74 69 6f 6e 20 66 72 6f 6d 20 73  iguration from s
3610: 74 64 69 6e 2e 0a 20 20 73 65 74 20 56 20 5b 67  tdin..  set V [g
3620: 65 74 73 20 73 74 64 69 6e 5d 0a 20 20 66 6f 72  ets stdin].  for
3630: 65 61 63 68 20 7b 3a 3a 54 52 41 43 45 20 3a 3a  each {::TRACE ::
3640: 4d 53 56 43 20 3a 3a 44 52 59 52 55 4e 20 3a 3a  MSVC ::DRYRUN ::
3650: 4b 45 45 50 46 49 4c 45 53 7d 20 24 56 20 7b 7d  KEEPFILES} $V {}
3660: 0a 0a 20 20 23 20 52 65 61 64 20 74 68 65 20 74  ..  # Read the t
3670: 65 73 74 2d 73 75 69 74 65 20 63 6f 6e 66 69 67  est-suite config
3680: 75 72 61 74 69 6f 6e 20 66 72 6f 6d 20 73 74 64  uration from std
3690: 69 6e 2e 0a 20 20 73 65 74 20 54 20 5b 67 65 74  in..  set T [get
36a0: 73 20 73 74 64 69 6e 5d 0a 20 20 66 6f 72 65 61  s stdin].  forea
36b0: 63 68 20 7b 74 69 74 6c 65 20 64 69 72 20 63 6f  ch {title dir co
36c0: 6e 66 69 67 4f 70 74 73 20 74 65 73 74 74 61 72  nfigOpts testtar
36d0: 67 65 74 20 6d 61 6b 65 4f 70 74 73 20 63 66 6c  get makeOpts cfl
36e0: 61 67 73 20 6f 70 74 73 7d 20 24 54 20 7b 7d 0a  ags opts} $T {}.
36f0: 0a 20 20 23 20 43 72 65 61 74 65 20 61 6e 64 20  .  # Create and 
3700: 73 77 69 74 63 68 20 74 6f 20 74 68 65 20 74 65  switch to the te
3710: 73 74 20 64 69 72 65 63 74 6f 72 79 2e 0a 20 20  st directory..  
3720: 73 65 74 20 6e 6f 72 6d 61 6c 64 69 72 20 5b 66  set normaldir [f
3730: 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 24 64  ile normalize $d
3740: 69 72 5d 0a 20 20 73 65 74 20 3a 3a 65 6e 76 28  ir].  set ::env(
3750: 53 51 4c 49 54 45 5f 54 4d 50 44 49 52 29 20 24  SQLITE_TMPDIR) $
3760: 6e 6f 72 6d 61 6c 64 69 72 0a 20 20 74 72 61 63  normaldir.  trac
3770: 65 5f 63 6d 64 20 66 69 6c 65 20 6d 6b 64 69 72  e_cmd file mkdir
3780: 20 24 64 69 72 0a 20 20 74 72 61 63 65 5f 63 6d   $dir.  trace_cm
3790: 64 20 63 64 20 24 64 69 72 0a 20 20 63 61 74 63  d cd $dir.  catc
37a0: 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 63  h {file delete c
37b0: 6f 72 65 7d 0a 20 20 63 61 74 63 68 20 7b 66 69  ore}.  catch {fi
37c0: 6c 65 20 64 65 6c 65 74 65 20 74 65 73 74 2e 6c  le delete test.l
37d0: 6f 67 7d 0a 0a 20 20 23 20 52 75 6e 20 74 68 65  og}..  # Run the
37e0: 20 22 2e 2f 63 6f 6e 66 69 67 75 72 65 20 26 26   "./configure &&
37f0: 20 6d 61 6b 65 22 20 63 6f 6d 6d 61 6e 64 73 2e   make" commands.
3800: 0a 20 20 73 65 74 20 72 63 20 30 0a 20 20 73 65  .  set rc 0.  se
3810: 74 20 72 63 20 5b 63 61 74 63 68 20 5b 63 6f 6e  t rc [catch [con
3820: 66 69 67 75 72 65 43 6f 6d 6d 61 6e 64 20 24 63  figureCommand $c
3830: 6f 6e 66 69 67 4f 70 74 73 5d 5d 0a 20 20 69 66  onfigOpts]].  if
3840: 20 7b 21 24 72 63 7d 20 7b 0a 20 20 20 20 69 66   {!$rc} {.    if
3850: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
3860: 3a 65 6e 76 28 54 43 4c 53 48 5f 43 4d 44 29 5d  :env(TCLSH_CMD)]
3870: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 73 61  } {.      set sa
3880: 76 65 64 45 6e 76 28 54 43 4c 53 48 5f 43 4d 44  vedEnv(TCLSH_CMD
3890: 29 20 24 3a 3a 65 6e 76 28 54 43 4c 53 48 5f 43  ) $::env(TCLSH_C
38a0: 4d 44 29 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b  MD).    } else {
38b0: 0a 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f  .      unset -no
38c0: 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e  complain savedEn
38d0: 76 28 54 43 4c 53 48 5f 43 4d 44 29 0a 20 20 20  v(TCLSH_CMD).   
38e0: 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a 65 6e 76   }.    set ::env
38f0: 28 54 43 4c 53 48 5f 43 4d 44 29 20 5b 66 69 6c  (TCLSH_CMD) [fil
3900: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 69 6e  e nativename [in
3910: 66 6f 20 6e 61 6d 65 6f 66 65 78 65 63 75 74 61  fo nameofexecuta
3920: 62 6c 65 5d 5d 0a 0a 20 20 20 20 23 20 43 72 65  ble]]..    # Cre
3930: 61 74 65 20 61 20 66 69 6c 65 20 63 61 6c 6c 65  ate a file calle
3940: 64 20 22 6d 61 6b 65 63 6f 6d 6d 61 6e 64 2e 73  d "makecommand.s
3950: 68 22 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  h" containing th
3960: 65 20 74 65 78 74 20 6f 66 0a 20 20 20 20 23 20  e text of.    # 
3970: 74 68 65 20 6d 61 6b 65 20 63 6f 6d 6d 61 6e 64  the make command
3980: 20 6c 69 6e 65 2e 0a 20 20 20 20 63 61 74 63 68   line..    catch
3990: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6d 64   {.      set cmd
39a0: 20 5b 6d 61 6b 65 43 6f 6d 6d 61 6e 64 20 24 74   [makeCommand $t
39b0: 65 73 74 74 61 72 67 65 74 20 24 6d 61 6b 65 4f  esttarget $makeO
39c0: 70 74 73 20 24 63 66 6c 61 67 73 20 24 6f 70 74  pts $cflags $opt
39d0: 73 5d 0a 20 20 20 20 20 20 73 65 74 20 66 64 20  s].      set fd 
39e0: 5b 6f 70 65 6e 20 6d 61 6b 65 63 6f 6d 6d 61 6e  [open makecomman
39f0: 64 2e 73 68 20 77 5d 0a 20 20 20 20 20 20 66 6f  d.sh w].      fo
3a00: 72 65 61 63 68 20 65 20 24 63 6d 64 20 7b 20 0a  reach e $cmd { .
3a10: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
3a20: 69 6e 67 20 66 69 72 73 74 20 22 20 22 20 24 65  ing first " " $e
3a30: 5d 3e 3d 30 7d 20 7b 0a 20 20 20 20 20 20 20 20  ]>=0} {.        
3a40: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
3a50: 65 20 24 66 64 20 22 5c 22 24 65 5c 22 22 0a 20  e $fd "\"$e\"". 
3a60: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a         } else {.
3a70: 20 20 20 20 20 20 20 20 20 20 70 75 74 73 20 2d            puts -
3a80: 6e 6f 6e 65 77 6c 69 6e 65 20 24 66 64 20 24 65  nonewline $fd $e
3a90: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
3aa0: 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69     puts -nonewli
3ab0: 6e 65 20 24 66 64 20 22 20 22 0a 20 20 20 20 20  ne $fd " ".     
3ac0: 20 7d 0a 20 20 20 20 20 20 70 75 74 73 20 24 66   }.      puts $f
3ad0: 64 20 22 22 0a 20 20 20 20 20 20 63 6c 6f 73 65  d "".      close
3ae0: 20 24 66 64 0a 20 20 20 20 7d 20 6d 73 67 0a 0a   $fd.    } msg..
3af0: 20 20 20 20 23 20 52 75 6e 20 74 68 65 20 6d 61      # Run the ma
3b00: 6b 65 20 63 6f 6d 6d 61 6e 64 2e 0a 20 20 20 20  ke command..    
3b10: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 74  set rc [catch {t
3b20: 72 61 63 65 5f 63 6d 64 20 65 78 65 63 20 7b 2a  race_cmd exec {*
3b30: 7d 24 63 6d 64 20 3e 3e 26 20 74 65 73 74 2e 6c  }$cmd >>& test.l
3b40: 6f 67 7d 20 6d 73 67 5d 0a 20 20 20 20 69 66 20  og} msg].    if 
3b50: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 73 61  {[info exists sa
3b60: 76 65 64 45 6e 76 28 54 43 4c 53 48 5f 43 4d 44  vedEnv(TCLSH_CMD
3b70: 29 5d 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  )]} {.      set 
3b80: 3a 3a 65 6e 76 28 54 43 4c 53 48 5f 43 4d 44 29  ::env(TCLSH_CMD)
3b90: 20 24 73 61 76 65 64 45 6e 76 28 54 43 4c 53 48   $savedEnv(TCLSH
3ba0: 5f 43 4d 44 29 0a 20 20 20 20 7d 20 65 6c 73 65  _CMD).    } else
3bb0: 20 7b 0a 20 20 20 20 20 20 75 6e 73 65 74 20 2d   {.      unset -
3bc0: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76  nocomplain ::env
3bd0: 28 54 43 4c 53 48 5f 43 4d 44 29 0a 20 20 20 20  (TCLSH_CMD).    
3be0: 7d 0a 20 20 7d 0a 0a 20 20 23 20 43 6c 65 61 6e  }.  }..  # Clean
3bf0: 20 75 70 20 6c 6f 74 73 20 6f 66 20 65 78 74 72   up lots of extr
3c00: 61 20 66 69 6c 65 73 20 69 66 20 2d 2d 6b 65 65  a files if --kee
3c10: 70 20 77 61 73 20 6e 6f 74 20 73 70 65 63 69 66  p was not specif
3c20: 69 65 64 2e 0a 20 20 69 66 20 7b 24 3a 3a 4b 45  ied..  if {$::KE
3c30: 45 50 46 49 4c 45 53 3d 3d 30 7d 20 7b 20 63 6c  EPFILES==0} { cl
3c40: 65 61 6e 75 70 20 24 6e 6f 72 6d 61 6c 64 69 72  eanup $normaldir
3c50: 20 7d 0a 0a 20 20 23 20 45 78 69 73 20 73 75 63   }..  # Exis suc
3c60: 63 65 73 73 66 75 6c 6c 79 20 69 66 20 74 68 65  cessfully if the
3c70: 20 74 65 73 74 20 70 61 73 73 65 64 2c 20 6f 72   test passed, or
3c80: 20 77 69 74 68 20 61 20 6e 6f 6e 2d 7a 65 72 6f   with a non-zero
3c90: 20 65 72 72 6f 72 20 63 6f 64 65 0a 20 20 23 20   error code.  # 
3ca0: 6f 74 68 65 72 77 69 73 65 2e 0a 20 20 65 78 69  otherwise..  exi
3cb0: 74 20 24 72 63 0a 7d 0a 0a 23 20 54 68 69 73 20  t $rc.}..# This 
3cc0: 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b  command is invok
3cd0: 65 64 20 69 6e 20 74 68 65 20 6d 61 73 74 65 72  ed in the master
3ce0: 20 70 72 6f 63 65 73 73 20 65 61 63 68 20 74 69   process each ti
3cf0: 6d 65 20 61 20 73 6c 61 76 65 0a 23 20 66 69 6c  me a slave.# fil
3d00: 65 2d 64 65 73 63 72 69 70 74 6f 72 20 69 73 20  e-descriptor is 
3d10: 72 65 61 64 61 62 6c 65 2e 0a 23 0a 70 72 6f 63  readable..#.proc
3d20: 20 73 6c 61 76 65 5f 66 69 6c 65 65 76 65 6e 74   slave_fileevent
3d30: 20 7b 66 64 20 54 20 74 6d 31 7d 20 7b 0a 20 20   {fd T tm1} {.  
3d40: 67 6c 6f 62 61 6c 20 47 0a 20 20 66 6f 72 65 61  global G.  forea
3d50: 63 68 20 7b 74 69 74 6c 65 20 64 69 72 20 63 6f  ch {title dir co
3d60: 6e 66 69 67 4f 70 74 73 20 74 65 73 74 74 61 72  nfigOpts testtar
3d70: 67 65 74 20 6d 61 6b 65 4f 70 74 73 20 63 66 6c  get makeOpts cfl
3d80: 61 67 73 20 6f 70 74 73 7d 20 24 54 20 7b 7d 0a  ags opts} $T {}.
3d90: 0a 20 20 69 66 20 7b 5b 65 6f 66 20 24 66 64 5d  .  if {[eof $fd]
3da0: 7d 20 7b 0a 20 20 20 20 66 63 6f 6e 66 69 67 75  } {.    fconfigu
3db0: 72 65 20 24 66 64 20 2d 62 6c 6f 63 6b 69 6e 67  re $fd -blocking
3dc0: 20 31 0a 20 20 20 20 73 65 74 20 72 63 20 5b 63   1.    set rc [c
3dd0: 61 74 63 68 20 7b 20 63 6c 6f 73 65 20 24 66 64  atch { close $fd
3de0: 20 7d 5d 0a 0a 20 20 20 20 73 65 74 20 65 72 72   }]..    set err
3df0: 6d 73 67 20 7b 7d 0a 20 20 20 20 73 65 74 20 6c  msg {}.    set l
3e00: 6f 67 66 69 6c 65 20 5b 66 69 6c 65 20 6a 6f 69  ogfile [file joi
3e10: 6e 20 24 64 69 72 20 74 65 73 74 2e 6c 6f 67 5d  n $dir test.log]
3e20: 0a 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65  .    if {[file e
3e30: 78 69 73 74 73 20 24 6c 6f 67 66 69 6c 65 5d 7d  xists $logfile]}
3e40: 20 7b 0a 20 20 20 20 20 20 63 6f 75 6e 74 5f 74   {.      count_t
3e50: 65 73 74 73 5f 61 6e 64 5f 65 72 72 6f 72 73 20  ests_and_errors 
3e60: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20  [file join $dir 
3e70: 74 65 73 74 2e 6c 6f 67 5d 20 72 63 20 65 72 72  test.log] rc err
3e80: 6d 73 67 0a 20 20 20 20 7d 20 65 6c 73 65 69 66  msg.    } elseif
3e90: 20 7b 24 72 63 3d 3d 30 20 26 26 20 21 24 3a 3a   {$rc==0 && !$::
3ea0: 44 52 59 52 55 4e 7d 20 7b 0a 20 20 20 20 20 20  DRYRUN} {.      
3eb0: 73 65 74 20 72 63 20 31 0a 20 20 20 20 20 20 73  set rc 1.      s
3ec0: 65 74 20 65 72 72 6d 73 67 20 22 6e 6f 20 74 65  et errmsg "no te
3ed0: 73 74 2e 6c 6f 67 20 66 69 6c 65 2e 2e 2e 22 0a  st.log file...".
3ee0: 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20 7b 21      }..    if {!
3ef0: 24 3a 3a 54 52 41 43 45 7d 20 7b 0a 20 20 20 20  $::TRACE} {.    
3f00: 20 20 73 65 74 20 74 6d 32 20 5b 63 6c 6f 63 6b    set tm2 [clock
3f10: 20 73 65 63 6f 6e 64 73 5d 0a 20 20 20 20 20 20   seconds].      
3f20: 73 65 74 20 68 6f 75 72 73 20 5b 65 78 70 72 20  set hours [expr 
3f30: 7b 28 24 74 6d 32 2d 24 74 6d 31 29 2f 33 36 30  {($tm2-$tm1)/360
3f40: 30 7d 5d 0a 20 20 20 20 20 20 73 65 74 20 6d 69  0}].      set mi
3f50: 6e 75 74 65 73 20 5b 65 78 70 72 20 7b 28 28 24  nutes [expr {(($
3f60: 74 6d 32 2d 24 74 6d 31 29 2f 36 30 29 25 36 30  tm2-$tm1)/60)%60
3f70: 7d 5d 0a 20 20 20 20 20 20 73 65 74 20 73 65 63  }].      set sec
3f80: 6f 6e 64 73 20 5b 65 78 70 72 20 7b 28 24 74 6d  onds [expr {($tm
3f90: 32 2d 24 74 6d 31 29 25 36 30 7d 5d 0a 20 20 20  2-$tm1)%60}].   
3fa0: 20 20 20 73 65 74 20 74 6d 20 5b 66 6f 72 6d 61     set tm [forma
3fb0: 74 20 28 25 30 32 64 3a 25 30 32 64 3a 25 30 32  t (%02d:%02d:%02
3fc0: 64 29 20 24 68 6f 75 72 73 20 24 6d 69 6e 75 74  d) $hours $minut
3fd0: 65 73 20 24 73 65 63 6f 6e 64 73 5d 0a 0a 20 20  es $seconds]..  
3fe0: 20 20 20 20 69 66 20 7b 24 72 63 7d 20 7b 0a 20      if {$rc} {. 
3ff0: 20 20 20 20 20 20 20 73 65 74 20 73 74 61 74 75         set statu
4000: 73 20 46 41 49 4c 0a 20 20 20 20 20 20 20 20 69  s FAIL.        i
4010: 6e 63 72 20 3a 3a 4e 45 52 52 0a 20 20 20 20 20  ncr ::NERR.     
4020: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
4030: 20 20 73 65 74 20 73 74 61 74 75 73 20 4f 6b 0a    set status Ok.
4040: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 73        }..      s
4050: 65 74 20 6e 20 5b 73 74 72 69 6e 67 20 6c 65 6e  et n [string len
4060: 67 74 68 20 24 74 69 74 6c 65 5d 0a 20 20 20 20  gth $title].    
4070: 20 20 69 66 20 7b 24 3a 3a 50 52 4f 47 52 45 53    if {$::PROGRES
4080: 53 5f 4d 53 47 53 7d 20 7b 0a 20 20 20 20 20 20  S_MSGS} {.      
4090: 20 20 50 55 54 53 20 22 66 69 6e 69 73 68 65 64    PUTS "finished
40a0: 3a 20 24 7b 74 69 74 6c 65 7d 5b 73 74 72 69 6e  : ${title}[strin
40b0: 67 20 72 65 70 65 61 74 20 2e 20 5b 65 78 70 72  g repeat . [expr
40c0: 20 7b 35 33 2d 24 6e 7d 5d 5d 20 24 73 74 61 74   {53-$n}]] $stat
40d0: 75 73 20 24 74 6d 22 0a 20 20 20 20 20 20 7d 20  us $tm".      } 
40e0: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 50  else {.        P
40f0: 55 54 53 20 22 24 7b 74 69 74 6c 65 7d 5b 73 74  UTS "${title}[st
4100: 72 69 6e 67 20 72 65 70 65 61 74 20 2e 20 5b 65  ring repeat . [e
4110: 78 70 72 20 7b 36 33 2d 24 6e 7d 5d 5d 20 24 73  xpr {63-$n}]] $s
4120: 74 61 74 75 73 20 24 74 6d 22 0a 20 20 20 20 20  tatus $tm".     
4130: 20 7d 0a 20 20 20 20 20 20 69 66 20 7b 24 65 72   }.      if {$er
4140: 72 6d 73 67 21 3d 22 22 7d 20 7b 50 55 54 53 20  rmsg!=""} {PUTS 
4150: 22 20 20 20 20 20 24 65 72 72 6d 73 67 22 7d 0a  "     $errmsg"}.
4160: 20 20 20 20 20 20 66 6c 75 73 68 20 73 74 64 6f        flush stdo
4170: 75 74 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 6e  ut.    }..    in
4180: 63 72 20 47 28 6e 4a 6f 62 29 20 2d 31 0a 20 20  cr G(nJob) -1.  
4190: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 65 74  } else {.    set
41a0: 20 6c 69 6e 65 20 5b 67 65 74 73 20 24 66 64 5d   line [gets $fd]
41b0: 0a 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67  .    if {[string
41c0: 20 74 72 69 6d 20 24 6c 69 6e 65 5d 20 21 3d 20   trim $line] != 
41d0: 22 22 7d 20 7b 0a 20 20 20 20 20 20 70 75 74 73  ""} {.      puts
41e0: 20 22 54 72 61 63 65 20 20 20 3a 20 24 74 69 74   "Trace   : $tit
41f0: 6c 65 20 2d 20 5c 22 24 6c 69 6e 65 5c 22 22 0a  le - \"$line\"".
4200: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23 2d 2d      }.  }.}..#--
4210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4250: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 20 6f  --------.# The o
4260: 6e 6c 79 20 61 72 67 75 6d 65 6e 74 20 70 61 73  nly argument pas
4270: 73 65 64 20 74 6f 20 74 68 69 73 20 66 75 6e 63  sed to this func
4280: 74 69 6f 6e 20 69 73 20 61 20 6c 69 73 74 20 6f  tion is a list o
4290: 66 20 74 65 73 74 2d 73 75 69 74 65 73 20 74 6f  f test-suites to
42a0: 0a 23 20 72 75 6e 2e 20 45 61 63 68 20 22 74 65  .# run. Each "te
42b0: 73 74 2d 73 75 69 74 65 22 20 69 73 20 69 74 73  st-suite" is its
42c0: 65 6c 66 20 61 20 6c 69 73 74 20 63 6f 6e 73 69  elf a list consi
42d0: 73 74 69 6e 67 20 6f 66 20 74 68 65 20 66 6f 6c  sting of the fol
42e0: 6c 6f 77 69 6e 67 0a 23 20 65 6c 65 6d 65 6e 74  lowing.# element
42f0: 73 3a 0a 23 0a 23 20 20 20 2a 20 54 65 73 74 20  s:.#.#   * Test 
4300: 74 69 74 6c 65 20 28 66 6f 72 20 64 69 73 70 6c  title (for displ
4310: 61 79 29 2e 0a 23 20 20 20 2a 20 54 68 65 20 6e  ay)..#   * The n
4320: 61 6d 65 20 6f 66 20 74 68 65 20 64 69 72 65 63  ame of the direc
4330: 74 6f 72 79 20 74 6f 20 72 75 6e 20 74 68 65 20  tory to run the 
4340: 74 65 73 74 20 69 6e 2e 0a 23 20 20 20 2a 20 54  test in..#   * T
4350: 68 65 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20  he argument for 
4360: 5b 63 6f 6e 66 69 67 75 72 65 43 6f 6d 6d 61 6e  [configureComman
4370: 64 5d 0a 23 20 20 20 2a 20 54 68 65 20 66 69 72  d].#   * The fir
4380: 73 74 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20  st argument for 
4390: 5b 6d 61 6b 65 43 6f 6d 6d 61 6e 64 5d 0a 23 20  [makeCommand].# 
43a0: 20 20 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61    * The second a
43b0: 72 67 75 6d 65 6e 74 20 66 6f 72 20 5b 6d 61 6b  rgument for [mak
43c0: 65 43 6f 6d 6d 61 6e 64 5d 0a 23 20 20 20 2a 20  eCommand].#   * 
43d0: 54 68 65 20 74 68 69 72 64 20 61 72 67 75 6d 65  The third argume
43e0: 6e 74 20 66 6f 72 20 5b 6d 61 6b 65 43 6f 6d 6d  nt for [makeComm
43f0: 61 6e 64 5d 0a 23 0a 70 72 6f 63 20 72 75 6e 5f  and].#.proc run_
4400: 61 6c 6c 5f 74 65 73 74 5f 73 75 69 74 65 73 20  all_test_suites 
4410: 7b 61 6c 6c 74 65 73 74 73 7d 20 7b 0a 20 20 67  {alltests} {.  g
4420: 6c 6f 62 61 6c 20 47 0a 20 20 73 65 74 20 74 65  lobal G.  set te
4430: 73 74 73 20 24 61 6c 6c 74 65 73 74 73 0a 0a 20  sts $alltests.. 
4440: 20 73 65 74 20 47 28 6e 4a 6f 62 29 20 30 0a 0a   set G(nJob) 0..
4450: 20 20 77 68 69 6c 65 20 7b 5b 6c 6c 65 6e 67 74    while {[llengt
4460: 68 20 24 74 65 73 74 73 5d 3e 30 20 7c 7c 20 24  h $tests]>0 || $
4470: 47 28 6e 4a 6f 62 29 3e 30 7d 20 7b 0a 20 20 20  G(nJob)>0} {.   
4480: 20 69 66 20 7b 24 47 28 6e 4a 6f 62 29 3e 3d 24   if {$G(nJob)>=$
4490: 3a 3a 4a 4f 42 53 20 7c 7c 20 5b 6c 6c 65 6e 67  ::JOBS || [lleng
44a0: 74 68 20 24 74 65 73 74 73 5d 3d 3d 30 7d 20 7b  th $tests]==0} {
44b0: 0a 20 20 20 20 20 20 76 77 61 69 74 20 47 28 6e  .      vwait G(n
44c0: 4a 6f 62 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20  Job).    }..    
44d0: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 74 65  if {[llength $te
44e0: 73 74 73 5d 3e 30 7d 20 7b 0a 20 20 20 20 20 20  sts]>0} {.      
44f0: 73 65 74 20 54 20 5b 6c 69 6e 64 65 78 20 24 74  set T [lindex $t
4500: 65 73 74 73 20 30 5d 0a 20 20 20 20 20 20 73 65  ests 0].      se
4510: 74 20 74 65 73 74 73 20 5b 6c 72 61 6e 67 65 20  t tests [lrange 
4520: 24 74 65 73 74 73 20 31 20 65 6e 64 5d 0a 20 20  $tests 1 end].  
4530: 20 20 20 20 66 6f 72 65 61 63 68 20 7b 74 69 74      foreach {tit
4540: 6c 65 20 64 69 72 20 63 6f 6e 66 69 67 4f 70 74  le dir configOpt
4550: 73 20 74 65 73 74 74 61 72 67 65 74 20 6d 61 6b  s testtarget mak
4560: 65 4f 70 74 73 20 63 66 6c 61 67 73 20 6f 70 74  eOpts cflags opt
4570: 73 7d 20 24 54 20 7b 7d 0a 20 20 20 20 20 20 69  s} $T {}.      i
4580: 66 20 7b 24 3a 3a 50 52 4f 47 52 45 53 53 5f 4d  f {$::PROGRESS_M
4590: 53 47 53 20 26 26 20 21 24 3a 3a 54 52 41 43 45  SGS && !$::TRACE
45a0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
45b0: 6e 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  n [string length
45c0: 20 24 74 69 74 6c 65 5d 0a 20 20 20 20 20 20 20   $title].       
45d0: 20 50 55 54 53 20 22 73 74 61 72 74 69 6e 67 3a   PUTS "starting:
45e0: 20 24 7b 74 69 74 6c 65 7d 20 61 74 20 5b 6e 6f   ${title} at [no
45f0: 77 5d 22 0a 20 20 20 20 20 20 20 20 66 6c 75 73  w]".        flus
4600: 68 20 73 74 64 6f 75 74 0a 20 20 20 20 20 20 7d  h stdout.      }
4610: 0a 0a 20 20 20 20 20 20 23 20 52 75 6e 20 74 68  ..      # Run th
4620: 65 20 6a 6f 62 2e 0a 20 20 20 20 20 20 23 0a 20  e job..      #. 
4630: 20 20 20 20 20 73 65 74 20 74 6d 31 20 5b 63 6c       set tm1 [cl
4640: 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 20 20 20  ock seconds].   
4650: 20 20 20 69 6e 63 72 20 47 28 6e 4a 6f 62 29 0a     incr G(nJob).
4660: 20 20 20 20 20 20 73 65 74 20 73 63 72 69 70 74        set script
4670: 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65   [file normalize
4680: 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0a   [info script]].
4690: 20 20 20 20 20 20 73 65 74 20 66 64 20 5b 6f 70        set fd [op
46a0: 65 6e 20 22 7c 5b 69 6e 66 6f 20 6e 61 6d 65 6f  en "|[info nameo
46b0: 66 65 78 65 63 75 74 61 62 6c 65 5d 20 24 73 63  fexecutable] $sc
46c0: 72 69 70 74 20 2d 2d 73 6c 61 76 65 22 20 72 2b  ript --slave" r+
46d0: 5d 0a 20 20 20 20 20 20 66 63 6f 6e 66 69 67 75  ].      fconfigu
46e0: 72 65 20 24 66 64 20 2d 62 6c 6f 63 6b 69 6e 67  re $fd -blocking
46f0: 20 30 0a 20 20 20 20 20 20 66 69 6c 65 65 76 65   0.      fileeve
4700: 6e 74 20 24 66 64 20 72 65 61 64 61 62 6c 65 20  nt $fd readable 
4710: 5b 6c 69 73 74 20 73 6c 61 76 65 5f 66 69 6c 65  [list slave_file
4720: 65 76 65 6e 74 20 24 66 64 20 24 54 20 24 74 6d  event $fd $T $tm
4730: 31 5d 0a 20 20 20 20 20 20 70 75 74 73 20 24 66  1].      puts $f
4740: 64 20 5b 6c 69 73 74 20 24 3a 3a 54 52 41 43 45  d [list $::TRACE
4750: 20 24 3a 3a 4d 53 56 43 20 24 3a 3a 44 52 59 52   $::MSVC $::DRYR
4760: 55 4e 20 24 3a 3a 4b 45 45 50 46 49 4c 45 53 5d  UN $::KEEPFILES]
4770: 0a 20 20 20 20 20 20 70 75 74 73 20 24 66 64 20  .      puts $fd 
4780: 5b 6c 69 73 74 20 7b 2a 7d 24 54 5d 0a 20 20 20  [list {*}$T].   
4790: 20 20 20 66 6c 75 73 68 20 24 66 64 0a 20 20 20     flush $fd.   
47a0: 20 7d 0a 20 20 7d 0a 7d 0a 0a 70 72 6f 63 20 61   }.  }.}..proc a
47b0: 64 64 5f 74 65 73 74 5f 73 75 69 74 65 20 7b 6c  dd_test_suite {l
47c0: 69 73 74 76 61 72 20 6e 61 6d 65 20 74 65 73 74  istvar name test
47d0: 74 61 72 67 65 74 20 63 6f 6e 66 69 67 7d 20 7b  target config} {
47e0: 0a 20 20 75 70 76 61 72 20 24 6c 69 73 74 76 61  .  upvar $listva
47f0: 72 20 61 6c 6c 74 65 73 74 73 0a 0a 20 20 23 20  r alltests..  # 
4800: 54 63 6c 20 76 61 72 69 61 62 6c 65 20 24 6f 70  Tcl variable $op
4810: 74 73 20 69 73 20 75 73 65 64 20 74 6f 20 62 75  ts is used to bu
4820: 69 6c 64 20 75 70 20 74 68 65 20 76 61 6c 75 65  ild up the value
4830: 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65   used to set the
4840: 0a 20 20 23 20 4f 50 54 53 20 4d 61 6b 65 66 69  .  # OPTS Makefi
4850: 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 56 61 72  le variable. Var
4860: 69 61 62 6c 65 20 24 63 66 6c 61 67 73 20 68 6f  iable $cflags ho
4870: 6c 64 73 20 74 68 65 20 76 61 6c 75 65 20 66 6f  lds the value fo
4880: 72 0a 20 20 23 20 43 46 4c 41 47 53 2e 20 54 68  r.  # CFLAGS. Th
4890: 65 20 6d 61 6b 65 66 69 6c 65 20 77 69 6c 6c 20  e makefile will 
48a0: 70 61 73 73 20 4f 50 54 53 20 74 6f 20 62 6f 74  pass OPTS to bot
48b0: 68 20 67 63 63 20 61 6e 64 20 6c 65 6d 6f 6e 2c  h gcc and lemon,
48c0: 20 62 75 74 0a 20 20 23 20 43 46 4c 41 47 53 20   but.  # CFLAGS 
48d0: 69 73 20 6f 6e 6c 79 20 70 61 73 73 65 64 20 74  is only passed t
48e0: 6f 20 67 63 63 2e 0a 20 20 23 0a 20 20 73 65 74  o gcc..  #.  set
48f0: 20 6d 61 6b 65 4f 70 74 73 20 22 22 0a 20 20 73   makeOpts "".  s
4900: 65 74 20 63 66 6c 61 67 73 20 5b 65 78 70 72 20  et cflags [expr 
4910: 7b 24 3a 3a 4d 53 56 43 20 3f 20 22 2d 5a 69 22  {$::MSVC ? "-Zi"
4920: 20 3a 20 22 2d 67 22 7d 5d 0a 20 20 73 65 74 20   : "-g"}].  set 
4930: 6f 70 74 73 20 22 22 0a 20 20 73 65 74 20 74 69  opts "".  set ti
4940: 74 6c 65 20 24 7b 6e 61 6d 65 7d 28 24 74 65 73  tle ${name}($tes
4950: 74 74 61 72 67 65 74 29 0a 20 20 73 65 74 20 63  ttarget).  set c
4960: 6f 6e 66 69 67 4f 70 74 73 20 24 3a 3a 57 49 54  onfigOpts $::WIT
4970: 48 54 43 4c 0a 20 20 73 65 74 20 73 6b 69 70 20  HTCL.  set skip 
4980: 30 0a 0a 20 20 72 65 67 73 75 62 20 2d 61 6c 6c  0..  regsub -all
4990: 20 7b 23 5b 5e 5c 6e 5d 2a 5c 6e 7d 20 24 63 6f   {#[^\n]*\n} $co
49a0: 6e 66 69 67 20 5c 6e 20 63 6f 6e 66 69 67 0a 20  nfig \n config. 
49b0: 20 66 6f 72 65 61 63 68 20 61 72 67 20 24 63 6f   foreach arg $co
49c0: 6e 66 69 67 20 7b 0a 20 20 20 20 69 66 20 7b 24  nfig {.    if {$
49d0: 73 6b 69 70 7d 20 7b 0a 20 20 20 20 20 20 73 65  skip} {.      se
49e0: 74 20 73 6b 69 70 20 30 0a 20 20 20 20 20 20 63  t skip 0.      c
49f0: 6f 6e 74 69 6e 75 65 0a 20 20 20 20 7d 0a 20 20  ontinue.    }.  
4a00: 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e    if {[regexp {^
4a10: 2d 5b 55 44 5d 7d 20 24 61 72 67 5d 7d 20 7b 0a  -[UD]} $arg]} {.
4a20: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 70        lappend op
4a30: 74 73 20 24 61 72 67 0a 20 20 20 20 7d 20 65 6c  ts $arg.    } el
4a40: 73 65 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e  seif {[regexp {^
4a50: 5b 41 2d 5a 5d 2b 3d 7d 20 24 61 72 67 5d 7d 20  [A-Z]+=} $arg]} 
4a60: 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20  {.      lappend 
4a70: 74 65 73 74 74 61 72 67 65 74 20 24 61 72 67 0a  testtarget $arg.
4a80: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 72      } elseif {[r
4a90: 65 67 65 78 70 20 7b 5e 69 66 3a 28 5b 61 2d 7a  egexp {^if:([a-z
4aa0: 5d 2b 29 28 2e 2a 29 7d 20 24 61 72 67 20 61 6c  ]+)(.*)} $arg al
4ab0: 6c 20 6b 65 79 20 74 61 69 6c 5d 7d 20 7b 0a 20  l key tail]} {. 
4ac0: 20 20 20 20 20 23 20 41 72 67 75 6d 65 6e 74 73       # Arguments
4ad0: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 27 69 66   of the form 'if
4ae0: 3a 6f 73 3d 3d 22 4c 69 6e 75 78 22 27 20 77 69  :os=="Linux"' wi
4af0: 6c 6c 20 63 61 75 73 65 20 74 68 65 20 73 75 62  ll cause the sub
4b00: 73 65 71 75 65 6e 74 0a 20 20 20 20 20 20 23 20  sequent.      # 
4b10: 61 72 67 75 6d 65 6e 74 20 74 6f 20 62 65 20 73  argument to be s
4b20: 6b 69 70 70 65 64 20 69 66 20 74 68 65 20 24 74  kipped if the $t
4b30: 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6f 73 29 20  cl_platform(os) 
4b40: 69 73 20 6e 6f 74 20 22 4c 69 6e 75 78 22 2c 20  is not "Linux", 
4b50: 66 6f 72 0a 20 20 20 20 20 20 23 20 65 78 61 6d  for.      # exam
4b60: 70 6c 65 2e 2e 2e 0a 20 20 20 20 20 20 73 65 74  ple....      set
4b70: 20 73 6b 69 70 20 5b 65 78 70 72 20 21 28 5c 24   skip [expr !(\$
4b80: 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 24  ::tcl_platform($
4b90: 6b 65 79 29 24 74 61 69 6c 29 5d 0a 20 20 20 20  key)$tail)].    
4ba0: 7d 20 65 6c 73 65 69 66 20 7b 5b 72 65 67 65 78  } elseif {[regex
4bb0: 70 20 7b 5e 2d 2d 28 65 6e 61 62 6c 65 7c 64 69  p {^--(enable|di
4bc0: 73 61 62 6c 65 29 2d 7d 20 24 61 72 67 5d 7d 20  sable)-} $arg]} 
4bd0: 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 3a 3a 4d  {.      if {$::M
4be0: 53 56 43 7d 20 7b 0a 20 20 20 20 20 20 20 20 69  SVC} {.        i
4bf0: 66 20 7b 24 61 72 67 20 65 71 20 22 2d 2d 64 69  f {$arg eq "--di
4c00: 73 61 62 6c 65 2d 61 6d 61 6c 67 61 6d 61 74 69  sable-amalgamati
4c10: 6f 6e 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  on"} {.         
4c20: 20 6c 61 70 70 65 6e 64 20 6d 61 6b 65 4f 70 74   lappend makeOpt
4c30: 73 20 55 53 45 5f 41 4d 41 4c 47 41 4d 41 54 49  s USE_AMALGAMATI
4c40: 4f 4e 3d 30 0a 20 20 20 20 20 20 20 20 20 20 63  ON=0.          c
4c50: 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20 20 20  ontinue.        
4c60: 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 61  }.        if {$a
4c70: 72 67 20 65 71 20 22 2d 2d 64 69 73 61 62 6c 65  rg eq "--disable
4c80: 2d 73 68 61 72 65 64 22 7d 20 7b 0a 20 20 20 20  -shared"} {.    
4c90: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 61        lappend ma
4ca0: 6b 65 4f 70 74 73 20 55 53 45 5f 43 52 54 5f 44  keOpts USE_CRT_D
4cb0: 4c 4c 3d 30 20 44 59 4e 41 4d 49 43 5f 53 48 45  LL=0 DYNAMIC_SHE
4cc0: 4c 4c 3d 30 0a 20 20 20 20 20 20 20 20 20 20 63  LL=0.          c
4cd0: 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20 20 20  ontinue.        
4ce0: 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 61  }.        if {$a
4cf0: 72 67 20 65 71 20 22 2d 2d 65 6e 61 62 6c 65 2d  rg eq "--enable-
4d00: 66 74 73 35 22 7d 20 7b 0a 20 20 20 20 20 20 20  fts5"} {.       
4d10: 20 20 20 6c 61 70 70 65 6e 64 20 6f 70 74 73 20     lappend opts 
4d20: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
4d30: 46 54 53 35 0a 20 20 20 20 20 20 20 20 20 20 63  FTS5.          c
4d40: 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20 20 20  ontinue.        
4d50: 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 61  }.        if {$a
4d60: 72 67 20 65 71 20 22 2d 2d 65 6e 61 62 6c 65 2d  rg eq "--enable-
4d70: 6a 73 6f 6e 31 22 7d 20 7b 0a 20 20 20 20 20 20  json1"} {.      
4d80: 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 70 74 73      lappend opts
4d90: 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
4da0: 5f 4a 53 4f 4e 31 0a 20 20 20 20 20 20 20 20 20  _JSON1.         
4db0: 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20   continue.      
4dc0: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b    }.        if {
4dd0: 24 61 72 67 20 65 71 20 22 2d 2d 65 6e 61 62 6c  $arg eq "--enabl
4de0: 65 2d 73 68 61 72 65 64 22 7d 20 7b 0a 20 20 20  e-shared"} {.   
4df0: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d         lappend m
4e00: 61 6b 65 4f 70 74 73 20 55 53 45 5f 43 52 54 5f  akeOpts USE_CRT_
4e10: 44 4c 4c 3d 31 20 44 59 4e 41 4d 49 43 5f 53 48  DLL=1 DYNAMIC_SH
4e20: 45 4c 4c 3d 31 0a 20 20 20 20 20 20 20 20 20 20  ELL=1.          
4e30: 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20 20  continue.       
4e40: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
4e50: 20 6c 61 70 70 65 6e 64 20 63 6f 6e 66 69 67 4f   lappend configO
4e60: 70 74 73 20 24 61 72 67 0a 20 20 20 20 7d 20 65  pts $arg.    } e
4e70: 6c 73 65 20 7b 0a 20 20 20 20 20 20 69 66 20 7b  lse {.      if {
4e80: 24 3a 3a 4d 53 56 43 7d 20 7b 0a 20 20 20 20 20  $::MSVC} {.     
4e90: 20 20 20 69 66 20 7b 24 61 72 67 20 65 71 20 22     if {$arg eq "
4ea0: 2d 67 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20  -g"} {.         
4eb0: 20 6c 61 70 70 65 6e 64 20 63 66 6c 61 67 73 20   lappend cflags 
4ec0: 2d 5a 69 0a 20 20 20 20 20 20 20 20 20 20 63 6f  -Zi.          co
4ed0: 6e 74 69 6e 75 65 0a 20 20 20 20 20 20 20 20 7d  ntinue.        }
4ee0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 72 65  .        if {[re
4ef0: 67 65 78 70 20 2d 2d 20 7b 5e 2d 4f 28 5c 64 2b  gexp -- {^-O(\d+
4f00: 29 24 7d 20 24 61 72 67 20 61 6c 6c 20 6c 65 76  )$} $arg all lev
4f10: 65 6c 5d 7d 20 74 68 65 6e 20 7b 0a 20 20 20 20  el]} then {.    
4f20: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 61        lappend ma
4f30: 6b 65 4f 70 74 73 20 4f 50 54 49 4d 49 5a 41 54  keOpts OPTIMIZAT
4f40: 49 4f 4e 53 3d 24 6c 65 76 65 6c 0a 20 20 20 20  IONS=$level.    
4f50: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20        continue. 
4f60: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
4f70: 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63  .      lappend c
4f80: 66 6c 61 67 73 20 24 61 72 67 0a 20 20 20 20 7d  flags $arg.    }
4f90: 0a 20 20 7d 0a 0a 20 20 23 20 44 69 73 61 62 6c  .  }..  # Disabl
4fa0: 65 20 73 79 6e 63 20 74 6f 20 6d 61 6b 65 20 74  e sync to make t
4fb0: 65 73 74 69 6e 67 20 66 61 73 74 65 72 2e 0a 20  esting faster.. 
4fc0: 20 23 0a 20 20 6c 61 70 70 65 6e 64 20 6f 70 74   #.  lappend opt
4fd0: 73 20 2d 44 53 51 4c 49 54 45 5f 4e 4f 5f 53 59  s -DSQLITE_NO_SY
4fe0: 4e 43 3d 31 0a 0a 20 20 23 20 53 6f 6d 65 20 63  NC=1..  # Some c
4ff0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 61 6c  onfigurations al
5000: 72 65 61 64 79 20 73 65 74 20 48 41 56 45 5f 55  ready set HAVE_U
5010: 53 4c 45 45 50 3b 20 69 6e 20 74 68 61 74 20 63  SLEEP; in that c
5020: 61 73 65 2c 20 73 6b 69 70 20 69 74 2e 0a 20 20  ase, skip it..  
5030: 23 0a 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68  #.  if {[lsearch
5040: 20 2d 72 65 67 65 78 70 20 24 6f 70 74 73 20 7b   -regexp $opts {
5050: 5e 2d 44 48 41 56 45 5f 55 53 4c 45 45 50 28 3f  ^-DHAVE_USLEEP(?
5060: 3a 3d 7c 24 29 7d 5d 3d 3d 2d 31 7d 20 7b 0a 20  :=|$)}]==-1} {. 
5070: 20 20 20 6c 61 70 70 65 6e 64 20 6f 70 74 73 20     lappend opts 
5080: 2d 44 48 41 56 45 5f 55 53 4c 45 45 50 3d 31 0a  -DHAVE_USLEEP=1.
5090: 20 20 7d 0a 0a 20 20 23 20 41 64 64 20 74 68 65    }..  # Add the
50a0: 20 64 65 66 69 6e 65 20 66 6f 72 20 74 68 69 73   define for this
50b0: 20 70 6c 61 74 66 6f 72 6d 2e 0a 20 20 23 0a 20   platform..  #. 
50c0: 20 69 66 20 7b 24 3a 3a 74 63 6c 5f 70 6c 61 74   if {$::tcl_plat
50d0: 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d  form(platform)==
50e0: 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 20 20 20  "windows"} {.   
50f0: 20 6c 61 70 70 65 6e 64 20 6f 70 74 73 20 2d 44   lappend opts -D
5100: 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 3d 31 0a  SQLITE_OS_WIN=1.
5110: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 6c    } else {.    l
5120: 61 70 70 65 6e 64 20 6f 70 74 73 20 2d 44 53 51  append opts -DSQ
5130: 4c 49 54 45 5f 4f 53 5f 55 4e 49 58 3d 31 0a 20  LITE_OS_UNIX=1. 
5140: 20 7d 0a 0a 20 20 23 20 53 65 74 20 74 68 65 20   }..  # Set the 
5150: 73 75 62 2d 64 69 72 65 63 74 6f 72 79 20 74 6f  sub-directory to
5160: 20 75 73 65 2e 0a 20 20 23 0a 20 20 73 65 74 20   use..  #.  set 
5170: 64 69 72 20 5b 73 74 72 69 6e 67 20 74 6f 6c 6f  dir [string tolo
5180: 77 65 72 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  wer [string map 
5190: 7b 2d 20 5f 20 22 20 22 20 5f 7d 20 24 6e 61 6d  {- _ " " _} $nam
51a0: 65 5d 5d 0a 0a 20 20 23 20 4a 6f 69 6e 20 6f 70  e]]..  # Join op
51b0: 74 69 6f 6e 20 6c 69 73 74 73 20 69 6e 74 6f 20  tion lists into 
51c0: 73 74 72 69 6e 67 73 2c 20 75 73 69 6e 67 20 73  strings, using s
51d0: 70 61 63 65 20 61 73 20 64 65 6c 69 6d 69 74 65  pace as delimite
51e0: 72 2e 0a 20 20 23 0a 20 20 73 65 74 20 6d 61 6b  r..  #.  set mak
51f0: 65 4f 70 74 73 20 5b 6a 6f 69 6e 20 24 6d 61 6b  eOpts [join $mak
5200: 65 4f 70 74 73 20 22 20 22 5d 0a 20 20 73 65 74  eOpts " "].  set
5210: 20 63 66 6c 61 67 73 20 20 20 5b 6a 6f 69 6e 20   cflags   [join 
5220: 24 63 66 6c 61 67 73 20 22 20 22 5d 0a 20 20 73  $cflags " "].  s
5230: 65 74 20 6f 70 74 73 20 20 20 20 20 5b 6a 6f 69  et opts     [joi
5240: 6e 20 24 6f 70 74 73 20 22 20 22 5d 0a 0a 20 20  n $opts " "]..  
5250: 6c 61 70 70 65 6e 64 20 61 6c 6c 74 65 73 74 73  lappend alltests
5260: 20 5b 6c 69 73 74 20 5c 0a 20 20 20 20 20 20 24   [list \.      $
5270: 74 69 74 6c 65 20 24 64 69 72 20 24 63 6f 6e 66  title $dir $conf
5280: 69 67 4f 70 74 73 20 24 74 65 73 74 74 61 72 67  igOpts $testtarg
5290: 65 74 20 24 6d 61 6b 65 4f 70 74 73 20 24 63 66  et $makeOpts $cf
52a0: 6c 61 67 73 20 24 6f 70 74 73 5d 0a 7d 0a 0a 23  lags $opts].}..#
52b0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70   The following p
52c0: 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73  rocedure returns
52d0: 20 74 68 65 20 22 63 6f 6e 66 69 67 75 72 65 22   the "configure"
52e0: 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 62 65 20 65   command to be e
52f0: 78 65 63 74 75 65 64 20 66 6f 72 0a 23 20 74 68  xectued for.# th
5300: 65 20 63 75 72 72 65 6e 74 20 70 6c 61 74 66 6f  e current platfo
5310: 72 6d 2c 20 77 68 69 63 68 20 6d 61 79 20 62 65  rm, which may be
5320: 20 57 69 6e 64 6f 77 73 20 28 76 69 61 20 4d 69   Windows (via Mi
5330: 6e 47 57 2c 20 65 74 63 29 2e 0a 23 0a 70 72 6f  nGW, etc)..#.pro
5340: 63 20 63 6f 6e 66 69 67 75 72 65 43 6f 6d 6d 61  c configureComma
5350: 6e 64 20 7b 6f 70 74 73 7d 20 7b 0a 20 20 69 66  nd {opts} {.  if
5360: 20 7b 24 3a 3a 4d 53 56 43 7d 20 72 65 74 75 72   {$::MSVC} retur
5370: 6e 20 5b 6c 69 73 74 5d 3b 20 23 20 54 68 69 73  n [list]; # This
5380: 20 69 73 20 6e 6f 74 20 6e 65 65 64 65 64 20 66   is not needed f
5390: 6f 72 20 4d 53 56 43 2e 0a 20 20 73 65 74 20 72  or MSVC..  set r
53a0: 65 73 75 6c 74 20 5b 6c 69 73 74 20 74 72 61 63  esult [list trac
53b0: 65 5f 63 6d 64 20 65 78 65 63 5d 0a 20 20 69 66  e_cmd exec].  if
53c0: 20 7b 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72   {$::tcl_platfor
53d0: 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 77 69  m(platform)=="wi
53e0: 6e 64 6f 77 73 22 7d 20 7b 0a 20 20 20 20 6c 61  ndows"} {.    la
53f0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 73 68 0a  ppend result sh.
5400: 20 20 7d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65    }.  lappend re
5410: 73 75 6c 74 20 24 3a 3a 53 52 43 44 49 52 2f 63  sult $::SRCDIR/c
5420: 6f 6e 66 69 67 75 72 65 20 2d 2d 65 6e 61 62 6c  onfigure --enabl
5430: 65 2d 6c 6f 61 64 2d 65 78 74 65 6e 73 69 6f 6e  e-load-extension
5440: 0a 20 20 66 6f 72 65 61 63 68 20 78 20 24 6f 70  .  foreach x $op
5450: 74 73 20 7b 6c 61 70 70 65 6e 64 20 72 65 73 75  ts {lappend resu
5460: 6c 74 20 24 78 7d 0a 20 20 6c 61 70 70 65 6e 64  lt $x}.  lappend
5470: 20 72 65 73 75 6c 74 20 3e 26 20 74 65 73 74 2e   result >& test.
5480: 6c 6f 67 0a 7d 0a 0a 23 20 54 68 65 20 66 6f 6c  log.}..# The fol
5490: 6c 6f 77 69 6e 67 20 70 72 6f 63 65 64 75 72 65  lowing procedure
54a0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 22 6d 61   returns the "ma
54b0: 6b 65 22 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 62  ke" command to b
54c0: 65 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74  e executed for t
54d0: 68 65 0a 23 20 73 70 65 63 69 66 69 65 64 20 74  he.# specified t
54e0: 61 72 67 65 74 73 2c 20 63 6f 6d 70 69 6c 65 72  argets, compiler
54f0: 20 66 6c 61 67 73 2c 20 61 6e 64 20 6f 70 74 69   flags, and opti
5500: 6f 6e 73 2e 0a 23 0a 70 72 6f 63 20 6d 61 6b 65  ons..#.proc make
5510: 43 6f 6d 6d 61 6e 64 20 7b 20 74 61 72 67 65 74  Command { target
5520: 73 20 6d 61 6b 65 4f 70 74 73 20 63 66 6c 61 67  s makeOpts cflag
5530: 73 20 6f 70 74 73 20 7d 20 7b 0a 20 20 73 65 74  s opts } {.  set
5540: 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0a 20   result [list]. 
5550: 20 69 66 20 7b 24 3a 3a 4d 53 56 43 7d 20 7b 0a   if {$::MSVC} {.
5560: 20 20 20 20 73 65 74 20 6e 6d 61 6b 65 44 69 72      set nmakeDir
5570: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
5580: 65 20 24 3a 3a 53 52 43 44 49 52 5d 0a 20 20 20  e $::SRCDIR].   
5590: 20 73 65 74 20 6e 6d 61 6b 65 46 69 6c 65 20 5b   set nmakeFile [
55a0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename 
55b0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6e 6d 61 6b  [file join $nmak
55c0: 65 44 69 72 20 4d 61 6b 65 66 69 6c 65 2e 6d 73  eDir Makefile.ms
55d0: 63 5d 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  c]].    lappend 
55e0: 72 65 73 75 6c 74 20 6e 6d 61 6b 65 20 2f 66 20  result nmake /f 
55f0: 24 6e 6d 61 6b 65 46 69 6c 65 20 54 4f 50 3d 24  $nmakeFile TOP=$
5600: 6e 6d 61 6b 65 44 69 72 0a 20 20 20 20 73 65 74  nmakeDir.    set
5610: 20 74 63 6c 44 69 72 20 5b 66 69 6c 65 20 6e 61   tclDir [file na
5620: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6e  tivename [file n
5630: 6f 72 6d 61 6c 69 7a 65 20 5c 0a 20 20 20 20 20  ormalize \.     
5640: 20 20 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65     [file dirname
5650: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b   [file dirname [
5660: 69 6e 66 6f 20 6e 61 6d 65 6f 66 65 78 65 63 75  info nameofexecu
5670: 74 61 62 6c 65 5d 5d 5d 5d 5d 0a 20 20 20 20 6c  table]]]]].    l
5680: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 22 54  append result "T
5690: 43 4c 44 49 52 3d 24 74 63 6c 44 69 72 22 0a 20  CLDIR=$tclDir". 
56a0: 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b     if {[regexp {
56b0: 55 53 45 5f 53 54 44 43 41 4c 4c 3d 31 7d 20 24  USE_STDCALL=1} $
56c0: 63 66 6c 61 67 73 5d 7d 20 7b 0a 20 20 20 20 20  cflags]} {.     
56d0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
56e0: 55 53 45 5f 53 54 44 43 41 4c 4c 3d 31 0a 20 20  USE_STDCALL=1.  
56f0: 20 20 7d 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20    }.  } else {. 
5700: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
5710: 74 20 6d 61 6b 65 0a 20 20 7d 0a 20 20 66 6f 72  t make.  }.  for
5720: 65 61 63 68 20 6d 61 6b 65 4f 70 74 20 24 6d 61  each makeOpt $ma
5730: 6b 65 4f 70 74 73 20 7b 0a 20 20 20 20 6c 61 70  keOpts {.    lap
5740: 70 65 6e 64 20 72 65 73 75 6c 74 20 24 6d 61 6b  pend result $mak
5750: 65 4f 70 74 0a 20 20 7d 0a 20 20 6c 61 70 70 65  eOpt.  }.  lappe
5760: 6e 64 20 72 65 73 75 6c 74 20 63 6c 65 61 6e 0a  nd result clean.
5770: 20 20 66 6f 72 65 61 63 68 20 74 61 72 67 65 74    foreach target
5780: 20 24 74 61 72 67 65 74 73 20 7b 0a 20 20 20 20   $targets {.    
5790: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24  lappend result $
57a0: 74 61 72 67 65 74 0a 20 20 7d 0a 20 20 6c 61 70  target.  }.  lap
57b0: 70 65 6e 64 20 72 65 73 75 6c 74 20 43 46 4c 41  pend result CFLA
57c0: 47 53 3d 24 63 66 6c 61 67 73 20 4f 50 54 53 3d  GS=$cflags OPTS=
57d0: 24 6f 70 74 73 0a 7d 0a 0a 23 20 54 68 65 20 66  $opts.}..# The f
57e0: 6f 6c 6c 6f 77 69 6e 67 20 70 72 6f 63 65 64 75  ollowing procedu
57f0: 72 65 20 70 72 69 6e 74 73 20 69 74 73 20 61 72  re prints its ar
5800: 67 75 6d 65 6e 74 73 20 69 66 20 3a 3a 54 52 41  guments if ::TRA
5810: 43 45 20 69 73 20 74 72 75 65 2e 0a 23 20 41 6e  CE is true..# An
5820: 64 20 69 74 20 65 78 65 63 75 74 65 73 20 74 68  d it executes th
5830: 65 20 63 6f 6d 6d 61 6e 64 20 6f 66 20 69 74 73  e command of its
5840: 20 61 72 67 75 6d 65 6e 74 73 20 69 6e 20 74 68   arguments in th
5850: 65 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 74 65 78  e calling contex
5860: 74 0a 23 20 69 66 20 3a 3a 44 52 59 52 55 4e 20  t.# if ::DRYRUN 
5870: 69 73 20 66 61 6c 73 65 2e 0a 23 0a 70 72 6f 63  is false..#.proc
5880: 20 74 72 61 63 65 5f 63 6d 64 20 7b 61 72 67 73   trace_cmd {args
5890: 7d 20 7b 0a 20 20 69 66 20 7b 24 3a 3a 54 52 41  } {.  if {$::TRA
58a0: 43 45 7d 20 7b 0a 20 20 20 20 50 55 54 53 20 24  CE} {.    PUTS $
58b0: 61 72 67 73 0a 20 20 7d 0a 20 20 73 65 74 20 72  args.  }.  set r
58c0: 65 73 20 22 22 0a 20 20 69 66 20 7b 21 24 3a 3a  es "".  if {!$::
58d0: 44 52 59 52 55 4e 7d 20 7b 0a 20 20 20 20 73 65  DRYRUN} {.    se
58e0: 74 20 72 65 73 20 5b 75 70 6c 65 76 65 6c 20 31  t res [uplevel 1
58f0: 20 24 61 72 67 73 5d 0a 20 20 7d 0a 20 20 72 65   $args].  }.  re
5900: 74 75 72 6e 20 24 72 65 73 0a 7d 0a 0a 0a 23 20  turn $res.}...# 
5910: 54 68 69 73 20 70 72 6f 63 20 70 72 6f 63 65 73  This proc proces
5920: 73 65 73 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  ses the command 
5930: 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 70 61 73  line options pas
5940: 73 65 64 20 74 6f 20 74 68 69 73 20 73 63 72 69  sed to this scri
5950: 70 74 2e 0a 23 20 43 75 72 72 65 6e 74 6c 79 20  pt..# Currently 
5960: 74 68 65 20 6f 6e 6c 79 20 6f 70 74 69 6f 6e 20  the only option 
5970: 73 75 70 70 6f 72 74 65 64 20 69 73 20 22 2d 6d  supported is "-m
5980: 61 6b 65 66 69 6c 65 22 2c 20 64 65 66 61 75 6c  akefile", defaul
5990: 74 0a 23 20 22 72 65 6c 65 61 73 65 74 65 73 74  t.# "releasetest
59a0: 2e 6d 6b 22 2e 20 53 65 74 20 74 68 65 20 3a 3a  .mk". Set the ::
59b0: 4d 41 4b 45 46 49 4c 45 20 76 61 72 69 61 62 6c  MAKEFILE variabl
59c0: 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  e to the value o
59d0: 66 20 74 68 69 73 0a 23 20 6f 70 74 69 6f 6e 2e  f this.# option.
59e0: 0a 23 0a 70 72 6f 63 20 70 72 6f 63 65 73 73 5f  .#.proc process_
59f0: 6f 70 74 69 6f 6e 73 20 7b 61 72 67 76 7d 20 7b  options {argv} {
5a00: 0a 20 20 73 65 74 20 3a 3a 53 52 43 44 49 52 20  .  set ::SRCDIR 
5a10: 20 20 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69     [file normali
5a20: 7a 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ze [file dirname
5a30: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24   [file dirname $
5a40: 3a 3a 61 72 67 76 30 5d 5d 5d 0a 20 20 73 65 74  ::argv0]]].  set
5a50: 20 3a 3a 51 55 49 43 4b 20 20 20 20 20 20 20 20   ::QUICK        
5a60: 20 20 30 0a 20 20 73 65 74 20 3a 3a 4d 53 56 43    0.  set ::MSVC
5a70: 20 20 20 20 20 20 20 20 20 20 20 30 0a 20 20 73             0.  s
5a80: 65 74 20 3a 3a 42 55 49 4c 44 4f 4e 4c 59 20 20  et ::BUILDONLY  
5a90: 20 20 20 20 30 0a 20 20 73 65 74 20 3a 3a 44 52      0.  set ::DR
5aa0: 59 52 55 4e 20 20 20 20 20 20 20 20 20 30 0a 20  YRUN         0. 
5ab0: 20 73 65 74 20 3a 3a 54 52 41 43 45 20 20 20 20   set ::TRACE    
5ac0: 20 20 20 20 20 20 30 0a 20 20 73 65 74 20 3a 3a        0.  set ::
5ad0: 4a 4f 42 53 20 20 20 20 20 20 20 20 20 20 20 31  JOBS           1
5ae0: 0a 20 20 73 65 74 20 3a 3a 50 52 4f 47 52 45 53  .  set ::PROGRES
5af0: 53 5f 4d 53 47 53 20 20 30 0a 20 20 73 65 74 20  S_MSGS  0.  set 
5b00: 3a 3a 57 49 54 48 54 43 4c 20 20 20 20 20 20 20  ::WITHTCL       
5b10: 20 7b 7d 0a 20 20 73 65 74 20 3a 3a 46 4f 52 43   {}.  set ::FORC
5b20: 45 20 20 20 20 20 20 20 20 20 20 30 0a 20 20 73  E          0.  s
5b30: 65 74 20 3a 3a 4b 45 45 50 46 49 4c 45 53 20 20  et ::KEEPFILES  
5b40: 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20 3b      0          ;
5b50: 23 20 4b 65 65 70 20 65 78 74 72 61 20 66 69 6c  # Keep extra fil
5b60: 65 73 20 61 66 74 65 72 20 74 65 73 74 20 72 75  es after test ru
5b70: 6e 0a 20 20 73 65 74 20 63 6f 6e 66 69 67 20 7b  n.  set config {
5b80: 7d 0a 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d  }.  set platform
5b90: 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d   $::tcl_platform
5ba0: 28 6f 73 29 2d 24 3a 3a 74 63 6c 5f 70 6c 61 74  (os)-$::tcl_plat
5bb0: 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 0a 0a 20  form(machine).. 
5bc0: 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b   for {set i 0} {
5bd0: 24 69 20 3c 20 5b 6c 6c 65 6e 67 74 68 20 24 61  $i < [llength $a
5be0: 72 67 76 5d 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  rgv]} {incr i} {
5bf0: 0a 20 20 20 20 73 65 74 20 78 20 5b 6c 69 6e 64  .    set x [lind
5c00: 65 78 20 24 61 72 67 76 20 24 69 5d 0a 20 20 20  ex $argv $i].   
5c10: 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 2d   if {[regexp {^-
5c20: 2d 5b 61 2d 7a 5d 7d 20 24 78 5d 7d 20 7b 73 65  -[a-z]} $x]} {se
5c30: 74 20 78 20 5b 73 74 72 69 6e 67 20 72 61 6e 67  t x [string rang
5c40: 65 20 24 78 20 31 20 65 6e 64 5d 7d 0a 20 20 20  e $x 1 end]}.   
5c50: 20 73 77 69 74 63 68 20 2d 67 6c 6f 62 20 2d 2d   switch -glob --
5c60: 20 24 78 20 7b 0a 20 20 20 20 20 20 2d 73 6c 61   $x {.      -sla
5c70: 76 65 20 7b 0a 20 20 20 20 20 20 20 20 72 75 6e  ve {.        run
5c80: 5f 73 6c 61 76 65 5f 74 65 73 74 0a 20 20 20 20  _slave_test.    
5c90: 20 20 20 20 65 78 69 74 0a 20 20 20 20 20 20 7d      exit.      }
5ca0: 0a 0a 20 20 20 20 20 20 23 20 55 6e 64 6f 63 75  ..      # Undocu
5cb0: 6d 65 6e 74 65 64 20 6c 65 67 61 63 79 20 6f 70  mented legacy op
5cc0: 74 69 6f 6e 3a 20 2d 2d 73 72 63 64 69 72 20 44  tion: --srcdir D
5cd0: 49 52 45 43 54 4f 52 59 0a 20 20 20 20 20 20 23  IRECTORY.      #
5ce0: 0a 20 20 20 20 20 20 23 20 44 49 52 45 43 54 4f  .      # DIRECTO
5cf0: 52 59 20 69 73 20 74 68 65 20 72 6f 6f 74 20 6f  RY is the root o
5d00: 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 68 65  f the SQLite che
5d10: 63 6b 6f 75 74 2e 20 20 54 68 69 73 20 73 65 74  ckout.  This set
5d20: 73 20 74 68 65 0a 20 20 20 20 20 20 23 20 53 52  s the.      # SR
5d30: 43 44 49 52 20 67 6c 6f 62 61 6c 20 76 61 72 69  CDIR global vari
5d40: 61 62 6c 65 2e 20 20 42 75 74 20 74 68 61 74 20  able.  But that 
5d50: 76 61 72 69 61 62 6c 65 20 69 73 20 61 6c 72 65  variable is alre
5d60: 61 64 79 20 73 65 74 0a 20 20 20 20 20 20 23 20  ady set.      # 
5d70: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 6f  automatically so
5d80: 20 74 68 65 72 65 20 72 65 61 6c 6c 79 20 69 73   there really is
5d90: 20 6e 6f 20 72 65 61 73 6f 6e 20 74 6f 20 68 61   no reason to ha
5da0: 76 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 2e 0a  ve this option..
5db0: 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 2d 73        #.      -s
5dc0: 72 63 64 69 72 20 7b 0a 20 20 20 20 20 20 20 20  rcdir {.        
5dd0: 69 6e 63 72 20 69 0a 20 20 20 20 20 20 20 20 73  incr i.        s
5de0: 65 74 20 3a 3a 53 52 43 44 49 52 20 5b 66 69 6c  et ::SRCDIR [fil
5df0: 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 6c 69 6e  e normalize [lin
5e00: 64 65 78 20 24 61 72 67 76 20 24 69 5d 5d 0a 20  dex $argv $i]]. 
5e10: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d 70       }..      -p
5e20: 6c 61 74 66 6f 72 6d 20 7b 0a 20 20 20 20 20 20  latform {.      
5e30: 20 20 69 6e 63 72 20 69 0a 20 20 20 20 20 20 20    incr i.       
5e40: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 6c   set platform [l
5e50: 69 6e 64 65 78 20 24 61 72 67 76 20 24 69 5d 0a  index $argv $i].
5e60: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d        }..      -
5e70: 6a 6f 62 73 20 7b 0a 20 20 20 20 20 20 20 20 69  jobs {.        i
5e80: 6e 63 72 20 69 0a 20 20 20 20 20 20 20 20 73 65  ncr i.        se
5e90: 74 20 3a 3a 4a 4f 42 53 20 5b 6c 69 6e 64 65 78  t ::JOBS [lindex
5ea0: 20 24 61 72 67 76 20 24 69 5d 0a 20 20 20 20 20   $argv $i].     
5eb0: 20 7d 0a 0a 20 20 20 20 20 20 2d 70 72 6f 67 72   }..      -progr
5ec0: 65 73 73 20 7b 0a 20 20 20 20 20 20 20 20 73 65  ess {.        se
5ed0: 74 20 3a 3a 50 52 4f 47 52 45 53 53 5f 4d 53 47  t ::PROGRESS_MSG
5ee0: 53 20 31 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  S 1.      }..   
5ef0: 20 20 20 2d 71 75 69 63 6b 20 7b 0a 20 20 20 20     -quick {.    
5f00: 20 20 20 20 73 65 74 20 3a 3a 51 55 49 43 4b 20      set ::QUICK 
5f10: 31 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  1.      }.      
5f20: 2d 76 65 72 79 71 75 69 63 6b 20 7b 0a 20 20 20  -veryquick {.   
5f30: 20 20 20 20 20 73 65 74 20 3a 3a 51 55 49 43 4b       set ::QUICK
5f40: 20 32 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20   2.      }..    
5f50: 20 20 2d 63 6f 6e 66 69 67 20 7b 0a 20 20 20 20    -config {.    
5f60: 20 20 20 20 69 6e 63 72 20 69 0a 20 20 20 20 20      incr i.     
5f70: 20 20 20 73 65 74 20 63 6f 6e 66 69 67 20 5b 6c     set config [l
5f80: 69 6e 64 65 78 20 24 61 72 67 76 20 24 69 5d 0a  index $argv $i].
5f90: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d        }..      -
5fa0: 6d 73 76 63 20 7b 0a 20 20 20 20 20 20 20 20 73  msvc {.        s
5fb0: 65 74 20 3a 3a 4d 53 56 43 20 31 0a 20 20 20 20  et ::MSVC 1.    
5fc0: 20 20 7d 0a 0a 20 20 20 20 20 20 2d 62 75 69 6c    }..      -buil
5fd0: 64 6f 6e 6c 79 20 7b 0a 20 20 20 20 20 20 20 20  donly {.        
5fe0: 73 65 74 20 3a 3a 42 55 49 4c 44 4f 4e 4c 59 20  set ::BUILDONLY 
5ff0: 31 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  1.      }..     
6000: 20 2d 64 72 79 72 75 6e 20 7b 0a 20 20 20 20 20   -dryrun {.     
6010: 20 20 20 73 65 74 20 3a 3a 44 52 59 52 55 4e 20     set ::DRYRUN 
6020: 31 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  1.      }..     
6030: 20 2d 66 6f 72 63 65 20 2d 0a 20 20 20 20 20 20   -force -.      
6040: 2d 66 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  -f {.        set
6050: 20 3a 3a 46 4f 52 43 45 20 31 0a 20 20 20 20 20   ::FORCE 1.     
6060: 20 7d 0a 0a 20 20 20 20 20 20 2d 74 72 61 63 65   }..      -trace
6070: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a   {.        set :
6080: 3a 54 52 41 43 45 20 31 0a 20 20 20 20 20 20 7d  :TRACE 1.      }
6090: 0a 0a 20 20 20 20 20 20 2d 69 6e 66 6f 20 7b 0a  ..      -info {.
60a0: 20 20 20 20 20 20 20 20 50 55 54 53 20 22 43 6f          PUTS "Co
60b0: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 4f 70 74 69 6f  mmand-line Optio
60c0: 6e 73 3a 22 0a 20 20 20 20 20 20 20 20 50 55 54  ns:".        PUT
60d0: 53 20 22 20 20 20 2d 2d 73 72 63 64 69 72 20 24  S "   --srcdir $
60e0: 3a 3a 53 52 43 44 49 52 22 0a 20 20 20 20 20 20  ::SRCDIR".      
60f0: 20 20 50 55 54 53 20 22 20 20 20 2d 2d 70 6c 61    PUTS "   --pla
6100: 74 66 6f 72 6d 20 5b 6c 69 73 74 20 24 70 6c 61  tform [list $pla
6110: 74 66 6f 72 6d 5d 22 0a 20 20 20 20 20 20 20 20  tform]".        
6120: 50 55 54 53 20 22 20 20 20 2d 2d 63 6f 6e 66 69  PUTS "   --confi
6130: 67 20 5b 6c 69 73 74 20 24 63 6f 6e 66 69 67 5d  g [list $config]
6140: 22 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 3a  ".        if {$:
6150: 3a 51 55 49 43 4b 7d 20 7b 0a 20 20 20 20 20 20  :QUICK} {.      
6160: 20 20 20 20 69 66 20 7b 24 3a 3a 51 55 49 43 4b      if {$::QUICK
6170: 3d 3d 31 7d 20 7b 50 55 54 53 20 22 20 20 20 2d  ==1} {PUTS "   -
6180: 2d 71 75 69 63 6b 22 7d 0a 20 20 20 20 20 20 20  -quick"}.       
6190: 20 20 20 69 66 20 7b 24 3a 3a 51 55 49 43 4b 3d     if {$::QUICK=
61a0: 3d 32 7d 20 7b 50 55 54 53 20 22 20 20 20 2d 2d  =2} {PUTS "   --
61b0: 76 65 72 79 71 75 69 63 6b 22 7d 0a 20 20 20 20  veryquick"}.    
61c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
61d0: 20 7b 24 3a 3a 4d 53 56 43 7d 20 20 20 20 20 20   {$::MSVC}      
61e0: 7b 50 55 54 53 20 22 20 20 20 2d 2d 6d 73 76 63  {PUTS "   --msvc
61f0: 22 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24  "}.        if {$
6200: 3a 3a 42 55 49 4c 44 4f 4e 4c 59 7d 20 7b 50 55  ::BUILDONLY} {PU
6210: 54 53 20 22 20 20 20 2d 2d 62 75 69 6c 64 6f 6e  TS "   --buildon
6220: 6c 79 22 7d 0a 20 20 20 20 20 20 20 20 69 66 20  ly"}.        if 
6230: 7b 24 3a 3a 44 52 59 52 55 4e 7d 20 20 20 20 7b  {$::DRYRUN}    {
6240: 50 55 54 53 20 22 20 20 20 2d 2d 64 72 79 72 75  PUTS "   --dryru
6250: 6e 22 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  n"}.        if {
6260: 24 3a 3a 54 52 41 43 45 7d 20 20 20 20 20 7b 50  $::TRACE}     {P
6270: 55 54 53 20 22 20 20 20 2d 2d 74 72 61 63 65 22  UTS "   --trace"
6280: 7d 0a 20 20 20 20 20 20 20 20 50 55 54 53 20 22  }.        PUTS "
6290: 5c 6e 41 76 61 69 6c 61 62 6c 65 20 2d 2d 70 6c  \nAvailable --pl
62a0: 61 74 66 6f 72 6d 20 6f 70 74 69 6f 6e 73 3a 22  atform options:"
62b0: 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
62c0: 20 79 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79   y [lsort [array
62d0: 20 6e 61 6d 65 73 20 3a 3a 50 6c 61 74 66 6f 72   names ::Platfor
62e0: 6d 73 5d 5d 20 7b 0a 20 20 20 20 20 20 20 20 20  ms]] {.         
62f0: 20 50 55 54 53 20 22 20 20 20 5b 6c 69 73 74 20   PUTS "   [list 
6300: 24 79 5d 22 0a 20 20 20 20 20 20 20 20 7d 0a 20  $y]".        }. 
6310: 20 20 20 20 20 20 20 50 55 54 53 20 22 5c 6e 41         PUTS "\nA
6320: 76 61 69 6c 61 62 6c 65 20 2d 2d 63 6f 6e 66 69  vailable --confi
6330: 67 20 6f 70 74 69 6f 6e 73 3a 22 0a 20 20 20 20  g options:".    
6340: 20 20 20 20 66 6f 72 65 61 63 68 20 79 20 5b 6c      foreach y [l
6350: 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61 6d 65  sort [array name
6360: 73 20 3a 3a 43 6f 6e 66 69 67 73 5d 5d 20 7b 0a  s ::Configs]] {.
6370: 20 20 20 20 20 20 20 20 20 20 50 55 54 53 20 22            PUTS "
6380: 20 20 20 5b 6c 69 73 74 20 24 79 5d 22 0a 20 20     [list $y]".  
6390: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
63a0: 65 78 69 74 0a 20 20 20 20 20 20 7d 0a 0a 20 20  exit.      }..  
63b0: 20 20 20 20 2d 67 20 7b 0a 20 20 20 20 20 20 20      -g {.       
63c0: 20 6c 61 70 70 65 6e 64 20 3a 3a 45 58 54 52 41   lappend ::EXTRA
63d0: 43 4f 4e 46 49 47 20 5b 6c 69 6e 64 65 78 20 24  CONFIG [lindex $
63e0: 61 72 67 76 20 24 69 5d 0a 20 20 20 20 20 20 7d  argv $i].      }
63f0: 0a 0a 20 20 20 20 20 20 2d 6b 65 65 70 20 7b 0a  ..      -keep {.
6400: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 4b 45          set ::KE
6410: 45 50 46 49 4c 45 53 20 31 0a 20 20 20 20 20 20  EPFILES 1.      
6420: 7d 0a 0a 20 20 20 20 20 20 2d 77 69 74 68 2d 74  }..      -with-t
6430: 63 6c 3d 2a 20 7b 0a 20 20 20 20 20 20 20 20 73  cl=* {.        s
6440: 65 74 20 3a 3a 57 49 54 48 54 43 4c 20 2d 24 78  et ::WITHTCL -$x
6450: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
6460: 2d 44 2a 20 2d 0a 20 20 20 20 20 20 2d 4f 2a 20  -D* -.      -O* 
6470: 2d 0a 20 20 20 20 20 20 2d 65 6e 61 62 6c 65 2d  -.      -enable-
6480: 2a 20 2d 0a 20 20 20 20 20 20 2d 64 69 73 61 62  * -.      -disab
6490: 6c 65 2d 2a 20 2d 0a 20 20 20 20 20 20 2a 3d 2a  le-* -.      *=*
64a0: 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65   {.        lappe
64b0: 6e 64 20 3a 3a 45 58 54 52 41 43 4f 4e 46 49 47  nd ::EXTRACONFIG
64c0: 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20 24   [lindex $argv $
64d0: 69 5d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  i].      }..    
64e0: 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20    default {.    
64f0: 20 20 20 20 50 55 54 53 45 52 52 20 22 22 0a 20      PUTSERR "". 
6500: 20 20 20 20 20 20 20 50 55 54 53 45 52 52 20 5b         PUTSERR [
6510: 73 74 72 69 6e 67 20 74 72 69 6d 20 24 3a 3a 55  string trim $::U
6520: 53 41 47 45 5f 4d 45 53 53 41 47 45 5d 0a 20 20  SAGE_MESSAGE].  
6530: 20 20 20 20 20 20 65 78 69 74 20 2d 31 0a 20 20        exit -1.  
6540: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
6550: 0a 20 20 69 66 20 7b 30 3d 3d 5b 69 6e 66 6f 20  .  if {0==[info 
6560: 65 78 69 73 74 73 20 3a 3a 50 6c 61 74 66 6f 72  exists ::Platfor
6570: 6d 73 28 24 70 6c 61 74 66 6f 72 6d 29 5d 7d 20  ms($platform)]} 
6580: 7b 0a 20 20 20 20 50 55 54 53 20 22 55 6e 6b 6e  {.    PUTS "Unkn
6590: 6f 77 6e 20 70 6c 61 74 66 6f 72 6d 3a 20 24 70  own platform: $p
65a0: 6c 61 74 66 6f 72 6d 22 0a 20 20 20 20 50 55 54  latform".    PUT
65b0: 53 4e 4e 4c 20 22 53 65 74 20 74 68 65 20 2d 70  SNNL "Set the -p
65c0: 6c 61 74 66 6f 72 6d 20 6f 70 74 69 6f 6e 20 74  latform option t
65d0: 6f 20 22 0a 20 20 20 20 73 65 74 20 70 72 69 6e  o ".    set prin
65e0: 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72  t [list].    for
65f0: 65 61 63 68 20 70 20 5b 61 72 72 61 79 20 6e 61  each p [array na
6600: 6d 65 73 20 3a 3a 50 6c 61 74 66 6f 72 6d 73 5d  mes ::Platforms]
6610: 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64   {.      lappend
6620: 20 70 72 69 6e 74 20 22 5c 22 24 70 5c 22 22 0a   print "\"$p\"".
6630: 20 20 20 20 7d 0a 20 20 20 20 6c 73 65 74 20 70      }.    lset p
6640: 72 69 6e 74 20 65 6e 64 20 22 6f 72 20 5b 6c 69  rint end "or [li
6650: 6e 64 65 78 20 24 70 72 69 6e 74 20 65 6e 64 5d  ndex $print end]
6660: 22 0a 20 20 20 20 50 55 54 53 20 22 5b 6a 6f 69  ".    PUTS "[joi
6670: 6e 20 24 70 72 69 6e 74 20 7b 2c 20 7d 5d 2e 22  n $print {, }]."
6680: 0a 20 20 20 20 65 78 69 74 0a 20 20 7d 0a 0a 20  .    exit.  }.. 
6690: 20 69 66 20 7b 24 63 6f 6e 66 69 67 21 3d 22 22   if {$config!=""
66a0: 7d 20 7b 0a 20 20 20 20 69 66 20 7b 5b 6c 6c 65  } {.    if {[lle
66b0: 6e 67 74 68 20 24 63 6f 6e 66 69 67 5d 3d 3d 31  ngth $config]==1
66c0: 7d 20 7b 6c 61 70 70 65 6e 64 20 63 6f 6e 66 69  } {lappend confi
66d0: 67 20 66 75 6c 6c 74 65 73 74 7d 0a 20 20 20 20  g fulltest}.    
66e0: 73 65 74 20 3a 3a 43 4f 4e 46 49 47 4c 49 53 54  set ::CONFIGLIST
66f0: 20 24 63 6f 6e 66 69 67 0a 20 20 7d 20 65 6c 73   $config.  } els
6700: 65 20 7b 0a 20 20 20 20 69 66 20 7b 24 3a 3a 4a  e {.    if {$::J
6710: 4f 42 53 3e 31 7d 20 7b 0a 20 20 20 20 20 20 73  OBS>1} {.      s
6720: 65 74 20 3a 3a 43 4f 4e 46 49 47 4c 49 53 54 20  et ::CONFIGLIST 
6730: 7b 7d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  {}.      foreach
6740: 20 7b 74 61 72 67 65 74 20 7a 43 6f 6e 66 69 67   {target zConfig
6750: 7d 20 5b 6c 72 65 76 65 72 73 65 20 24 3a 3a 50  } [lreverse $::P
6760: 6c 61 74 66 6f 72 6d 73 28 24 70 6c 61 74 66 6f  latforms($platfo
6770: 72 6d 29 5d 20 7b 0a 20 20 20 20 20 20 20 20 61  rm)] {.        a
6780: 70 70 65 6e 64 20 3a 3a 43 4f 4e 46 49 47 4c 49  ppend ::CONFIGLI
6790: 53 54 20 5b 66 6f 72 6d 61 74 20 22 20 20 20 20  ST [format "    
67a0: 25 2d 32 35 73 20 25 73 5c 6e 22 20 5c 0a 20 20  %-25s %s\n" \.  
67b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69               [li
67d0: 73 74 20 24 7a 43 6f 6e 66 69 67 5d 20 5b 6c 69  st $zConfig] [li
67e0: 73 74 20 24 74 61 72 67 65 74 5d 5d 0a 20 20 20  st $target]].   
67f0: 20 20 20 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20     }.    } else 
6800: 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 43 4f  {.      set ::CO
6810: 4e 46 49 47 4c 49 53 54 20 24 3a 3a 50 6c 61 74  NFIGLIST $::Plat
6820: 66 6f 72 6d 73 28 24 70 6c 61 74 66 6f 72 6d 29  forms($platform)
6830: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 50 55 54  .    }.  }.  PUT
6840: 53 20 22 52 75 6e 6e 69 6e 67 20 74 68 65 20 66  S "Running the f
6850: 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 20 63 6f  ollowing test co
6860: 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 66 6f 72  nfigurations for
6870: 20 24 70 6c 61 74 66 6f 72 6d 3a 22 0a 20 20 50   $platform:".  P
6880: 55 54 53 20 22 20 20 20 20 5b 73 74 72 69 6e 67  UTS "    [string
6890: 20 74 72 69 6d 20 24 3a 3a 43 4f 4e 46 49 47 4c   trim $::CONFIGL
68a0: 49 53 54 5d 22 0a 20 20 50 55 54 53 4e 4e 4c 20  IST]".  PUTSNNL 
68b0: 22 46 6c 61 67 73 3a 22 0a 20 20 69 66 20 7b 24  "Flags:".  if {$
68c0: 3a 3a 50 52 4f 47 52 45 53 53 5f 4d 53 47 53 7d  ::PROGRESS_MSGS}
68d0: 20 7b 50 55 54 53 4e 4e 4c 20 22 20 2d 2d 70 72   {PUTSNNL " --pr
68e0: 6f 67 72 65 73 73 22 7d 0a 20 20 69 66 20 7b 24  ogress"}.  if {$
68f0: 3a 3a 44 52 59 52 55 4e 7d 20 7b 50 55 54 53 4e  ::DRYRUN} {PUTSN
6900: 4e 4c 20 22 20 2d 2d 64 72 79 72 75 6e 22 7d 0a  NL " --dryrun"}.
6910: 20 20 69 66 20 7b 24 3a 3a 42 55 49 4c 44 4f 4e    if {$::BUILDON
6920: 4c 59 7d 20 7b 50 55 54 53 4e 4e 4c 20 22 20 2d  LY} {PUTSNNL " -
6930: 2d 62 75 69 6c 64 6f 6e 6c 79 22 7d 0a 20 20 69  -buildonly"}.  i
6940: 66 20 7b 24 3a 3a 4d 53 56 43 7d 20 7b 50 55 54  f {$::MSVC} {PUT
6950: 53 4e 4e 4c 20 22 20 2d 2d 6d 73 76 63 22 7d 0a  SNNL " --msvc"}.
6960: 20 20 73 77 69 74 63 68 20 2d 2d 20 24 3a 3a 51    switch -- $::Q
6970: 55 49 43 4b 20 7b 0a 20 20 20 20 20 31 20 7b 50  UICK {.     1 {P
6980: 55 54 53 4e 4e 4c 20 22 20 2d 2d 71 75 69 63 6b  UTSNNL " --quick
6990: 22 7d 0a 20 20 20 20 20 32 20 7b 50 55 54 53 4e  "}.     2 {PUTSN
69a0: 4e 4c 20 22 20 2d 2d 76 65 72 79 71 75 69 63 6b  NL " --veryquick
69b0: 22 7d 0a 20 20 7d 0a 20 20 69 66 20 7b 24 3a 3a  "}.  }.  if {$::
69c0: 4a 4f 42 53 3e 31 7d 20 7b 50 55 54 53 4e 4e 4c  JOBS>1} {PUTSNNL
69d0: 20 22 20 2d 2d 6a 6f 62 73 20 24 3a 3a 4a 4f 42   " --jobs $::JOB
69e0: 53 22 7d 0a 20 20 50 55 54 53 20 22 22 0a 7d 0a  S"}.  PUTS "".}.
69f0: 0a 23 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .# Check to see 
6a00: 69 66 20 74 68 65 72 65 20 61 72 65 20 75 6e 63  if there are unc
6a10: 6f 6d 6d 69 74 74 65 64 20 63 68 61 6e 67 65 73  ommitted changes
6a20: 20 69 6e 20 74 68 65 20 53 51 4c 69 74 65 20 73   in the SQLite s
6a30: 6f 75 72 63 65 0a 23 20 63 68 65 63 6b 6f 75 74  ource.# checkout
6a40: 2e 20 20 45 78 69 74 20 69 66 20 74 68 65 72 65  .  Exit if there
6a50: 20 61 72 65 2e 20 20 45 78 63 65 70 74 3a 20 20   are.  Except:  
6a60: 44 6f 20 6e 6f 74 68 69 6e 67 20 69 66 20 74 68  Do nothing if th
6a70: 65 20 2d 2d 66 6f 72 63 65 0a 23 20 66 6c 61 67  e --force.# flag
6a80: 20 69 73 20 75 73 65 64 2e 20 20 41 6c 73 6f 2c   is used.  Also,
6a90: 20 69 67 6e 6f 72 65 20 74 68 69 73 20 74 65 73   ignore this tes
6aa0: 74 20 69 66 20 74 68 65 20 66 6f 73 73 69 6c 20  t if the fossil 
6ab0: 62 69 6e 61 72 79 20 69 73 0a 23 20 75 6e 61 76  binary is.# unav
6ac0: 61 69 6c 61 62 6c 65 2c 20 6f 72 20 69 66 20 74  ailable, or if t
6ad0: 68 65 20 73 6f 75 72 63 65 20 74 72 65 65 20 69  he source tree i
6ae0: 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 66 6f  s not a valid fo
6af0: 73 73 69 6c 20 63 68 65 63 6b 6f 75 74 2e 0a 23  ssil checkout..#
6b00: 0a 70 72 6f 63 20 63 68 65 63 6b 5f 75 6e 63 6f  .proc check_unco
6b10: 6d 6d 69 74 74 65 64 20 7b 7d 20 7b 0a 20 20 69  mmitted {} {.  i
6b20: 66 20 7b 24 3a 3a 46 4f 52 43 45 7d 20 72 65 74  f {$::FORCE} ret
6b30: 75 72 6e 0a 20 20 73 65 74 20 70 77 64 20 5b 70  urn.  set pwd [p
6b40: 77 64 5d 0a 20 20 63 64 20 24 3a 3a 53 52 43 44  wd].  cd $::SRCD
6b50: 49 52 0a 20 20 69 66 20 7b 5b 63 61 74 63 68 20  IR.  if {[catch 
6b60: 7b 65 78 65 63 20 66 6f 73 73 69 6c 20 63 68 61  {exec fossil cha
6b70: 6e 67 65 73 7d 20 72 65 73 5d 3d 3d 30 20 26 26  nges} res]==0 &&
6b80: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 72   [string trim $r
6b90: 65 73 5d 21 3d 22 22 7d 20 7b 0a 20 20 20 20 70  es]!=""} {.    p
6ba0: 75 74 73 20 22 45 52 52 4f 52 3a 20 54 68 65 20  uts "ERROR: The 
6bb0: 63 68 65 63 6b 2d 6f 75 74 20 63 6f 6e 74 61 69  check-out contai
6bc0: 6e 73 20 75 6e 63 6f 6d 6d 69 74 74 65 64 20 63  ns uncommitted c
6bd0: 68 61 6e 67 65 73 3a 22 0a 20 20 20 20 70 75 74  hanges:".    put
6be0: 73 20 24 72 65 73 0a 20 20 20 20 70 75 74 73 20  s $res.    puts 
6bf0: 22 55 73 65 20 74 68 65 20 2d 66 20 6f 72 20 2d  "Use the -f or -
6c00: 2d 66 6f 72 63 65 20 6f 70 74 69 6f 6e 73 20 74  -force options t
6c10: 6f 20 6f 76 65 72 72 69 64 65 22 0a 20 20 20 20  o override".    
6c20: 65 78 69 74 20 31 0a 20 20 7d 0a 20 20 63 64 20  exit 1.  }.  cd 
6c30: 24 70 77 64 0a 7d 0a 0a 23 20 41 20 74 65 73 74  $pwd.}..# A test
6c40: 20 72 75 6e 20 68 61 73 20 6a 75 73 74 20 66 69   run has just fi
6c50: 6e 69 73 68 65 64 20 69 6e 20 64 69 72 65 63 74  nished in direct
6c60: 6f 72 79 20 24 64 69 72 2e 20 54 68 69 73 20 63  ory $dir. This c
6c70: 6f 6d 6d 61 6e 64 20 64 65 6c 65 74 65 73 20 61  ommand deletes a
6c80: 6c 6c 0a 23 20 6e 6f 6e 2d 65 73 73 65 6e 74 69  ll.# non-essenti
6c90: 61 6c 20 66 69 6c 65 73 20 66 72 6f 6d 20 74 68  al files from th
6ca0: 65 20 64 69 72 65 63 74 6f 72 79 2e 20 53 70 65  e directory. Spe
6cb0: 63 69 66 69 63 61 6c 6c 79 2c 20 65 76 65 72 79  cifically, every
6cc0: 74 68 69 6e 67 20 65 78 63 65 70 74 0a 23 0a 23  thing except.#.#
6cd0: 20 20 20 2a 20 54 68 65 20 22 74 65 73 74 66 69     * The "testfi
6ce0: 78 74 75 72 65 22 20 61 6e 64 20 22 73 71 6c 69  xture" and "sqli
6cf0: 74 65 33 22 20 62 69 6e 61 72 69 65 73 2c 0a 23  te3" binaries,.#
6d00: 20 20 20 2a 20 54 68 65 20 22 74 65 73 74 2d 6f     * The "test-o
6d10: 75 74 2e 6c 6f 67 22 20 61 6e 64 20 22 74 65 73  ut.log" and "tes
6d20: 74 2e 6c 6f 67 22 20 6c 6f 67 20 66 69 6c 65 73  t.log" log files
6d30: 2e 0a 23 0a 70 72 6f 63 20 63 6c 65 61 6e 75 70  ..#.proc cleanup
6d40: 20 7b 64 69 72 7d 20 7b 0a 20 20 73 65 74 20 4b   {dir} {.  set K
6d50: 28 74 65 73 74 66 69 78 74 75 72 65 29 20 31 0a  (testfixture) 1.
6d60: 20 20 73 65 74 20 4b 28 74 65 73 74 66 69 78 74    set K(testfixt
6d70: 75 72 65 2e 65 78 65 29 20 31 0a 20 20 73 65 74  ure.exe) 1.  set
6d80: 20 4b 28 73 71 6c 69 74 65 33 29 20 31 0a 20 20   K(sqlite3) 1.  
6d90: 73 65 74 20 4b 28 73 71 6c 69 74 65 33 2e 65 78  set K(sqlite3.ex
6da0: 65 29 20 31 0a 20 20 73 65 74 20 4b 28 74 65 73  e) 1.  set K(tes
6db0: 74 2d 6f 75 74 2e 74 78 74 29 20 31 0a 20 20 73  t-out.txt) 1.  s
6dc0: 65 74 20 4b 28 74 65 73 74 2e 6c 6f 67 29 20 31  et K(test.log) 1
6dd0: 0a 0a 20 20 66 6f 72 65 61 63 68 20 66 20 5b 67  ..  foreach f [g
6de0: 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  lob -nocomplain 
6df0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20  [file join $dir 
6e00: 2a 5d 5d 20 7b 0a 20 20 20 20 73 65 74 20 74 61  *]] {.    set ta
6e10: 69 6c 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66  il [file tail $f
6e20: 5d 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20  ].    if {[info 
6e30: 65 78 69 73 74 73 20 4b 28 24 74 61 69 6c 29 5d  exists K($tail)]
6e40: 3d 3d 30 7d 20 7b 20 0a 20 20 20 20 20 20 66 69  ==0} { .      fi
6e50: 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65  le delete -force
6e60: 20 24 66 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a   $f.    }.  }.}.
6e70: 0a 0a 23 20 4d 61 69 6e 20 72 6f 75 74 69 6e 65  ..# Main routine
6e80: 2e 0a 23 0a 70 72 6f 63 20 6d 61 69 6e 20 7b 61  ..#.proc main {a
6e90: 72 67 76 7d 20 7b 0a 0a 20 20 23 20 50 72 6f 63  rgv} {..  # Proc
6ea0: 65 73 73 20 61 6e 79 20 63 6f 6d 6d 61 6e 64 20  ess any command 
6eb0: 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 2e 0a 20 20  line options..  
6ec0: 73 65 74 20 3a 3a 45 58 54 52 41 43 4f 4e 46 49  set ::EXTRACONFI
6ed0: 47 20 7b 7d 0a 20 20 70 72 6f 63 65 73 73 5f 6f  G {}.  process_o
6ee0: 70 74 69 6f 6e 73 20 24 61 72 67 76 0a 20 20 69  ptions $argv.  i
6ef0: 66 20 7b 21 24 3a 3a 44 52 59 52 55 4e 7d 20 63  f {!$::DRYRUN} c
6f00: 68 65 63 6b 5f 75 6e 63 6f 6d 6d 69 74 74 65 64  heck_uncommitted
6f10: 0a 20 20 50 55 54 53 20 5b 73 74 72 69 6e 67 20  .  PUTS [string 
6f20: 72 65 70 65 61 74 20 2a 20 37 39 5d 0a 0a 20 20  repeat * 79]..  
6f30: 73 65 74 20 3a 3a 4e 45 52 52 20 30 0a 20 20 73  set ::NERR 0.  s
6f40: 65 74 20 3a 3a 4e 54 45 53 54 20 30 0a 20 20 73  et ::NTEST 0.  s
6f50: 65 74 20 3a 3a 4e 54 45 53 54 43 41 53 45 20 30  et ::NTESTCASE 0
6f60: 0a 20 20 73 65 74 20 3a 3a 4e 45 52 52 43 41 53  .  set ::NERRCAS
6f70: 45 20 30 0a 20 20 73 65 74 20 3a 3a 53 51 4c 49  E 0.  set ::SQLI
6f80: 54 45 5f 56 45 52 53 49 4f 4e 20 7b 7d 0a 20 20  TE_VERSION {}.  
6f90: 73 65 74 20 53 54 41 52 54 54 49 4d 45 20 5b 63  set STARTTIME [c
6fa0: 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 20 20  lock seconds].  
6fb0: 66 6f 72 65 61 63 68 20 7b 7a 43 6f 6e 66 69 67  foreach {zConfig
6fc0: 20 74 61 72 67 65 74 7d 20 24 3a 3a 43 4f 4e 46   target} $::CONF
6fd0: 49 47 4c 49 53 54 20 7b 0a 20 20 20 20 69 66 20  IGLIST {.    if 
6fe0: 7b 24 3a 3a 4d 53 56 43 20 26 26 20 28 24 7a 43  {$::MSVC && ($zC
6ff0: 6f 6e 66 69 67 20 65 71 20 22 53 61 6e 69 74 69  onfig eq "Saniti
7000: 7a 65 22 20 7c 7c 20 22 63 68 65 63 6b 73 79 6d  ze" || "checksym
7010: 62 6f 6c 73 22 20 69 6e 20 24 74 61 72 67 65 74  bols" in $target
7020: 0a 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 22  .           || "
7030: 76 61 6c 67 72 69 6e 64 74 65 73 74 22 20 69 6e  valgrindtest" in
7040: 20 24 74 61 72 67 65 74 29 7d 20 7b 0a 20 20 20   $target)} {.   
7050: 20 20 20 50 55 54 53 20 22 53 6b 69 70 70 69 6e     PUTS "Skippin
7060: 67 20 24 7a 43 6f 6e 66 69 67 20 2f 20 24 74 61  g $zConfig / $ta
7070: 72 67 65 74 20 66 6f 72 20 4d 53 56 43 2e 2e 2e  rget for MSVC...
7080: 22 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65  ".      continue
7090: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 24  .    }.    if {$
70a0: 74 61 72 67 65 74 20 6e 65 20 22 63 68 65 63 6b  target ne "check
70b0: 73 79 6d 62 6f 6c 73 22 7d 20 7b 0a 20 20 20 20  symbols"} {.    
70c0: 20 20 73 77 69 74 63 68 20 2d 2d 20 24 3a 3a 51    switch -- $::Q
70d0: 55 49 43 4b 20 7b 0a 20 20 20 20 20 20 20 20 20  UICK {.         
70e0: 31 20 7b 73 65 74 20 74 61 72 67 65 74 20 71 75  1 {set target qu
70f0: 69 63 6b 74 65 73 74 7d 0a 20 20 20 20 20 20 20  icktest}.       
7100: 20 20 32 20 7b 73 65 74 20 74 61 72 67 65 74 20    2 {set target 
7110: 73 6d 6f 6b 65 74 65 73 74 7d 0a 20 20 20 20 20  smoketest}.     
7120: 20 7d 0a 20 20 20 20 20 20 69 66 20 7b 24 3a 3a   }.      if {$::
7130: 42 55 49 4c 44 4f 4e 4c 59 7d 20 7b 0a 20 20 20  BUILDONLY} {.   
7140: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 20       set target 
7150: 74 65 73 74 66 69 78 74 75 72 65 0a 20 20 20 20  testfixture.    
7160: 20 20 20 20 69 66 20 7b 24 3a 3a 74 63 6c 5f 70      if {$::tcl_p
7170: 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d  latform(platform
7180: 29 3d 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a  )=="windows"} {.
7190: 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64            append
71a0: 20 74 61 72 67 65 74 20 2e 65 78 65 0a 20 20 20   target .exe.   
71b0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
71c0: 20 20 20 7d 0a 20 20 20 20 73 65 74 20 63 6f 6e     }.    set con
71d0: 66 69 67 5f 6f 70 74 69 6f 6e 73 20 5b 63 6f 6e  fig_options [con
71e0: 63 61 74 20 24 3a 3a 43 6f 6e 66 69 67 73 28 24  cat $::Configs($
71f0: 7a 43 6f 6e 66 69 67 29 20 24 3a 3a 45 58 54 52  zConfig) $::EXTR
7200: 41 43 4f 4e 46 49 47 5d 0a 0a 20 20 20 20 69 6e  ACONFIG]..    in
7210: 63 72 20 4e 54 45 53 54 0a 20 20 20 20 61 64 64  cr NTEST.    add
7220: 5f 74 65 73 74 5f 73 75 69 74 65 20 61 6c 6c 20  _test_suite all 
7230: 24 7a 43 6f 6e 66 69 67 20 24 74 61 72 67 65 74  $zConfig $target
7240: 20 24 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73   $config_options
7250: 0a 0a 20 20 20 20 23 20 49 66 20 74 68 65 20 63  ..    # If the c
7260: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 63  onfiguration inc
7270: 6c 75 64 65 64 20 74 68 65 20 53 51 4c 49 54 45  luded the SQLITE
7280: 5f 44 45 42 55 47 20 6f 70 74 69 6f 6e 2c 20 74  _DEBUG option, t
7290: 68 65 6e 20 72 65 6d 6f 76 65 0a 20 20 20 20 23  hen remove.    #
72a0: 20 69 74 20 61 6e 64 20 72 75 6e 20 76 65 72 79   it and run very
72b0: 71 75 69 63 6b 2e 74 65 73 74 2e 20 49 66 20 69  quick.test. If i
72c0: 74 20 64 69 64 20 6e 6f 74 20 69 6e 63 6c 75 64  t did not includ
72d0: 65 20 74 68 65 20 53 51 4c 49 54 45 5f 44 45 42  e the SQLITE_DEB
72e0: 55 47 20 6f 70 74 69 6f 6e 0a 20 20 20 20 23 20  UG option.    # 
72f0: 61 64 64 20 69 74 20 61 6e 64 20 72 75 6e 20 76  add it and run v
7300: 65 72 79 71 75 69 63 6b 2e 74 65 73 74 2e 0a 20  eryquick.test.. 
7310: 20 20 20 69 66 20 7b 24 74 61 72 67 65 74 21 3d     if {$target!=
7320: 22 63 68 65 63 6b 73 79 6d 62 6f 6c 73 22 20 26  "checksymbols" &
7330: 26 20 24 74 61 72 67 65 74 21 3d 22 76 61 6c 67  & $target!="valg
7340: 72 69 6e 64 74 65 73 74 22 0a 20 20 20 20 20 20  rindtest".      
7350: 20 20 20 20 20 26 26 20 24 74 61 72 67 65 74 21       && $target!
7360: 3d 22 66 75 7a 7a 6f 6f 6d 74 65 73 74 22 20 26  ="fuzzoomtest" &
7370: 26 20 21 24 3a 3a 42 55 49 4c 44 4f 4e 4c 59 20  & !$::BUILDONLY 
7380: 26 26 20 24 3a 3a 51 55 49 43 4b 3c 32 7d 20 7b  && $::QUICK<2} {
7390: 0a 20 20 20 20 20 20 73 65 74 20 64 65 62 75 67  .      set debug
73a0: 5f 69 64 78 20 5b 6c 73 65 61 72 63 68 20 2d 67  _idx [lsearch -g
73b0: 6c 6f 62 20 24 63 6f 6e 66 69 67 5f 6f 70 74 69  lob $config_opti
73c0: 6f 6e 73 20 2d 44 53 51 4c 49 54 45 5f 44 45 42  ons -DSQLITE_DEB
73d0: 55 47 2a 5d 0a 20 20 20 20 20 20 73 65 74 20 78  UG*].      set x
73e0: 74 61 72 67 65 74 20 24 74 61 72 67 65 74 0a 20  target $target. 
73f0: 20 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c       regsub -all
7400: 20 7b 66 75 6c 6c 74 65 73 74 5b 61 2d 7a 5d 2a   {fulltest[a-z]*
7410: 7d 20 24 78 74 61 72 67 65 74 20 74 65 73 74 20  } $xtarget test 
7420: 78 74 61 72 67 65 74 0a 20 20 20 20 20 20 72 65  xtarget.      re
7430: 67 73 75 62 20 2d 61 6c 6c 20 7b 66 75 7a 7a 6f  gsub -all {fuzzo
7440: 6f 6d 74 65 73 74 7d 20 24 78 74 61 72 67 65 74  omtest} $xtarget
7450: 20 66 75 7a 7a 74 65 73 74 20 78 74 61 72 67 65   fuzztest xtarge
7460: 74 0a 20 20 20 20 20 20 69 66 20 7b 24 64 65 62  t.      if {$deb
7470: 75 67 5f 69 64 78 20 3c 20 30 7d 20 7b 0a 20 20  ug_idx < 0} {.  
7480: 20 20 20 20 20 20 69 6e 63 72 20 4e 54 45 53 54        incr NTEST
7490: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20  .        append 
74a0: 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 20 22  config_options "
74b0: 20 2d 44 53 51 4c 49 54 45 5f 44 45 42 55 47 3d   -DSQLITE_DEBUG=
74c0: 31 20 2d 44 53 51 4c 49 54 45 5f 45 58 54 52 41  1 -DSQLITE_EXTRA
74d0: 5f 49 46 4e 55 4c 4c 52 4f 57 3d 31 22 0a 20 20  _IFNULLROW=1".  
74e0: 20 20 20 20 20 20 61 64 64 5f 74 65 73 74 5f 73        add_test_s
74f0: 75 69 74 65 20 61 6c 6c 20 22 24 7b 7a 43 6f 6e  uite all "${zCon
7500: 66 69 67 7d 5f 64 65 62 75 67 22 20 24 78 74 61  fig}_debug" $xta
7510: 72 67 65 74 20 24 63 6f 6e 66 69 67 5f 6f 70 74  rget $config_opt
7520: 69 6f 6e 73 0a 20 20 20 20 20 20 7d 20 65 6c 73  ions.      } els
7530: 65 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 63 72  e {.        incr
7540: 20 4e 54 45 53 54 0a 20 20 20 20 20 20 20 20 72   NTEST.        r
7550: 65 67 73 75 62 20 7b 20 2a 2d 44 53 51 4c 49 54  egsub { *-DSQLIT
7560: 45 5f 4d 45 4d 44 45 42 55 47 5b 5e 20 5d 2a 20  E_MEMDEBUG[^ ]* 
7570: 2a 7d 20 24 63 6f 6e 66 69 67 5f 6f 70 74 69 6f  *} $config_optio
7580: 6e 73 20 7b 20 7d 20 63 6f 6e 66 69 67 5f 6f 70  ns { } config_op
7590: 74 69 6f 6e 73 0a 20 20 20 20 20 20 20 20 72 65  tions.        re
75a0: 67 73 75 62 20 7b 20 2a 2d 44 53 51 4c 49 54 45  gsub { *-DSQLITE
75b0: 5f 44 45 42 55 47 5b 5e 20 5d 2a 20 2a 7d 20 24  _DEBUG[^ ]* *} $
75c0: 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 20 7b  config_options {
75d0: 20 7d 20 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e   } config_option
75e0: 73 0a 20 20 20 20 20 20 20 20 61 64 64 5f 74 65  s.        add_te
75f0: 73 74 5f 73 75 69 74 65 20 61 6c 6c 20 22 24 7b  st_suite all "${
7600: 7a 43 6f 6e 66 69 67 7d 5f 6e 64 65 62 75 67 22  zConfig}_ndebug"
7610: 20 24 78 74 61 72 67 65 74 20 24 63 6f 6e 66 69   $xtarget $confi
7620: 67 5f 6f 70 74 69 6f 6e 73 0a 20 20 20 20 20 20  g_options.      
7630: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 72  }.    }.  }..  r
7640: 75 6e 5f 61 6c 6c 5f 74 65 73 74 5f 73 75 69 74  un_all_test_suit
7650: 65 73 20 24 61 6c 6c 0a 0a 20 20 73 65 74 20 65  es $all..  set e
7660: 6c 61 70 73 65 74 69 6d 65 20 5b 65 78 70 72 20  lapsetime [expr 
7670: 7b 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d  {[clock seconds]
7680: 2d 24 53 54 41 52 54 54 49 4d 45 7d 5d 0a 20 20  -$STARTTIME}].  
7690: 73 65 74 20 68 72 20 5b 65 78 70 72 20 7b 24 65  set hr [expr {$e
76a0: 6c 61 70 73 65 74 69 6d 65 2f 33 36 30 30 7d 5d  lapsetime/3600}]
76b0: 0a 20 20 73 65 74 20 6d 69 6e 20 5b 65 78 70 72  .  set min [expr
76c0: 20 7b 28 24 65 6c 61 70 73 65 74 69 6d 65 2f 36   {($elapsetime/6
76d0: 30 29 25 36 30 7d 5d 0a 20 20 73 65 74 20 73 65  0)%60}].  set se
76e0: 63 20 5b 65 78 70 72 20 7b 24 65 6c 61 70 73 65  c [expr {$elapse
76f0: 74 69 6d 65 25 36 30 7d 5d 0a 20 20 73 65 74 20  time%60}].  set 
7700: 65 74 69 6d 65 20 5b 66 6f 72 6d 61 74 20 28 25  etime [format (%
7710: 30 32 64 3a 25 30 32 64 3a 25 30 32 64 29 20 24  02d:%02d:%02d) $
7720: 68 72 20 24 6d 69 6e 20 24 73 65 63 5d 0a 20 20  hr $min $sec].  
7730: 69 66 20 7b 24 3a 3a 4a 4f 42 53 3e 31 7d 20 7b  if {$::JOBS>1} {
7740: 61 70 70 65 6e 64 20 65 74 69 6d 65 20 22 20 24  append etime " $
7750: 3a 3a 4a 4f 42 53 20 63 6f 72 65 73 22 7d 0a 20  ::JOBS cores"}. 
7760: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65   if {[catch {exe
7770: 63 20 68 6f 73 74 6e 61 6d 65 7d 20 48 4e 41 4d  c hostname} HNAM
7780: 45 5d 3d 3d 30 7d 20 7b 61 70 70 65 6e 64 20 65  E]==0} {append e
7790: 74 69 6d 65 20 22 20 6f 6e 20 24 48 4e 41 4d 45  time " on $HNAME
77a0: 22 7d 0a 20 20 50 55 54 53 20 5b 73 74 72 69 6e  "}.  PUTS [strin
77b0: 67 20 72 65 70 65 61 74 20 2a 20 37 39 5d 0a 20  g repeat * 79]. 
77c0: 20 69 6e 63 72 20 3a 3a 4e 45 52 52 43 41 53 45   incr ::NERRCASE
77d0: 20 24 3a 3a 4e 45 52 52 0a 20 20 50 55 54 53 20   $::NERR.  PUTS 
77e0: 22 24 3a 3a 4e 45 52 52 43 41 53 45 20 66 61 69  "$::NERRCASE fai
77f0: 6c 75 72 65 73 20 6f 75 74 20 6f 66 20 24 3a 3a  lures out of $::
7800: 4e 54 45 53 54 43 41 53 45 20 74 65 73 74 73 20  NTESTCASE tests 
7810: 69 6e 20 24 65 74 69 6d 65 22 0a 20 20 69 66 20  in $etime".  if 
7820: 7b 24 3a 3a 53 51 4c 49 54 45 5f 56 45 52 53 49  {$::SQLITE_VERSI
7830: 4f 4e 20 6e 65 20 22 22 7d 20 7b 0a 20 20 20 20  ON ne ""} {.    
7840: 50 55 54 53 20 22 53 51 4c 69 74 65 20 24 3a 3a  PUTS "SQLite $::
7850: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 22 0a  SQLITE_VERSION".
7860: 20 20 7d 0a 7d 0a 0a 6d 61 69 6e 20 24 61 72 67    }.}..main $arg
7870: 76 0a                                            v.