/ Hex Artifact Content
Login

Artifact cb06c4df0de4872e65b178316f8a87ccf7624d59:


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 7d 0a 20 20 22 53 61 6e 69 74 69 7a 65  .  }.  "Sanitize
07b0: 22 20 7b 0a 20 20 20 20 43 43 3d 63 6c 61 6e 67  " {.    CC=clang
07c0: 20 2d 66 73 61 6e 69 74 69 7a 65 3d 75 6e 64 65   -fsanitize=unde
07d0: 66 69 6e 65 64 0a 20 20 20 20 2d 44 53 51 4c 49  fined.    -DSQLI
07e0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
07f0: 20 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 73 65 73      --enable-ses
0800: 73 69 6f 6e 0a 20 20 7d 0a 20 20 22 53 74 64 63  sion.  }.  "Stdc
0810: 61 6c 6c 22 20 7b 0a 20 20 20 20 2d 44 55 53 45  all" {.    -DUSE
0820: 5f 53 54 44 43 41 4c 4c 3d 31 0a 20 20 20 20 2d  _STDCALL=1.    -
0830: 4f 32 0a 20 20 7d 0a 20 20 22 48 61 76 65 2d 4e  O2.  }.  "Have-N
0840: 6f 74 22 20 7b 0a 20 20 20 20 23 20 54 68 65 20  ot" {.    # The 
0850: 22 48 61 76 65 2d 4e 6f 74 22 20 63 6f 6e 66 69  "Have-Not" confi
0860: 67 75 72 61 74 69 6f 6e 20 73 65 74 73 20 61 6c  guration sets al
0870: 6c 20 70 6f 73 73 69 62 6c 65 20 2d 55 48 41 56  l possible -UHAV
0880: 45 5f 66 65 61 74 75 72 65 20 6f 70 74 69 6f 6e  E_feature option
0890: 73 0a 20 20 20 20 23 20 69 6e 20 6f 72 64 65 72  s.    # in order
08a0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
08b0: 74 68 65 20 63 6f 64 65 20 77 6f 72 6b 73 20 65  the code works e
08c0: 76 65 6e 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  ven on platforms
08d0: 20 74 68 61 74 20 6c 61 63 6b 0a 20 20 20 20 23   that lack.    #
08e0: 20 74 68 65 73 65 20 73 75 70 70 6f 72 74 20 73   these support s
08f0: 65 72 76 69 63 65 73 2e 0a 20 20 20 20 2d 44 48  ervices..    -DH
0900: 41 56 45 5f 46 44 41 54 41 53 59 4e 43 3d 30 0a  AVE_FDATASYNC=0.
0910: 20 20 20 20 2d 44 48 41 56 45 5f 47 4d 54 49 4d      -DHAVE_GMTIM
0920: 45 5f 52 3d 30 0a 20 20 20 20 2d 44 48 41 56 45  E_R=0.    -DHAVE
0930: 5f 49 53 4e 41 4e 3d 30 0a 20 20 20 20 2d 44 48  _ISNAN=0.    -DH
0940: 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f 52 3d  AVE_LOCALTIME_R=
0950: 30 0a 20 20 20 20 2d 44 48 41 56 45 5f 4c 4f 43  0.    -DHAVE_LOC
0960: 41 4c 54 49 4d 45 5f 53 3d 30 0a 20 20 20 20 2d  ALTIME_S=0.    -
0970: 44 48 41 56 45 5f 4d 41 4c 4c 4f 43 5f 55 53 41  DHAVE_MALLOC_USA
0980: 42 4c 45 5f 53 49 5a 45 3d 30 0a 20 20 20 20 2d  BLE_SIZE=0.    -
0990: 44 48 41 56 45 5f 53 54 52 43 48 52 4e 55 4c 3d  DHAVE_STRCHRNUL=
09a0: 30 0a 20 20 20 20 2d 44 48 41 56 45 5f 55 53 4c  0.    -DHAVE_USL
09b0: 45 45 50 3d 30 0a 20 20 20 20 2d 44 48 41 56 45  EEP=0.    -DHAVE
09c0: 5f 55 54 49 4d 45 3d 30 0a 20 20 7d 0a 20 20 22  _UTIME=0.  }.  "
09d0: 55 6e 6c 6f 63 6b 2d 4e 6f 74 69 66 79 22 20 7b  Unlock-Notify" {
09e0: 0a 20 20 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53  .    -O2.    -DS
09f0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
0a00: 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 20 20 2d  OCK_NOTIFY.    -
0a10: 44 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41  DSQLITE_THREADSA
0a20: 46 45 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  FE.    -DSQLITE_
0a30: 54 43 4c 5f 44 45 46 41 55 4c 54 5f 46 55 4c 4c  TCL_DEFAULT_FULL
0a40: 4d 55 54 45 58 3d 31 0a 20 20 7d 0a 20 20 22 53  MUTEX=1.  }.  "S
0a50: 65 63 75 72 65 2d 44 65 6c 65 74 65 22 20 7b 0a  ecure-Delete" {.
0a60: 20 20 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53 51      -O2.    -DSQ
0a70: 4c 49 54 45 5f 53 45 43 55 52 45 5f 44 45 4c 45  LITE_SECURE_DELE
0a80: 54 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  TE=1.    -DSQLIT
0a90: 45 5f 53 4f 55 4e 44 45 58 3d 31 0a 20 20 7d 0a  E_SOUNDEX=1.  }.
0aa0: 20 20 22 55 70 64 61 74 65 2d 44 65 6c 65 74 65    "Update-Delete
0ab0: 2d 4c 69 6d 69 74 22 20 7b 0a 20 20 20 20 2d 4f  -Limit" {.    -O
0ac0: 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44  2.    -DSQLITE_D
0ad0: 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d  EFAULT_FILE_FORM
0ae0: 41 54 3d 34 0a 20 20 20 20 2d 44 53 51 4c 49 54  AT=4.    -DSQLIT
0af0: 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
0b00: 44 45 4c 45 54 45 5f 4c 49 4d 49 54 3d 31 0a 20  DELETE_LIMIT=1. 
0b10: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
0b20: 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
0b30: 55 53 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  US.    -DSQLITE_
0b40: 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54 43  LIKE_DOESNT_MATC
0b50: 48 5f 42 4c 4f 42 53 0a 20 20 20 20 2d 44 53 51  H_BLOBS.    -DSQ
0b60: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
0b70: 4f 52 5f 48 49 4e 54 53 0a 20 20 20 20 2d 2d 65  OR_HINTS.    --e
0b80: 6e 61 62 6c 65 2d 6a 73 6f 6e 31 0a 20 20 7d 0a  nable-json1.  }.
0b90: 20 20 22 43 68 65 63 6b 2d 53 79 6d 62 6f 6c 73    "Check-Symbols
0ba0: 22 20 7b 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  " {.    -DSQLITE
0bb0: 5f 4d 45 4d 44 45 42 55 47 3d 31 0a 20 20 20 20  _MEMDEBUG=1.    
0bc0: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
0bd0: 46 54 53 33 5f 50 41 52 45 4e 54 48 45 53 49 53  FTS3_PARENTHESIS
0be0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
0bf0: 45 4e 41 42 4c 45 5f 46 54 53 33 3d 31 0a 20 20  ENABLE_FTS3=1.  
0c00: 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c    -DSQLITE_ENABL
0c10: 45 5f 52 54 52 45 45 3d 31 0a 20 20 20 20 2d 44  E_RTREE=1.    -D
0c20: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
0c30: 4d 53 59 53 35 3d 31 0a 20 20 20 20 2d 44 53 51  MSYS5=1.    -DSQ
0c40: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
0c50: 59 53 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  YS3=1.    -DSQLI
0c60: 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
0c70: 5f 4d 45 54 41 44 41 54 41 3d 31 0a 20 20 20 20  _METADATA=1.    
0c80: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
0c90: 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
0ca0: 4d 49 54 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  MIT=1.    -DSQLI
0cb0: 54 45 5f 53 45 43 55 52 45 5f 44 45 4c 45 54 45  TE_SECURE_DELETE
0cc0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
0cd0: 53 4f 55 4e 44 45 58 3d 31 0a 20 20 20 20 2d 44  SOUNDEX=1.    -D
0ce0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54  SQLITE_ENABLE_AT
0cf0: 4f 4d 49 43 5f 57 52 49 54 45 3d 31 0a 20 20 20  OMIC_WRITE=1.   
0d00: 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
0d10: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
0d20: 4e 54 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  NT=1.    -DSQLIT
0d30: 45 5f 45 4e 41 42 4c 45 5f 4f 56 45 52 53 49 5a  E_ENABLE_OVERSIZ
0d40: 45 5f 43 45 4c 4c 5f 43 48 45 43 4b 3d 31 0a 20  E_CELL_CHECK=1. 
0d50: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
0d60: 4c 45 5f 53 54 41 54 34 0a 20 20 20 20 2d 44 53  LE_STAT4.    -DS
0d70: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
0d80: 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20  T_SCANSTATUS.   
0d90: 20 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 20   --enable-json1 
0da0: 2d 2d 65 6e 61 62 6c 65 2d 66 74 73 35 20 2d 2d  --enable-fts5 --
0db0: 65 6e 61 62 6c 65 2d 73 65 73 73 69 6f 6e 0a 20  enable-session. 
0dc0: 20 7d 0a 20 20 22 44 65 62 75 67 2d 4f 6e 65 22   }.  "Debug-One"
0dd0: 20 7b 0a 20 20 20 20 2d 2d 64 69 73 61 62 6c 65   {.    --disable
0de0: 2d 73 68 61 72 65 64 0a 20 20 20 20 2d 4f 32 0a  -shared.    -O2.
0df0: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 42      -DSQLITE_DEB
0e00: 55 47 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  UG=1.    -DSQLIT
0e10: 45 5f 4d 45 4d 44 45 42 55 47 3d 31 0a 20 20 20  E_MEMDEBUG=1.   
0e20: 20 2d 44 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f   -DSQLITE_MUTEX_
0e30: 4e 4f 4f 50 3d 31 0a 20 20 20 20 2d 44 53 51 4c  NOOP=1.    -DSQL
0e40: 49 54 45 5f 54 43 4c 5f 44 45 46 41 55 4c 54 5f  ITE_TCL_DEFAULT_
0e50: 46 55 4c 4c 4d 55 54 45 58 3d 31 0a 20 20 20 20  FULLMUTEX=1.    
0e60: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
0e70: 46 54 53 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c  FTS3=1.    -DSQL
0e80: 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45  ITE_ENABLE_RTREE
0e90: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
0ea0: 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 3d 31  ENABLE_MEMSYS5=1
0eb0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e  .    -DSQLITE_EN
0ec0: 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41  ABLE_COLUMN_META
0ed0: 44 41 54 41 3d 31 0a 20 20 20 20 2d 44 53 51 4c  DATA=1.    -DSQL
0ee0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
0ef0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e  .    -DSQLITE_EN
0f00: 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55  ABLE_HIDDEN_COLU
0f10: 4d 4e 53 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  MNS.    -DSQLITE
0f20: 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3d 31 32  _MAX_ATTACHED=12
0f30: 35 0a 20 20 7d 0a 20 20 22 46 61 73 74 2d 4f 6e  5.  }.  "Fast-On
0f40: 65 22 20 7b 0a 20 20 20 20 2d 4f 36 0a 20 20 20  e" {.    -O6.   
0f50: 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
0f60: 5f 46 54 53 34 3d 31 0a 20 20 20 20 2d 44 53 51  _FTS4=1.    -DSQ
0f70: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45  LITE_ENABLE_RTRE
0f80: 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  E=1.    -DSQLITE
0f90: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 20 20  _ENABLE_STAT4.  
0fa0: 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c    -DSQLITE_ENABL
0fb0: 45 5f 52 42 55 0a 20 20 20 20 2d 44 53 51 4c 49  E_RBU.    -DSQLI
0fc0: 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3d  TE_MAX_ATTACHED=
0fd0: 31 32 35 0a 20 20 20 20 2d 44 4c 4f 4e 47 44 4f  125.    -DLONGDO
0fe0: 55 42 4c 45 5f 54 59 50 45 3d 64 6f 75 62 6c 65  UBLE_TYPE=double
0ff0: 0a 20 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 73 65  .    --enable-se
1000: 73 73 69 6f 6e 0a 20 20 7d 0a 20 20 22 44 65 76  ssion.  }.  "Dev
1010: 69 63 65 2d 4f 6e 65 22 20 7b 0a 20 20 20 20 2d  ice-One" {.    -
1020: 4f 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  O2.    -DSQLITE_
1030: 44 45 42 55 47 3d 31 0a 20 20 20 20 2d 44 53 51  DEBUG=1.    -DSQ
1040: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 41 55 54  LITE_DEFAULT_AUT
1050: 4f 56 41 43 55 55 4d 3d 31 0a 20 20 20 20 2d 44  OVACUUM=1.    -D
1060: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43  SQLITE_DEFAULT_C
1070: 41 43 48 45 5f 53 49 5a 45 3d 36 34 0a 20 20 20  ACHE_SIZE=64.   
1080: 20 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c   -DSQLITE_DEFAUL
1090: 54 5f 50 41 47 45 5f 53 49 5a 45 3d 31 30 32 34  T_PAGE_SIZE=1024
10a0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45  .    -DSQLITE_DE
10b0: 46 41 55 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45  FAULT_TEMP_CACHE
10c0: 5f 53 49 5a 45 3d 33 32 0a 20 20 20 20 2d 44 53  _SIZE=32.    -DS
10d0: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c 46  QLITE_DISABLE_LF
10e0: 53 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  S=1.    -DSQLITE
10f0: 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57  _ENABLE_ATOMIC_W
1100: 52 49 54 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c  RITE=1.    -DSQL
1110: 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41  ITE_ENABLE_IOTRA
1120: 43 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  CE=1.    -DSQLIT
1130: 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f  E_ENABLE_MEMORY_
1140: 4d 41 4e 41 47 45 4d 45 4e 54 3d 31 0a 20 20 20  MANAGEMENT=1.   
1150: 20 2d 44 53 51 4c 49 54 45 5f 4d 41 58 5f 50 41   -DSQLITE_MAX_PA
1160: 47 45 5f 53 49 5a 45 3d 34 30 39 36 0a 20 20 20  GE_SIZE=4096.   
1170: 20 2d 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c   -DSQLITE_OMIT_L
1180: 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 3d 31 0a  OAD_EXTENSION=1.
1190: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4f 4d 49      -DSQLITE_OMI
11a0: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
11b0: 41 43 4b 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  ACK=1.    -DSQLI
11c0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
11d0: 41 42 4c 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c  ABLE=1.    -DSQL
11e0: 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
11f0: 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 20 20 2d 44  N_COLUMNS.    -D
1200: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
1210: 45 3d 33 0a 20 20 20 20 2d 2d 65 6e 61 62 6c 65  E=3.    --enable
1220: 2d 6a 73 6f 6e 31 0a 20 20 7d 0a 20 20 22 44 65  -json1.  }.  "De
1230: 76 69 63 65 2d 54 77 6f 22 20 7b 0a 20 20 20 20  vice-Two" {.    
1240: 2d 44 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f  -DSQLITE_4_BYTE_
1250: 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 3d 31  ALIGNED_MALLOC=1
1260: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45  .    -DSQLITE_DE
1270: 46 41 55 4c 54 5f 41 55 54 4f 56 41 43 55 55 4d  FAULT_AUTOVACUUM
1280: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
1290: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
12a0: 5a 45 3d 31 30 30 30 0a 20 20 20 20 2d 44 53 51  ZE=1000.    -DSQ
12b0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4c 4f 43  LITE_DEFAULT_LOC
12c0: 4b 49 4e 47 5f 4d 4f 44 45 3d 30 0a 20 20 20 20  KING_MODE=0.    
12d0: 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  -DSQLITE_DEFAULT
12e0: 5f 50 41 47 45 5f 53 49 5a 45 3d 31 30 32 34 0a  _PAGE_SIZE=1024.
12f0: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 46      -DSQLITE_DEF
1300: 41 55 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45 5f  AULT_TEMP_CACHE_
1310: 53 49 5a 45 3d 31 30 30 30 0a 20 20 20 20 2d 44  SIZE=1000.    -D
1320: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
1330: 46 53 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  FS=1.    -DSQLIT
1340: 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 3d 31 0a  E_ENABLE_FTS3=1.
1350: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
1360: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
1370: 45 4d 45 4e 54 3d 31 0a 20 20 20 20 2d 44 53 51  EMENT=1.    -DSQ
1380: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45  LITE_ENABLE_RTRE
1390: 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  E=1.    -DSQLITE
13a0: 5f 4d 41 58 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45  _MAX_COMPOUND_SE
13b0: 4c 45 43 54 3d 35 30 0a 20 20 20 20 2d 44 53 51  LECT=50.    -DSQ
13c0: 4c 49 54 45 5f 4d 41 58 5f 50 41 47 45 5f 53 49  LITE_MAX_PAGE_SI
13d0: 5a 45 3d 33 32 37 36 38 0a 20 20 20 20 2d 44 53  ZE=32768.    -DS
13e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
13f0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
1400: 54 45 4d 50 5f 53 54 4f 52 45 3d 33 0a 20 20 20  TEMP_STORE=3.   
1410: 20 2d 44 53 51 4c 49 54 45 5f 54 48 52 45 41 44   -DSQLITE_THREAD
1420: 53 41 46 45 3d 32 0a 20 20 20 20 2d 2d 65 6e 61  SAFE=2.    --ena
1430: 62 6c 65 2d 6a 73 6f 6e 31 20 2d 2d 65 6e 61 62  ble-json1 --enab
1440: 6c 65 2d 66 74 73 35 20 2d 2d 65 6e 61 62 6c 65  le-fts5 --enable
1450: 2d 73 65 73 73 69 6f 6e 0a 20 20 7d 0a 20 20 22  -session.  }.  "
1460: 4c 6f 63 6b 69 6e 67 2d 53 74 79 6c 65 22 20 7b  Locking-Style" {
1470: 0a 20 20 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53  .    -O2.    -DS
1480: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
1490: 4b 49 4e 47 5f 53 54 59 4c 45 3d 31 0a 20 20 7d  KING_STYLE=1.  }
14a0: 0a 20 20 22 41 70 70 6c 65 22 20 7b 0a 20 20 20  .  "Apple" {.   
14b0: 20 2d 4f 31 20 20 20 23 20 41 76 6f 69 64 20 61   -O1   # Avoid a
14c0: 20 63 6f 6d 70 69 6c 65 72 20 62 75 67 20 69 6e   compiler bug in
14d0: 20 67 63 63 20 34 2e 32 2e 31 20 62 75 69 6c 64   gcc 4.2.1 build
14e0: 20 35 36 35 38 0a 20 20 20 20 2d 44 48 41 56 45   5658.    -DHAVE
14f0: 5f 47 4d 54 49 4d 45 5f 52 3d 31 0a 20 20 20 20  _GMTIME_R=1.    
1500: 2d 44 48 41 56 45 5f 49 53 4e 41 4e 3d 31 0a 20  -DHAVE_ISNAN=1. 
1510: 20 20 20 2d 44 48 41 56 45 5f 4c 4f 43 41 4c 54     -DHAVE_LOCALT
1520: 49 4d 45 5f 52 3d 31 0a 20 20 20 20 2d 44 48 41  IME_R=1.    -DHA
1530: 56 45 5f 50 52 45 41 44 3d 31 0a 20 20 20 20 2d  VE_PREAD=1.    -
1540: 44 48 41 56 45 5f 50 57 52 49 54 45 3d 31 0a 20  DHAVE_PWRITE=1. 
1550: 20 20 20 2d 44 48 41 56 45 5f 55 53 4c 45 45 50     -DHAVE_USLEEP
1560: 3d 31 0a 20 20 20 20 2d 44 48 41 56 45 5f 55 53  =1.    -DHAVE_US
1570: 4c 45 45 50 3d 31 0a 20 20 20 20 2d 44 48 41 56  LEEP=1.    -DHAV
1580: 45 5f 55 54 49 4d 45 3d 31 0a 20 20 20 20 2d 44  E_UTIME=1.    -D
1590: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43  SQLITE_DEFAULT_C
15a0: 41 43 48 45 5f 53 49 5a 45 3d 31 30 30 30 0a 20  ACHE_SIZE=1000. 
15b0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 46 41     -DSQLITE_DEFA
15c0: 55 4c 54 5f 43 4b 50 54 46 55 4c 4c 46 53 59 4e  ULT_CKPTFULLFSYN
15d0: 43 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  C=1.    -DSQLITE
15e0: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
15f0: 55 53 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  US=1.    -DSQLIT
1600: 45 5f 44 45 46 41 55 4c 54 5f 50 41 47 45 5f 53  E_DEFAULT_PAGE_S
1610: 49 5a 45 3d 31 30 32 34 0a 20 20 20 20 2d 44 53  IZE=1024.    -DS
1620: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 50 41  QLITE_DISABLE_PA
1630: 47 45 43 41 43 48 45 5f 4f 56 45 52 46 4c 4f 57  GECACHE_OVERFLOW
1640: 5f 53 54 41 54 53 3d 31 0a 20 20 20 20 2d 44 53  _STATS=1.    -DS
1650: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 50 49  QLITE_ENABLE_API
1660: 5f 41 52 4d 4f 52 3d 31 0a 20 20 20 20 2d 44 53  _ARMOR=1.    -DS
1670: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 55 54  QLITE_ENABLE_AUT
1680: 4f 5f 50 52 4f 46 49 4c 45 3d 31 0a 20 20 20 20  O_PROFILE=1.    
1690: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
16a0: 46 4c 4f 43 4b 54 49 4d 45 4f 55 54 3d 31 0a 20  FLOCKTIMEOUT=1. 
16b0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
16c0: 4c 45 5f 46 54 53 33 3d 31 0a 20 20 20 20 2d 44  LE_FTS3=1.    -D
16d0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
16e0: 53 33 5f 50 41 52 45 4e 54 48 45 53 49 53 3d 31  S3_PARENTHESIS=1
16f0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e  .    -DSQLITE_EN
1700: 41 42 4c 45 5f 46 54 53 33 5f 54 4f 4b 45 4e 49  ABLE_FTS3_TOKENI
1710: 5a 45 52 3d 31 0a 20 20 20 20 69 66 3a 6f 73 3d  ZER=1.    if:os=
1720: 3d 22 44 61 72 77 69 6e 22 20 2d 44 53 51 4c 49  ="Darwin" -DSQLI
1730: 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e  TE_ENABLE_LOCKIN
1740: 47 5f 53 54 59 4c 45 3d 31 0a 20 20 20 20 2d 44  G_STYLE=1.    -D
1750: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 45  SQLITE_ENABLE_PE
1760: 52 53 49 53 54 5f 57 41 4c 3d 31 0a 20 20 20 20  RSIST_WAL=1.    
1770: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
1780: 50 55 52 47 45 41 42 4c 45 5f 50 43 41 43 48 45  PURGEABLE_PCACHE
1790: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
17a0: 45 4e 41 42 4c 45 5f 52 54 52 45 45 3d 31 0a 20  ENABLE_RTREE=1. 
17b0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
17c0: 4c 45 5f 53 4e 41 50 53 48 4f 54 3d 31 0a 20 20  LE_SNAPSHOT=1.  
17d0: 20 20 23 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41    # -DSQLITE_ENA
17e0: 42 4c 45 5f 53 51 4c 4c 4f 47 3d 31 0a 20 20 20  BLE_SQLLOG=1.   
17f0: 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
1800: 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
1810: 49 4d 49 54 3d 31 0a 20 20 20 20 2d 44 53 51 4c  IMIT=1.    -DSQL
1820: 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 3d 32  ITE_MAX_LENGTH=2
1830: 31 34 37 34 38 33 36 34 35 0a 20 20 20 20 2d 44  147483645.    -D
1840: 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
1850: 42 4c 45 5f 4e 55 4d 42 45 52 3d 35 30 30 30 30  BLE_NUMBER=50000
1860: 30 0a 20 20 20 20 23 20 2d 44 53 51 4c 49 54 45  0.    # -DSQLITE
1870: 5f 4d 45 4d 44 45 42 55 47 3d 31 0a 20 20 20 20  _MEMDEBUG=1.    
1880: 2d 44 53 51 4c 49 54 45 5f 4e 4f 5f 53 59 4e 43  -DSQLITE_NO_SYNC
1890: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
18a0: 4f 4d 49 54 5f 41 55 54 4f 52 45 53 45 54 3d 31  OMIT_AUTORESET=1
18b0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4f 4d  .    -DSQLITE_OM
18c0: 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
18d0: 4e 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  N=1.    -DSQLITE
18e0: 5f 50 52 45 46 45 52 5f 50 52 4f 58 59 5f 4c 4f  _PREFER_PROXY_LO
18f0: 43 4b 49 4e 47 3d 31 0a 20 20 20 20 2d 44 53 51  CKING=1.    -DSQ
1900: 4c 49 54 45 5f 53 45 52 49 45 53 5f 43 4f 4e 53  LITE_SERIES_CONS
1910: 54 52 41 49 4e 54 5f 56 45 52 49 46 59 3d 31 0a  TRAINT_VERIFY=1.
1920: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 54 48 52      -DSQLITE_THR
1930: 45 41 44 53 41 46 45 3d 32 0a 20 20 20 20 2d 44  EADSAFE=2.    -D
1940: 53 51 4c 49 54 45 5f 55 53 45 5f 55 52 49 3d 31  SQLITE_USE_URI=1
1950: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 57 52  .    -DSQLITE_WR
1960: 49 54 45 5f 57 41 4c 46 52 41 4d 45 5f 50 52 45  ITE_WALFRAME_PRE
1970: 42 55 46 46 45 52 45 44 3d 31 0a 20 20 20 20 2d  BUFFERED=1.    -
1980: 44 55 53 45 5f 47 55 41 52 44 45 44 5f 46 44 3d  DUSE_GUARDED_FD=
1990: 31 0a 20 20 20 20 2d 44 55 53 45 5f 50 52 45 41  1.    -DUSE_PREA
19a0: 44 3d 31 0a 20 20 20 20 2d 2d 65 6e 61 62 6c 65  D=1.    --enable
19b0: 2d 6a 73 6f 6e 31 20 2d 2d 65 6e 61 62 6c 65 2d  -json1 --enable-
19c0: 66 74 73 35 0a 20 20 7d 0a 20 20 22 45 78 74 72  fts5.  }.  "Extr
19d0: 61 2d 52 6f 62 75 73 74 6e 65 73 73 22 20 7b 0a  a-Robustness" {.
19e0: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
19f0: 42 4c 45 5f 4f 56 45 52 53 49 5a 45 5f 43 45 4c  BLE_OVERSIZE_CEL
1a00: 4c 5f 43 48 45 43 4b 3d 31 0a 20 20 20 20 2d 44  L_CHECK=1.    -D
1a10: 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1a20: 48 45 44 3d 36 32 0a 20 20 7d 0a 20 20 22 44 65  HED=62.  }.  "De
1a30: 76 6b 69 74 22 20 7b 0a 20 20 20 20 2d 44 53 51  vkit" {.    -DSQ
1a40: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
1a50: 45 5f 46 4f 52 4d 41 54 3d 34 0a 20 20 20 20 2d  E_FORMAT=4.    -
1a60: 44 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  DSQLITE_MAX_ATTA
1a70: 43 48 45 44 3d 33 30 0a 20 20 20 20 2d 44 53 51  CHED=30.    -DSQ
1a80: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
1a90: 4d 4e 5f 4d 45 54 41 44 41 54 41 0a 20 20 20 20  MN_METADATA.    
1aa0: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
1ab0: 46 54 53 34 0a 20 20 20 20 2d 44 53 51 4c 49 54  FTS4.    -DSQLIT
1ac0: 45 5f 45 4e 41 42 4c 45 5f 46 54 53 35 0a 20 20  E_ENABLE_FTS5.  
1ad0: 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c    -DSQLITE_ENABL
1ae0: 45 5f 46 54 53 34 5f 50 41 52 45 4e 54 48 45 53  E_FTS4_PARENTHES
1af0: 49 53 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  IS.    -DSQLITE_
1b00: 44 49 53 41 42 4c 45 5f 46 54 53 34 5f 44 45 46  DISABLE_FTS4_DEF
1b10: 45 52 52 45 44 0a 20 20 20 20 2d 44 53 51 4c 49  ERRED.    -DSQLI
1b20: 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45 0a  TE_ENABLE_RTREE.
1b30: 20 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f      --enable-jso
1b40: 6e 31 20 2d 2d 65 6e 61 62 6c 65 2d 66 74 73 35  n1 --enable-fts5
1b50: 0a 20 20 7d 0a 20 20 22 4e 6f 2d 6c 6f 6f 6b 61  .  }.  "No-looka
1b60: 73 69 64 65 22 20 7b 0a 20 20 20 20 2d 44 53 51  side" {.    -DSQ
1b70: 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f  LITE_TEST_REALLO
1b80: 43 5f 53 54 52 45 53 53 3d 31 0a 20 20 20 20 2d  C_STRESS=1.    -
1b90: 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 4f  DSQLITE_OMIT_LOO
1ba0: 4b 41 53 49 44 45 3d 31 0a 20 20 20 20 2d 44 48  KASIDE=1.    -DH
1bb0: 41 56 45 5f 55 53 4c 45 45 50 3d 31 0a 20 20 7d  AVE_USLEEP=1.  }
1bc0: 0a 20 20 22 56 61 6c 67 72 69 6e 64 22 20 7b 0a  .  "Valgrind" {.
1bd0: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
1be0: 42 4c 45 5f 53 54 41 54 34 0a 20 20 20 20 2d 44  BLE_STAT4.    -D
1bf0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1c00: 53 34 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  S4.    -DSQLITE_
1c10: 45 4e 41 42 4c 45 5f 52 54 52 45 45 0a 20 20 20  ENABLE_RTREE.   
1c20: 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
1c30: 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a  _HIDDEN_COLUMNS.
1c40: 20 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f      --enable-jso
1c50: 6e 31 0a 20 20 7d 0a 0a 20 20 23 20 54 68 65 20  n1.  }..  # The 
1c60: 6e 65 78 74 20 67 72 6f 75 70 20 6f 66 20 63 6f  next group of co
1c70: 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 61 72 65  nfigurations are
1c80: 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 74 68   used only by th
1c90: 65 0a 20 20 23 20 46 61 69 6c 75 72 65 2d 44 65  e.  # Failure-De
1ca0: 74 65 63 74 69 6f 6e 20 70 6c 61 74 66 6f 72 6d  tection platform
1cb0: 2e 20 20 54 68 65 79 20 61 72 65 20 61 6c 6c 20  .  They are all 
1cc0: 74 68 65 20 73 61 6d 65 2c 20 62 75 74 20 77 65  the same, but we
1cd0: 20 6e 65 65 64 0a 20 20 23 20 64 69 66 66 65 72   need.  # differ
1ce0: 65 6e 74 20 6e 61 6d 65 73 20 66 6f 72 20 74 68  ent names for th
1cf0: 65 6d 20 61 6c 6c 20 73 6f 20 74 68 61 74 20 74  em all so that t
1d00: 68 65 79 20 72 65 73 75 6c 74 73 20 61 70 70 65  hey results appe
1d10: 61 72 20 69 6e 20 73 65 70 61 72 61 74 65 0a 20  ar in separate. 
1d20: 20 23 20 73 75 62 64 69 72 65 63 74 6f 72 69 65   # subdirectorie
1d30: 73 2e 0a 20 20 23 0a 20 20 46 61 69 6c 30 20 7b  s..  #.  Fail0 {
1d40: 2d 4f 30 7d 0a 20 20 46 61 69 6c 32 20 7b 2d 4f  -O0}.  Fail2 {-O
1d50: 30 7d 0a 20 20 46 61 69 6c 33 20 7b 2d 4f 30 7d  0}.  Fail3 {-O0}
1d60: 0a 20 20 46 61 69 6c 34 20 7b 2d 4f 30 7d 0a 20  .  Fail4 {-O0}. 
1d70: 20 46 75 7a 7a 46 61 69 6c 31 20 7b 2d 4f 30 7d   FuzzFail1 {-O0}
1d80: 0a 20 20 46 75 7a 7a 46 61 69 6c 32 20 7b 2d 4f  .  FuzzFail2 {-O
1d90: 30 7d 0a 7d 5d 0a 0a 61 72 72 61 79 20 73 65 74  0}.}]..array set
1da0: 20 3a 3a 50 6c 61 74 66 6f 72 6d 73 20 5b 73 74   ::Platforms [st
1db0: 72 69 70 5f 63 6f 6d 6d 65 6e 74 73 20 7b 0a 20  rip_comments {. 
1dc0: 20 4c 69 6e 75 78 2d 78 38 36 5f 36 34 20 7b 0a   Linux-x86_64 {.
1dd0: 20 20 20 20 22 43 68 65 63 6b 2d 53 79 6d 62 6f      "Check-Symbo
1de0: 6c 73 22 20 20 20 20 20 20 20 20 20 20 20 63 68  ls"           ch
1df0: 65 63 6b 73 79 6d 62 6f 6c 73 0a 20 20 20 20 22  ecksymbols.    "
1e00: 46 61 73 74 2d 4f 6e 65 22 20 20 20 20 20 20 20  Fast-One"       
1e10: 20 20 20 20 20 20 20 20 20 66 75 7a 7a 74 65 73           fuzztes
1e20: 74 0a 20 20 20 20 22 44 65 62 75 67 2d 4f 6e 65  t.    "Debug-One
1e30: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
1e40: 22 6d 70 74 65 73 74 20 74 65 73 74 22 0a 20 20  "mptest test".  
1e50: 20 20 22 48 61 76 65 2d 4e 6f 74 22 20 20 20 20    "Have-Not"    
1e60: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
1e70: 0a 20 20 20 20 22 53 65 63 75 72 65 2d 44 65 6c  .    "Secure-Del
1e80: 65 74 65 22 20 20 20 20 20 20 20 20 20 20 20 74  ete"           t
1e90: 65 73 74 0a 20 20 20 20 22 55 6e 6c 6f 63 6b 2d  est.    "Unlock-
1ea0: 4e 6f 74 69 66 79 22 20 20 20 20 20 20 20 20 20  Notify"         
1eb0: 20 20 22 51 55 49 43 4b 54 45 53 54 5f 49 4e 43    "QUICKTEST_INC
1ec0: 4c 55 44 45 3d 6e 6f 74 69 66 79 32 2e 74 65 73  LUDE=notify2.tes
1ed0: 74 20 74 65 73 74 22 0a 20 20 20 20 22 55 70 64  t test".    "Upd
1ee0: 61 74 65 2d 44 65 6c 65 74 65 2d 4c 69 6d 69 74  ate-Delete-Limit
1ef0: 22 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22  "     test.    "
1f00: 45 78 74 72 61 2d 52 6f 62 75 73 74 6e 65 73 73  Extra-Robustness
1f10: 22 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20  "        test.  
1f20: 20 20 22 44 65 76 69 63 65 2d 54 77 6f 22 20 20    "Device-Two"  
1f30: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
1f40: 0a 20 20 20 20 22 4e 6f 2d 6c 6f 6f 6b 61 73 69  .    "No-lookasi
1f50: 64 65 22 20 20 20 20 20 20 20 20 20 20 20 20 74  de"            t
1f60: 65 73 74 0a 20 20 20 20 22 44 65 76 6b 69 74 22  est.    "Devkit"
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f80: 20 20 74 65 73 74 0a 20 20 20 20 22 41 70 70 6c    test.    "Appl
1f90: 65 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e"              
1fa0: 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22 53       test.    "S
1fb0: 61 6e 69 74 69 7a 65 22 20 20 20 20 20 20 20 20  anitize"        
1fc0: 20 20 20 20 20 20 20 20 7b 51 55 49 43 4b 54 45          {QUICKTE
1fd0: 53 54 5f 4f 4d 49 54 3d 66 75 6e 63 34 2e 74 65  ST_OMIT=func4.te
1fe0: 73 74 2c 6e 61 6e 2e 74 65 73 74 20 74 65 73 74  st,nan.test test
1ff0: 7d 0a 20 20 20 20 22 44 65 76 69 63 65 2d 4f 6e  }.    "Device-On
2000: 65 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e"              
2010: 66 75 6c 6c 74 65 73 74 0a 20 20 20 20 22 44 65  fulltest.    "De
2020: 66 61 75 6c 74 22 20 20 20 20 20 20 20 20 20 20  fault"          
2030: 20 20 20 20 20 20 20 22 74 68 72 65 61 64 74 65         "threadte
2040: 73 74 20 66 75 6c 6c 74 65 73 74 22 0a 20 20 20  st fulltest".   
2050: 20 22 56 61 6c 67 72 69 6e 64 22 20 20 20 20 20   "Valgrind"     
2060: 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 67 72             valgr
2070: 69 6e 64 74 65 73 74 0a 20 20 7d 0a 20 20 4c 69  indtest.  }.  Li
2080: 6e 75 78 2d 69 36 38 36 20 7b 0a 20 20 20 20 22  nux-i686 {.    "
2090: 44 65 76 6b 69 74 22 20 20 20 20 20 20 20 20 20  Devkit"         
20a0: 20 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20           test.  
20b0: 20 20 22 48 61 76 65 2d 4e 6f 74 22 20 20 20 20    "Have-Not"    
20c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
20d0: 0a 20 20 20 20 22 55 6e 6c 6f 63 6b 2d 4e 6f 74  .    "Unlock-Not
20e0: 69 66 79 22 20 20 20 20 20 20 20 20 20 20 20 22  ify"           "
20f0: 51 55 49 43 4b 54 45 53 54 5f 49 4e 43 4c 55 44  QUICKTEST_INCLUD
2100: 45 3d 6e 6f 74 69 66 79 32 2e 74 65 73 74 20 74  E=notify2.test t
2110: 65 73 74 22 0a 20 20 20 20 22 44 65 76 69 63 65  est".    "Device
2120: 2d 4f 6e 65 22 20 20 20 20 20 20 20 20 20 20 20  -One"           
2130: 20 20 20 74 65 73 74 0a 20 20 20 20 22 44 65 76     test.    "Dev
2140: 69 63 65 2d 54 77 6f 22 20 20 20 20 20 20 20 20  ice-Two"        
2150: 20 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22        test.    "
2160: 44 65 66 61 75 6c 74 22 20 20 20 20 20 20 20 20  Default"        
2170: 20 20 20 20 20 20 20 20 20 22 74 68 72 65 61 64           "thread
2180: 74 65 73 74 20 66 75 6c 6c 74 65 73 74 22 0a 20  test fulltest". 
2190: 20 7d 0a 20 20 44 61 72 77 69 6e 2d 69 33 38 36   }.  Darwin-i386
21a0: 20 7b 0a 20 20 20 20 22 4c 6f 63 6b 69 6e 67 2d   {.    "Locking-
21b0: 53 74 79 6c 65 22 20 20 20 20 20 20 20 20 20 20  Style"          
21c0: 20 22 6d 70 74 65 73 74 20 74 65 73 74 22 0a 20   "mptest test". 
21d0: 20 20 20 22 48 61 76 65 2d 4e 6f 74 22 20 20 20     "Have-Not"   
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
21f0: 74 0a 20 20 20 20 22 41 70 70 6c 65 22 20 20 20  t.    "Apple"   
2200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2210: 22 74 68 72 65 61 64 74 65 73 74 20 66 75 6c 6c  "threadtest full
2220: 74 65 73 74 22 0a 20 20 7d 0a 20 20 44 61 72 77  test".  }.  Darw
2230: 69 6e 2d 78 38 36 5f 36 34 20 7b 0a 20 20 20 20  in-x86_64 {.    
2240: 22 4c 6f 63 6b 69 6e 67 2d 53 74 79 6c 65 22 20  "Locking-Style" 
2250: 20 20 20 20 20 20 20 20 20 20 22 6d 70 74 65 73            "mptes
2260: 74 20 74 65 73 74 22 0a 20 20 20 20 22 48 61 76  t test".    "Hav
2270: 65 2d 4e 6f 74 22 20 20 20 20 20 20 20 20 20 20  e-Not"          
2280: 20 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22        test.    "
2290: 41 70 70 6c 65 22 20 20 20 20 20 20 20 20 20 20  Apple"          
22a0: 20 20 20 20 20 20 20 20 20 22 74 68 72 65 61 64           "thread
22b0: 74 65 73 74 20 66 75 6c 6c 74 65 73 74 22 0a 20  test fulltest". 
22c0: 20 7d 0a 20 20 22 57 69 6e 64 6f 77 73 20 4e 54   }.  "Windows NT
22d0: 2d 69 6e 74 65 6c 22 20 7b 0a 20 20 20 20 22 53  -intel" {.    "S
22e0: 74 64 63 61 6c 6c 22 20 20 20 20 20 20 20 20 20  tdcall"         
22f0: 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20 20          test.   
2300: 20 22 48 61 76 65 2d 4e 6f 74 22 20 20 20 20 20   "Have-Not"     
2310: 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 0a             test.
2320: 20 20 20 20 22 44 65 66 61 75 6c 74 22 20 20 20      "Default"   
2330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d                "m
2340: 70 74 65 73 74 20 66 75 6c 6c 74 65 73 74 6f 6e  ptest fullteston
2350: 6c 79 22 0a 20 20 7d 0a 20 20 22 57 69 6e 64 6f  ly".  }.  "Windo
2360: 77 73 20 4e 54 2d 61 6d 64 36 34 22 20 7b 0a 20  ws NT-amd64" {. 
2370: 20 20 20 22 53 74 64 63 61 6c 6c 22 20 20 20 20     "Stdcall"    
2380: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
2390: 74 0a 20 20 20 20 22 48 61 76 65 2d 4e 6f 74 22  t.    "Have-Not"
23a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b0: 74 65 73 74 0a 20 20 20 20 22 44 65 66 61 75 6c  test.    "Defaul
23c0: 74 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t"              
23d0: 20 20 20 22 6d 70 74 65 73 74 20 66 75 6c 6c 74     "mptest fullt
23e0: 65 73 74 6f 6e 6c 79 22 0a 20 20 7d 0a 0a 20 20  estonly".  }..  
23f0: 23 20 54 68 65 20 46 61 69 6c 75 72 65 2d 44 65  # The Failure-De
2400: 74 65 63 74 69 6f 6e 20 70 6c 61 74 66 6f 72 6d  tection platform
2410: 20 72 75 6e 73 20 76 61 72 69 6f 75 73 20 74 65   runs various te
2420: 73 74 73 20 74 68 61 74 20 64 65 6c 69 62 65 72  sts that deliber
2430: 61 74 65 6c 79 0a 20 20 23 20 66 61 69 6c 2e 20  ately.  # fail. 
2440: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 61 73   This is used as
2450: 20 61 20 74 65 73 74 20 6f 66 20 74 68 69 73 20   a test of this 
2460: 73 63 72 69 70 74 20 74 6f 20 76 65 72 69 66 79  script to verify
2470: 20 74 68 61 74 20 74 68 69 73 20 73 63 72 69 70   that this scrip
2480: 74 0a 20 20 23 20 63 6f 72 72 65 63 74 6c 79 20  t.  # correctly 
2490: 69 64 65 6e 74 69 66 69 65 73 20 66 61 69 6c 75  identifies failu
24a0: 72 65 73 2e 0a 20 20 23 0a 20 20 46 61 69 6c 75  res..  #.  Failu
24b0: 72 65 2d 44 65 74 65 63 74 69 6f 6e 20 7b 0a 20  re-Detection {. 
24c0: 20 20 20 46 61 69 6c 30 20 20 20 20 20 22 54 45     Fail0     "TE
24d0: 53 54 5f 46 41 49 4c 55 52 45 3d 30 20 74 65 73  ST_FAILURE=0 tes
24e0: 74 22 0a 20 20 20 20 53 61 6e 69 74 69 7a 65 20  t".    Sanitize 
24f0: 20 22 54 45 53 54 5f 46 41 49 4c 55 52 45 3d 31   "TEST_FAILURE=1
2500: 20 74 65 73 74 22 0a 20 20 20 20 46 61 69 6c 32   test".    Fail2
2510: 20 20 20 20 20 22 54 45 53 54 5f 46 41 49 4c 55       "TEST_FAILU
2520: 52 45 3d 32 20 76 61 6c 67 72 69 6e 64 74 65 73  RE=2 valgrindtes
2530: 74 22 0a 20 20 20 20 46 61 69 6c 33 20 20 20 20  t".    Fail3    
2540: 20 22 54 45 53 54 5f 46 41 49 4c 55 52 45 3d 33   "TEST_FAILURE=3
2550: 20 76 61 6c 67 72 69 6e 64 74 65 73 74 22 0a 20   valgrindtest". 
2560: 20 20 20 46 61 69 6c 34 20 20 20 20 20 22 54 45     Fail4     "TE
2570: 53 54 5f 46 41 49 4c 55 52 45 3d 34 20 74 65 73  ST_FAILURE=4 tes
2580: 74 22 0a 20 20 20 20 46 75 7a 7a 46 61 69 6c 31  t".    FuzzFail1
2590: 20 22 54 45 53 54 5f 46 41 49 4c 55 52 45 3d 35   "TEST_FAILURE=5
25a0: 20 74 65 73 74 22 0a 20 20 20 20 46 75 7a 7a 46   test".    FuzzF
25b0: 61 69 6c 32 20 22 54 45 53 54 5f 46 41 49 4c 55  ail2 "TEST_FAILU
25c0: 52 45 3d 35 20 76 61 6c 67 72 69 6e 64 74 65 73  RE=5 valgrindtes
25d0: 74 22 0a 20 20 7d 0a 7d 5d 0a 0a 0a 23 20 45 6e  t".  }.}]...# En
25e0: 64 20 6f 66 20 63 6f 6e 66 69 67 75 72 61 74 69  d of configurati
25f0: 6f 6e 20 73 65 63 74 69 6f 6e 2e 0a 23 23 23 23  on section..####
2600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2640: 23 23 23 23 23 0a 23 23 23 23 23 23 23 23 23 23  #####.##########
2650: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2660: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2670: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
2690: 0a 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  .# Configuration
26a0: 20 76 65 72 69 66 69 63 61 74 69 6f 6e 3a 20 43   verification: C
26b0: 68 65 63 6b 20 74 68 61 74 20 65 61 63 68 20 65  heck that each e
26c0: 6e 74 72 79 20 69 6e 20 74 68 65 20 6c 69 73 74  ntry in the list
26d0: 20 6f 66 20 63 6f 6e 66 69 67 73 0a 23 20 73 70   of configs.# sp
26e0: 65 63 69 66 69 65 64 20 66 6f 72 20 65 61 63 68  ecified for each
26f0: 20 70 6c 61 74 66 6f 72 6d 73 20 65 78 69 73 74   platforms exist
2700: 73 2e 0a 23 0a 66 6f 72 65 61 63 68 20 7b 6b 65  s..#.foreach {ke
2710: 79 20 76 61 6c 75 65 7d 20 5b 61 72 72 61 79 20  y value} [array 
2720: 67 65 74 20 3a 3a 50 6c 61 74 66 6f 72 6d 73 5d  get ::Platforms]
2730: 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 76 20   {.  foreach {v 
2740: 74 7d 20 24 76 61 6c 75 65 20 7b 0a 20 20 20 20  t} $value {.    
2750: 69 66 20 7b 30 3d 3d 5b 69 6e 66 6f 20 65 78 69  if {0==[info exi
2760: 73 74 73 20 3a 3a 43 6f 6e 66 69 67 73 28 24 76  sts ::Configs($v
2770: 29 5d 7d 20 7b 0a 20 20 20 20 20 20 70 75 74 73  )]} {.      puts
2780: 20 73 74 64 65 72 72 20 22 4e 6f 20 73 75 63 68   stderr "No such
2790: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 3a 20   configuration: 
27a0: 5c 22 24 76 5c 22 22 0a 20 20 20 20 20 20 65 78  \"$v\"".      ex
27b0: 69 74 20 2d 31 0a 20 20 20 20 7d 0a 20 20 7d 0a  it -1.    }.  }.
27c0: 7d 0a 0a 23 20 4f 75 74 70 75 74 20 6c 6f 67 2e  }..# Output log.
27d0: 20 20 20 44 69 73 61 62 6c 65 64 20 66 6f 72 20     Disabled for 
27e0: 73 6c 61 76 65 20 69 6e 74 65 72 70 72 65 74 65  slave interprete
27f0: 72 73 2e 0a 23 0a 69 66 20 7b 5b 6c 69 6e 64 65  rs..#.if {[linde
2800: 78 20 24 61 72 67 76 20 65 6e 64 5d 21 3d 22 2d  x $argv end]!="-
2810: 2d 73 6c 61 76 65 22 7d 20 7b 0a 20 20 73 65 74  -slave"} {.  set
2820: 20 4c 4f 47 20 5b 6f 70 65 6e 20 72 65 6c 65 61   LOG [open relea
2830: 73 65 74 65 73 74 2d 6f 75 74 2e 74 78 74 20 77  setest-out.txt w
2840: 5d 0a 20 20 70 72 6f 63 20 50 55 54 53 20 7b 74  ].  proc PUTS {t
2850: 78 74 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 24  xt} {.    puts $
2860: 74 78 74 0a 20 20 20 20 70 75 74 73 20 24 3a 3a  txt.    puts $::
2870: 4c 4f 47 20 24 74 78 74 0a 20 20 20 20 66 6c 75  LOG $txt.    flu
2880: 73 68 20 24 3a 3a 4c 4f 47 0a 20 20 7d 0a 20 20  sh $::LOG.  }.  
2890: 70 72 6f 63 20 50 55 54 53 4e 4e 4c 20 7b 74 78  proc PUTSNNL {tx
28a0: 74 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 2d 6e  t} {.    puts -n
28b0: 6f 6e 65 77 6c 69 6e 65 20 24 74 78 74 0a 20 20  onewline $txt.  
28c0: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
28d0: 65 20 24 3a 3a 4c 4f 47 20 24 74 78 74 0a 20 20  e $::LOG $txt.  
28e0: 20 20 66 6c 75 73 68 20 24 3a 3a 4c 4f 47 0a 20    flush $::LOG. 
28f0: 20 7d 0a 20 20 70 72 6f 63 20 50 55 54 53 45 52   }.  proc PUTSER
2900: 52 20 7b 74 78 74 7d 20 7b 0a 20 20 20 20 70 75  R {txt} {.    pu
2910: 74 73 20 73 74 64 65 72 72 20 24 74 78 74 0a 20  ts stderr $txt. 
2920: 20 20 20 70 75 74 73 20 24 3a 3a 4c 4f 47 20 24     puts $::LOG $
2930: 74 78 74 0a 20 20 20 20 66 6c 75 73 68 20 24 3a  txt.    flush $:
2940: 3a 4c 4f 47 0a 20 20 7d 0a 20 20 70 75 74 73 20  :LOG.  }.  puts 
2950: 24 4c 4f 47 20 22 24 61 72 67 76 30 20 24 61 72  $LOG "$argv0 $ar
2960: 67 76 22 0a 20 20 73 65 74 20 74 6d 30 20 5b 63  gv".  set tm0 [c
2970: 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f  lock format [clo
2980: 63 6b 20 73 65 63 6f 6e 64 73 5d 20 2d 66 6f 72  ck seconds] -for
2990: 6d 61 74 20 7b 25 59 2d 25 6d 2d 25 64 20 25 48  mat {%Y-%m-%d %H
29a0: 3a 25 4d 3a 25 53 7d 20 2d 67 6d 74 20 31 5d 0a  :%M:%S} -gmt 1].
29b0: 20 20 70 75 74 73 20 24 4c 4f 47 20 22 73 74 61    puts $LOG "sta
29c0: 72 74 2d 74 69 6d 65 3a 20 24 74 6d 30 20 55 54  rt-time: $tm0 UT
29d0: 43 22 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 70 72  C".} else {.  pr
29e0: 6f 63 20 50 55 54 53 20 7b 74 78 74 7d 20 7b 0a  oc PUTS {txt} {.
29f0: 20 20 20 20 70 75 74 73 20 24 74 78 74 0a 20 20      puts $txt.  
2a00: 7d 0a 20 20 70 72 6f 63 20 50 55 54 53 4e 4e 4c  }.  proc PUTSNNL
2a10: 20 7b 74 78 74 7d 20 7b 0a 20 20 20 20 70 75 74   {txt} {.    put
2a20: 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 74 78  s -nonewline $tx
2a30: 74 0a 20 20 7d 0a 20 20 70 72 6f 63 20 50 55 54  t.  }.  proc PUT
2a40: 53 45 52 52 20 7b 74 78 74 7d 20 7b 0a 20 20 20  SERR {txt} {.   
2a50: 20 70 75 74 73 20 73 74 64 65 72 72 20 24 74 78   puts stderr $tx
2a60: 74 0a 20 20 7d 0a 7d 0a 0a 23 20 4f 70 65 6e 20  t.  }.}..# Open 
2a70: 74 68 65 20 66 69 6c 65 20 24 6c 6f 67 66 69 6c  the file $logfil
2a80: 65 20 61 6e 64 20 6c 6f 6f 6b 20 66 6f 72 20 61  e and look for a
2a90: 20 72 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 6e   report on the n
2aa0: 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 0a  umber of errors.
2ab0: 23 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72  # and the number
2ac0: 20 6f 66 20 74 65 73 74 20 63 61 73 65 73 20 72   of test cases r
2ad0: 75 6e 2e 20 20 41 64 64 20 74 68 65 73 65 20 76  un.  Add these v
2ae0: 61 6c 75 65 73 20 74 6f 20 74 68 65 20 67 6c 6f  alues to the glo
2af0: 62 61 6c 0a 23 20 24 3a 3a 4e 45 52 52 43 41 53  bal.# $::NERRCAS
2b00: 45 20 61 6e 64 20 24 3a 3a 4e 54 45 53 54 43 41  E and $::NTESTCA
2b10: 53 45 20 76 61 72 69 61 62 6c 65 73 2e 0a 23 0a  SE variables..#.
2b20: 23 20 49 66 20 61 6e 79 20 65 72 72 6f 72 73 20  # If any errors 
2b30: 6f 63 63 75 72 2c 20 74 68 65 6e 20 77 72 69 74  occur, then writ
2b40: 65 20 69 6e 74 6f 20 24 65 72 72 6d 73 67 56 61  e into $errmsgVa
2b50: 72 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e  r the text of an
2b60: 20 61 70 70 72 6f 70 72 69 61 74 65 0a 23 20 6f   appropriate.# o
2b70: 6e 65 2d 6c 69 6e 65 20 65 72 72 6f 72 20 6d 65  ne-line error me
2b80: 73 73 61 67 65 20 74 6f 20 73 68 6f 77 20 6f 6e  ssage to show on
2b90: 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 23 0a 70   the output..#.p
2ba0: 72 6f 63 20 63 6f 75 6e 74 5f 74 65 73 74 73 5f  roc count_tests_
2bb0: 61 6e 64 5f 65 72 72 6f 72 73 20 7b 6c 6f 67 66  and_errors {logf
2bc0: 69 6c 65 20 72 63 56 61 72 20 65 72 72 6d 73 67  ile rcVar errmsg
2bd0: 56 61 72 7d 20 7b 0a 20 20 69 66 20 7b 24 3a 3a  Var} {.  if {$::
2be0: 44 52 59 52 55 4e 7d 20 72 65 74 75 72 6e 0a 20  DRYRUN} return. 
2bf0: 20 75 70 76 61 72 20 31 20 24 72 63 56 61 72 20   upvar 1 $rcVar 
2c00: 72 63 20 24 65 72 72 6d 73 67 56 61 72 20 65 72  rc $errmsgVar er
2c10: 72 6d 73 67 0a 20 20 73 65 74 20 66 64 20 5b 6f  rmsg.  set fd [o
2c20: 70 65 6e 20 24 6c 6f 67 66 69 6c 65 20 72 62 5d  pen $logfile rb]
2c30: 0a 20 20 73 65 74 20 73 65 65 6e 20 30 0a 20 20  .  set seen 0.  
2c40: 77 68 69 6c 65 20 7b 21 5b 65 6f 66 20 24 66 64  while {![eof $fd
2c50: 5d 7d 20 7b 0a 20 20 20 20 73 65 74 20 6c 69 6e  ]} {.    set lin
2c60: 65 20 5b 67 65 74 73 20 24 66 64 5d 0a 20 20 20  e [gets $fd].   
2c70: 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 28 5c   if {[regexp {(\
2c80: 64 2b 29 20 65 72 72 6f 72 73 20 6f 75 74 20 6f  d+) errors out o
2c90: 66 20 28 5c 64 2b 29 20 74 65 73 74 73 7d 20 24  f (\d+) tests} $
2ca0: 6c 69 6e 65 20 61 6c 6c 20 6e 65 72 72 20 6e 74  line all nerr nt
2cb0: 65 73 74 5d 7d 20 7b 0a 20 20 20 20 20 20 69 6e  est]} {.      in
2cc0: 63 72 20 3a 3a 4e 45 52 52 43 41 53 45 20 24 6e  cr ::NERRCASE $n
2cd0: 65 72 72 0a 20 20 20 20 20 20 69 6e 63 72 20 3a  err.      incr :
2ce0: 3a 4e 54 45 53 54 43 41 53 45 20 24 6e 74 65 73  :NTESTCASE $ntes
2cf0: 74 0a 20 20 20 20 20 20 73 65 74 20 73 65 65 6e  t.      set seen
2d00: 20 31 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 65   1.      if {$ne
2d10: 72 72 3e 30 7d 20 7b 0a 20 20 20 20 20 20 20 20  rr>0} {.        
2d20: 73 65 74 20 72 63 20 31 0a 20 20 20 20 20 20 20  set rc 1.       
2d30: 20 73 65 74 20 65 72 72 6d 73 67 20 24 6c 69 6e   set errmsg $lin
2d40: 65 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  e.      }.    }.
2d50: 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20      if {[regexp 
2d60: 7b 72 75 6e 74 69 6d 65 20 65 72 72 6f 72 3a 20  {runtime error: 
2d70: 2b 28 2e 2a 29 7d 20 24 6c 69 6e 65 20 61 6c 6c  +(.*)} $line all
2d80: 20 6d 73 67 5d 7d 20 7b 0a 20 20 20 20 20 20 23   msg]} {.      #
2d90: 20 73 6b 69 70 20 6f 76 65 72 20 22 76 61 6c 75   skip over "valu
2da0: 65 20 69 73 20 6f 75 74 73 69 64 65 20 72 61 6e  e is outside ran
2db0: 67 65 22 20 65 72 72 6f 72 73 0a 20 20 20 20 20  ge" errors.     
2dc0: 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 76 61   if {[regexp {va
2dd0: 6c 75 65 20 2e 2a 20 69 73 20 6f 75 74 73 69 64  lue .* is outsid
2de0: 65 20 74 68 65 20 72 61 6e 67 65 20 6f 66 20 72  e the range of r
2df0: 65 70 72 65 73 65 6e 74 61 62 6c 65 7d 20 24 6c  epresentable} $l
2e00: 69 6e 65 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  ine]} {.        
2e10: 20 23 20 6e 6f 6f 70 0a 20 20 20 20 20 20 7d 20   # noop.      } 
2e20: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 69  else {.        i
2e30: 6e 63 72 20 3a 3a 4e 45 52 52 43 41 53 45 0a 20  ncr ::NERRCASE. 
2e40: 20 20 20 20 20 20 20 69 66 20 7b 24 72 63 3d 3d         if {$rc==
2e50: 30 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0} {.          s
2e60: 65 74 20 72 63 20 31 0a 20 20 20 20 20 20 20 20  et rc 1.        
2e70: 20 20 73 65 74 20 65 72 72 6d 73 67 20 24 6d 73    set errmsg $ms
2e80: 67 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  g.        }.    
2e90: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
2ea0: 20 7b 5b 72 65 67 65 78 70 20 7b 66 61 74 61 6c   {[regexp {fatal
2eb0: 20 65 72 72 6f 72 20 2b 28 2e 2a 29 7d 20 24 6c   error +(.*)} $l
2ec0: 69 6e 65 20 61 6c 6c 20 6d 73 67 5d 7d 20 7b 0a  ine all msg]} {.
2ed0: 20 20 20 20 20 20 69 6e 63 72 20 3a 3a 4e 45 52        incr ::NER
2ee0: 52 43 41 53 45 0a 20 20 20 20 20 20 69 66 20 7b  RCASE.      if {
2ef0: 24 72 63 3d 3d 30 7d 20 7b 0a 20 20 20 20 20 20  $rc==0} {.      
2f00: 20 20 73 65 74 20 72 63 20 31 0a 20 20 20 20 20    set rc 1.     
2f10: 20 20 20 73 65 74 20 65 72 72 6d 73 67 20 24 6d     set errmsg $m
2f20: 73 67 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  sg.      }.    }
2f30: 0a 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70  .    if {[regexp
2f40: 20 7b 45 52 52 4f 52 20 53 55 4d 4d 41 52 59 3a   {ERROR SUMMARY:
2f50: 20 28 5c 64 2b 29 20 65 72 72 6f 72 73 2e 2a 7d   (\d+) errors.*}
2f60: 20 24 6c 69 6e 65 20 61 6c 6c 20 63 6e 74 5d 20   $line all cnt] 
2f70: 26 26 20 24 63 6e 74 3e 30 7d 20 7b 0a 20 20 20  && $cnt>0} {.   
2f80: 20 20 20 69 6e 63 72 20 3a 3a 4e 45 52 52 43 41     incr ::NERRCA
2f90: 53 45 0a 20 20 20 20 20 20 69 66 20 7b 24 72 63  SE.      if {$rc
2fa0: 3d 3d 30 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  ==0} {.        s
2fb0: 65 74 20 72 63 20 31 0a 20 20 20 20 20 20 20 20  et rc 1.        
2fc0: 73 65 74 20 65 72 72 6d 73 67 20 24 61 6c 6c 0a  set errmsg $all.
2fd0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2fe0: 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e    if {[regexp {^
2ff0: 56 45 52 53 49 4f 4e 3a 20 33 5c 2e 5c 64 2b 2e  VERSION: 3\.\d+.
3000: 5c 64 2b 7d 20 24 6c 69 6e 65 5d 7d 20 7b 0a 20  \d+} $line]} {. 
3010: 20 20 20 20 20 73 65 74 20 76 20 5b 73 74 72 69       set v [stri
3020: 6e 67 20 72 61 6e 67 65 20 24 6c 69 6e 65 20 39  ng range $line 9
3030: 20 65 6e 64 5d 0a 20 20 20 20 20 20 69 66 20 7b   end].      if {
3040: 24 3a 3a 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  $::SQLITE_VERSIO
3050: 4e 20 65 71 20 22 22 7d 20 7b 0a 20 20 20 20 20  N eq ""} {.     
3060: 20 20 20 73 65 74 20 3a 3a 53 51 4c 49 54 45 5f     set ::SQLITE_
3070: 56 45 52 53 49 4f 4e 20 24 76 0a 20 20 20 20 20  VERSION $v.     
3080: 20 7d 20 65 6c 73 65 69 66 20 7b 24 3a 3a 53 51   } elseif {$::SQ
3090: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 20 6e 65 20  LITE_VERSION ne 
30a0: 24 76 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  $v} {.        se
30b0: 74 20 72 63 20 31 0a 20 20 20 20 20 20 20 20 73  t rc 1.        s
30c0: 65 74 20 65 72 72 6d 73 67 20 22 76 65 72 73 69  et errmsg "versi
30d0: 6f 6e 20 63 6f 6e 66 6c 69 63 74 3a 20 7b 24 3a  on conflict: {$:
30e0: 3a 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 7d  :SQLITE_VERSION}
30f0: 20 76 73 2e 20 7b 24 76 7d 22 0a 20 20 20 20 20   vs. {$v}".     
3100: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 63   }.    }.  }.  c
3110: 6c 6f 73 65 20 24 66 64 0a 20 20 69 66 20 7b 24  lose $fd.  if {$
3120: 3a 3a 42 55 49 4c 44 4f 4e 4c 59 7d 20 7b 0a 20  ::BUILDONLY} {. 
3130: 20 20 20 69 6e 63 72 20 3a 3a 4e 54 45 53 54 43     incr ::NTESTC
3140: 41 53 45 0a 20 20 20 20 69 66 20 7b 24 72 63 21  ASE.    if {$rc!
3150: 3d 30 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20  =0} {.      set 
3160: 65 72 72 6d 73 67 20 22 42 75 69 6c 64 20 66 61  errmsg "Build fa
3170: 69 6c 65 64 22 0a 20 20 20 20 7d 0a 20 20 7d 20  iled".    }.  } 
3180: 65 6c 73 65 69 66 20 7b 21 24 73 65 65 6e 7d 20  elseif {!$seen} 
3190: 7b 0a 20 20 20 20 73 65 74 20 72 63 20 31 0a 20  {.    set rc 1. 
31a0: 20 20 20 73 65 74 20 65 72 72 6d 73 67 20 22 54     set errmsg "T
31b0: 65 73 74 20 64 69 64 20 6e 6f 74 20 63 6f 6d 70  est did not comp
31c0: 6c 65 74 65 22 0a 20 20 20 20 69 66 20 7b 5b 66  lete".    if {[f
31d0: 69 6c 65 20 72 65 61 64 61 62 6c 65 20 63 6f 72  ile readable cor
31e0: 65 5d 7d 20 7b 0a 20 20 20 20 20 20 61 70 70 65  e]} {.      appe
31f0: 6e 64 20 65 72 72 6d 73 67 20 22 20 2d 20 63 6f  nd errmsg " - co
3200: 72 65 20 66 69 6c 65 20 65 78 69 73 74 73 22 0a  re file exists".
3210: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23 2d 2d      }.  }.}..#--
3220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3260: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 69 73 20  --------.# This 
3270: 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b  command is invok
3280: 65 64 20 61 73 20 74 68 65 20 5b 6d 61 69 6e 5d  ed as the [main]
3290: 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 73 63 72   routine for scr
32a0: 69 70 74 73 20 72 75 6e 20 77 69 74 68 20 74 68  ipts run with th
32b0: 65 0a 23 20 22 2d 2d 73 6c 61 76 65 22 20 6f 70  e.# "--slave" op
32c0: 74 69 6f 6e 2e 0a 23 0a 23 20 46 6f 72 20 65 61  tion..#.# For ea
32d0: 63 68 20 74 65 73 74 20 28 69 2e 65 2e 20 22 63  ch test (i.e. "c
32e0: 6f 6e 66 69 67 75 72 65 20 26 26 20 6d 61 6b 65  onfigure && make
32f0: 20 74 65 73 74 22 20 65 78 65 63 75 74 69 6f 6e   test" execution
3300: 29 2c 20 74 68 65 20 6d 61 73 74 65 72 0a 23 20  ), the master.# 
3310: 70 72 6f 63 65 73 73 20 73 70 61 77 6e 73 20 61  process spawns a
3320: 20 70 72 6f 63 65 73 73 20 77 69 74 68 20 74 68   process with th
3330: 65 20 2d 2d 73 6c 61 76 65 20 6f 70 74 69 6f 6e  e --slave option
3340: 2e 20 49 74 20 77 72 69 74 65 73 20 74 77 6f 20  . It writes two 
3350: 6c 69 6e 65 73 0a 23 20 74 6f 20 74 68 65 20 73  lines.# to the s
3360: 6c 61 76 65 73 20 73 74 64 69 6e 2e 20 54 68 65  laves stdin. The
3370: 20 66 69 72 73 74 20 63 6f 6e 74 61 69 6e 73 20   first contains 
3380: 61 20 73 69 6e 67 6c 65 20 62 6f 6f 6c 65 61 6e  a single boolean
3390: 20 76 61 6c 75 65 20 2d 20 74 68 65 0a 23 20 76   value - the.# v
33a0: 61 6c 75 65 20 6f 66 20 3a 3a 54 52 41 43 45 20  alue of ::TRACE 
33b0: 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20 73 6c  to use in the sl
33c0: 61 76 65 20 73 63 72 69 70 74 2e 20 54 68 65 20  ave script. The 
33d0: 73 65 63 6f 6e 64 20 6c 69 6e 65 20 63 6f 6e 74  second line cont
33e0: 61 69 6e 73 20 61 0a 23 20 6c 69 73 74 20 69 6e  ains a.# list in
33f0: 20 74 68 65 20 73 61 6d 65 20 66 6f 72 6d 61 74   the same format
3400: 20 61 73 20 65 61 63 68 20 65 6c 65 6d 65 6e 74   as each element
3410: 20 6f 66 20 74 68 65 20 6c 69 73 74 20 70 61 73   of the list pas
3420: 73 65 64 20 74 6f 20 74 68 65 0a 23 20 5b 72 75  sed to the.# [ru
3430: 6e 5f 61 6c 6c 5f 74 65 73 74 5f 73 75 69 74 65  n_all_test_suite
3440: 73 5d 20 63 6f 6d 6d 61 6e 64 20 69 6e 20 74 68  s] command in th
3450: 65 20 6d 61 73 74 65 72 20 70 72 6f 63 65 73 73  e master process
3460: 2e 0a 23 0a 23 20 54 68 65 20 73 6c 61 76 65 20  ..#.# The slave 
3470: 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 22 63  then runs the "c
3480: 6f 6e 66 69 67 75 72 65 20 26 26 20 6d 61 6b 65  onfigure && make
3490: 20 74 65 73 74 22 20 63 6f 6d 6d 61 6e 64 73 20   test" commands 
34a0: 73 70 65 63 69 66 69 65 64 2e 20 49 74 0a 23 20  specified. It.# 
34b0: 65 78 69 74 73 20 73 75 63 63 65 73 73 66 75 6c  exits successful
34c0: 6c 79 20 69 66 20 74 68 65 20 74 65 73 74 73 20  ly if the tests 
34d0: 70 61 73 73 65 73 2c 20 6f 72 20 77 69 74 68 20  passes, or with 
34e0: 61 20 6e 6f 6e 2d 7a 65 72 6f 20 65 72 72 6f 72  a non-zero error
34f0: 20 63 6f 64 65 0a 23 20 6f 74 68 65 72 77 69 73   code.# otherwis
3500: 65 2e 0a 23 0a 70 72 6f 63 20 72 75 6e 5f 73 6c  e..#.proc run_sl
3510: 61 76 65 5f 74 65 73 74 20 7b 7d 20 7b 0a 20 20  ave_test {} {.  
3520: 23 20 52 65 61 64 20 67 6c 6f 62 61 6c 20 76 61  # Read global va
3530: 72 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  rs configuration
3540: 20 66 72 6f 6d 20 73 74 64 69 6e 2e 0a 20 20 73   from stdin..  s
3550: 65 74 20 56 20 5b 67 65 74 73 20 73 74 64 69 6e  et V [gets stdin
3560: 5d 0a 20 20 66 6f 72 65 61 63 68 20 7b 3a 3a 54  ].  foreach {::T
3570: 52 41 43 45 20 3a 3a 4d 53 56 43 20 3a 3a 44 52  RACE ::MSVC ::DR
3580: 59 52 55 4e 20 3a 3a 4b 45 45 50 46 49 4c 45 53  YRUN ::KEEPFILES
3590: 7d 20 24 56 20 7b 7d 0a 0a 20 20 23 20 52 65 61  } $V {}..  # Rea
35a0: 64 20 74 68 65 20 74 65 73 74 2d 73 75 69 74 65  d the test-suite
35b0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
35c0: 72 6f 6d 20 73 74 64 69 6e 2e 0a 20 20 73 65 74  rom stdin..  set
35d0: 20 54 20 5b 67 65 74 73 20 73 74 64 69 6e 5d 0a   T [gets stdin].
35e0: 20 20 66 6f 72 65 61 63 68 20 7b 74 69 74 6c 65    foreach {title
35f0: 20 64 69 72 20 63 6f 6e 66 69 67 4f 70 74 73 20   dir configOpts 
3600: 74 65 73 74 74 61 72 67 65 74 20 6d 61 6b 65 4f  testtarget makeO
3610: 70 74 73 20 63 66 6c 61 67 73 20 6f 70 74 73 7d  pts cflags opts}
3620: 20 24 54 20 7b 7d 0a 0a 20 20 23 20 43 72 65 61   $T {}..  # Crea
3630: 74 65 20 61 6e 64 20 73 77 69 74 63 68 20 74 6f  te and switch to
3640: 20 74 68 65 20 74 65 73 74 20 64 69 72 65 63 74   the test direct
3650: 6f 72 79 2e 0a 20 20 73 65 74 20 6e 6f 72 6d 61  ory..  set norma
3660: 6c 64 69 72 20 5b 66 69 6c 65 20 6e 6f 72 6d 61  ldir [file norma
3670: 6c 69 7a 65 20 24 64 69 72 5d 0a 20 20 73 65 74  lize $dir].  set
3680: 20 3a 3a 65 6e 76 28 53 51 4c 49 54 45 5f 54 4d   ::env(SQLITE_TM
3690: 50 44 49 52 29 20 24 6e 6f 72 6d 61 6c 64 69 72  PDIR) $normaldir
36a0: 0a 20 20 74 72 61 63 65 5f 63 6d 64 20 66 69 6c  .  trace_cmd fil
36b0: 65 20 6d 6b 64 69 72 20 24 64 69 72 0a 20 20 74  e mkdir $dir.  t
36c0: 72 61 63 65 5f 63 6d 64 20 63 64 20 24 64 69 72  race_cmd cd $dir
36d0: 0a 20 20 63 61 74 63 68 20 7b 66 69 6c 65 20 64  .  catch {file d
36e0: 65 6c 65 74 65 20 63 6f 72 65 7d 0a 20 20 63 61  elete core}.  ca
36f0: 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65  tch {file delete
3700: 20 74 65 73 74 2e 6c 6f 67 7d 0a 0a 20 20 23 20   test.log}..  # 
3710: 52 75 6e 20 74 68 65 20 22 2e 2f 63 6f 6e 66 69  Run the "./confi
3720: 67 75 72 65 20 26 26 20 6d 61 6b 65 22 20 63 6f  gure && make" co
3730: 6d 6d 61 6e 64 73 2e 0a 20 20 73 65 74 20 72 63  mmands..  set rc
3740: 20 30 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74   0.  set rc [cat
3750: 63 68 20 5b 63 6f 6e 66 69 67 75 72 65 43 6f 6d  ch [configureCom
3760: 6d 61 6e 64 20 24 63 6f 6e 66 69 67 4f 70 74 73  mand $configOpts
3770: 5d 5d 0a 20 20 69 66 20 7b 21 24 72 63 7d 20 7b  ]].  if {!$rc} {
3780: 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65  .    if {[info e
3790: 78 69 73 74 73 20 3a 3a 65 6e 76 28 54 43 4c 53  xists ::env(TCLS
37a0: 48 5f 43 4d 44 29 5d 7d 20 7b 0a 20 20 20 20 20  H_CMD)]} {.     
37b0: 20 73 65 74 20 73 61 76 65 64 45 6e 76 28 54 43   set savedEnv(TC
37c0: 4c 53 48 5f 43 4d 44 29 20 24 3a 3a 65 6e 76 28  LSH_CMD) $::env(
37d0: 54 43 4c 53 48 5f 43 4d 44 29 0a 20 20 20 20 7d  TCLSH_CMD).    }
37e0: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 75 6e   else {.      un
37f0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
3800: 73 61 76 65 64 45 6e 76 28 54 43 4c 53 48 5f 43  savedEnv(TCLSH_C
3810: 4d 44 29 0a 20 20 20 20 7d 0a 20 20 20 20 73 65  MD).    }.    se
3820: 74 20 3a 3a 65 6e 76 28 54 43 4c 53 48 5f 43 4d  t ::env(TCLSH_CM
3830: 44 29 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  D) [file nativen
3840: 61 6d 65 20 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66  ame [info nameof
3850: 65 78 65 63 75 74 61 62 6c 65 5d 5d 0a 20 20 20  executable]].   
3860: 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 5b   set rc [catch [
3870: 6d 61 6b 65 43 6f 6d 6d 61 6e 64 20 24 74 65 73  makeCommand $tes
3880: 74 74 61 72 67 65 74 20 24 6d 61 6b 65 4f 70 74  ttarget $makeOpt
3890: 73 20 24 63 66 6c 61 67 73 20 24 6f 70 74 73 5d  s $cflags $opts]
38a0: 5d 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20  ].    if {[info 
38b0: 65 78 69 73 74 73 20 73 61 76 65 64 45 6e 76 28  exists savedEnv(
38c0: 54 43 4c 53 48 5f 43 4d 44 29 5d 7d 20 7b 0a 20  TCLSH_CMD)]} {. 
38d0: 20 20 20 20 20 73 65 74 20 3a 3a 65 6e 76 28 54       set ::env(T
38e0: 43 4c 53 48 5f 43 4d 44 29 20 24 73 61 76 65 64  CLSH_CMD) $saved
38f0: 45 6e 76 28 54 43 4c 53 48 5f 43 4d 44 29 0a 20  Env(TCLSH_CMD). 
3900: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
3910: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
3920: 61 69 6e 20 3a 3a 65 6e 76 28 54 43 4c 53 48 5f  ain ::env(TCLSH_
3930: 43 4d 44 29 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  CMD).    }.  }..
3940: 20 20 23 20 43 6c 65 61 6e 20 75 70 20 6c 6f 74    # Clean up lot
3950: 73 20 6f 66 20 65 78 74 72 61 20 66 69 6c 65 73  s of extra files
3960: 20 69 66 20 2d 2d 6b 65 65 70 20 77 61 73 20 6e   if --keep was n
3970: 6f 74 20 73 70 65 63 69 66 69 65 64 2e 0a 20 20  ot specified..  
3980: 69 66 20 7b 24 3a 3a 4b 45 45 50 46 49 4c 45 53  if {$::KEEPFILES
3990: 3d 3d 30 7d 20 7b 20 63 6c 65 61 6e 75 70 20 24  ==0} { cleanup $
39a0: 6e 6f 72 6d 61 6c 64 69 72 20 7d 0a 0a 20 20 23  normaldir }..  #
39b0: 20 45 78 69 73 20 73 75 63 63 65 73 73 66 75 6c   Exis successful
39c0: 6c 79 20 69 66 20 74 68 65 20 74 65 73 74 20 70  ly if the test p
39d0: 61 73 73 65 64 2c 20 6f 72 20 77 69 74 68 20 61  assed, or with a
39e0: 20 6e 6f 6e 2d 7a 65 72 6f 20 65 72 72 6f 72 20   non-zero error 
39f0: 63 6f 64 65 0a 20 20 23 20 6f 74 68 65 72 77 69  code.  # otherwi
3a00: 73 65 2e 0a 20 20 65 78 69 74 20 24 72 63 0a 7d  se..  exit $rc.}
3a10: 0a 0a 23 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  ..# This command
3a20: 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 6e 20 74   is invoked in t
3a30: 68 65 20 6d 61 73 74 65 72 20 70 72 6f 63 65 73  he master proces
3a40: 73 20 65 61 63 68 20 74 69 6d 65 20 61 20 73 6c  s each time a sl
3a50: 61 76 65 0a 23 20 66 69 6c 65 2d 64 65 73 63 72  ave.# file-descr
3a60: 69 70 74 6f 72 20 69 73 20 72 65 61 64 61 62 6c  iptor is readabl
3a70: 65 2e 0a 23 0a 70 72 6f 63 20 73 6c 61 76 65 5f  e..#.proc slave_
3a80: 66 69 6c 65 65 76 65 6e 74 20 7b 66 64 20 54 20  fileevent {fd T 
3a90: 74 6d 31 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20  tm1} {.  global 
3aa0: 47 0a 20 20 66 6f 72 65 61 63 68 20 7b 74 69 74  G.  foreach {tit
3ab0: 6c 65 20 64 69 72 20 63 6f 6e 66 69 67 4f 70 74  le dir configOpt
3ac0: 73 20 74 65 73 74 74 61 72 67 65 74 20 6d 61 6b  s testtarget mak
3ad0: 65 4f 70 74 73 20 63 66 6c 61 67 73 20 6f 70 74  eOpts cflags opt
3ae0: 73 7d 20 24 54 20 7b 7d 0a 0a 20 20 69 66 20 7b  s} $T {}..  if {
3af0: 5b 65 6f 66 20 24 66 64 5d 7d 20 7b 0a 20 20 20  [eof $fd]} {.   
3b00: 20 66 63 6f 6e 66 69 67 75 72 65 20 24 66 64 20   fconfigure $fd 
3b10: 2d 62 6c 6f 63 6b 69 6e 67 20 31 0a 20 20 20 20  -blocking 1.    
3b20: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 20  set rc [catch { 
3b30: 63 6c 6f 73 65 20 24 66 64 20 7d 5d 0a 0a 20 20  close $fd }]..  
3b40: 20 20 73 65 74 20 65 72 72 6d 73 67 20 7b 7d 0a    set errmsg {}.
3b50: 20 20 20 20 73 65 74 20 6c 6f 67 66 69 6c 65 20      set logfile 
3b60: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20  [file join $dir 
3b70: 74 65 73 74 2e 6c 6f 67 5d 0a 20 20 20 20 69 66  test.log].    if
3b80: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $
3b90: 6c 6f 67 66 69 6c 65 5d 7d 20 7b 0a 20 20 20 20  logfile]} {.    
3ba0: 20 20 63 6f 75 6e 74 5f 74 65 73 74 73 5f 61 6e    count_tests_an
3bb0: 64 5f 65 72 72 6f 72 73 20 5b 66 69 6c 65 20 6a  d_errors [file j
3bc0: 6f 69 6e 20 24 64 69 72 20 74 65 73 74 2e 6c 6f  oin $dir test.lo
3bd0: 67 5d 20 72 63 20 65 72 72 6d 73 67 0a 20 20 20  g] rc errmsg.   
3be0: 20 7d 20 65 6c 73 65 69 66 20 7b 24 72 63 3d 3d   } elseif {$rc==
3bf0: 30 20 26 26 20 21 24 3a 3a 44 52 59 52 55 4e 7d  0 && !$::DRYRUN}
3c00: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 72 63 20   {.      set rc 
3c10: 31 0a 20 20 20 20 20 20 73 65 74 20 65 72 72 6d  1.      set errm
3c20: 73 67 20 22 6e 6f 20 74 65 73 74 2e 6c 6f 67 20  sg "no test.log 
3c30: 66 69 6c 65 2e 2e 2e 22 0a 20 20 20 20 7d 0a 0a  file...".    }..
3c40: 20 20 20 20 69 66 20 7b 21 24 3a 3a 54 52 41 43      if {!$::TRAC
3c50: 45 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 74  E} {.      set t
3c60: 6d 32 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64  m2 [clock second
3c70: 73 5d 0a 20 20 20 20 20 20 73 65 74 20 68 6f 75  s].      set hou
3c80: 72 73 20 5b 65 78 70 72 20 7b 28 24 74 6d 32 2d  rs [expr {($tm2-
3c90: 24 74 6d 31 29 2f 33 36 30 30 7d 5d 0a 20 20 20  $tm1)/3600}].   
3ca0: 20 20 20 73 65 74 20 6d 69 6e 75 74 65 73 20 5b     set minutes [
3cb0: 65 78 70 72 20 7b 28 28 24 74 6d 32 2d 24 74 6d  expr {(($tm2-$tm
3cc0: 31 29 2f 36 30 29 25 36 30 7d 5d 0a 20 20 20 20  1)/60)%60}].    
3cd0: 20 20 73 65 74 20 73 65 63 6f 6e 64 73 20 5b 65    set seconds [e
3ce0: 78 70 72 20 7b 28 24 74 6d 32 2d 24 74 6d 31 29  xpr {($tm2-$tm1)
3cf0: 25 36 30 7d 5d 0a 20 20 20 20 20 20 73 65 74 20  %60}].      set 
3d00: 74 6d 20 5b 66 6f 72 6d 61 74 20 28 25 30 32 64  tm [format (%02d
3d10: 3a 25 30 32 64 3a 25 30 32 64 29 20 24 68 6f 75  :%02d:%02d) $hou
3d20: 72 73 20 24 6d 69 6e 75 74 65 73 20 24 73 65 63  rs $minutes $sec
3d30: 6f 6e 64 73 5d 0a 0a 20 20 20 20 20 20 69 66 20  onds]..      if 
3d40: 7b 24 72 63 7d 20 7b 0a 20 20 20 20 20 20 20 20  {$rc} {.        
3d50: 73 65 74 20 73 74 61 74 75 73 20 46 41 49 4c 0a  set status FAIL.
3d60: 20 20 20 20 20 20 20 20 69 6e 63 72 20 3a 3a 4e          incr ::N
3d70: 45 52 52 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ERR.      } else
3d80: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 73   {.        set s
3d90: 74 61 74 75 73 20 4f 6b 0a 20 20 20 20 20 20 7d  tatus Ok.      }
3da0: 0a 0a 20 20 20 20 20 20 73 65 74 20 6e 20 5b 73  ..      set n [s
3db0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 74 69  tring length $ti
3dc0: 74 6c 65 5d 0a 20 20 20 20 20 20 69 66 20 7b 24  tle].      if {$
3dd0: 3a 3a 50 52 4f 47 52 45 53 53 5f 4d 53 47 53 7d  ::PROGRESS_MSGS}
3de0: 20 7b 0a 20 20 20 20 20 20 20 20 50 55 54 53 20   {.        PUTS 
3df0: 22 66 69 6e 69 73 68 65 64 3a 20 24 7b 74 69 74  "finished: ${tit
3e00: 6c 65 7d 5b 73 74 72 69 6e 67 20 72 65 70 65 61  le}[string repea
3e10: 74 20 2e 20 5b 65 78 70 72 20 7b 35 33 2d 24 6e  t . [expr {53-$n
3e20: 7d 5d 5d 20 24 73 74 61 74 75 73 20 24 74 6d 22  }]] $status $tm"
3e30: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  .      } else {.
3e40: 20 20 20 20 20 20 20 20 50 55 54 53 20 22 24 7b          PUTS "${
3e50: 74 69 74 6c 65 7d 5b 73 74 72 69 6e 67 20 72 65  title}[string re
3e60: 70 65 61 74 20 2e 20 5b 65 78 70 72 20 7b 36 33  peat . [expr {63
3e70: 2d 24 6e 7d 5d 5d 20 24 73 74 61 74 75 73 20 24  -$n}]] $status $
3e80: 74 6d 22 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  tm".      }.    
3e90: 20 20 69 66 20 7b 24 65 72 72 6d 73 67 21 3d 22    if {$errmsg!="
3ea0: 22 7d 20 7b 50 55 54 53 20 22 20 20 20 20 20 24  "} {PUTS "     $
3eb0: 65 72 72 6d 73 67 22 7d 0a 20 20 20 20 20 20 66  errmsg"}.      f
3ec0: 6c 75 73 68 20 73 74 64 6f 75 74 0a 20 20 20 20  lush stdout.    
3ed0: 7d 0a 0a 20 20 20 20 69 6e 63 72 20 47 28 6e 4a  }..    incr G(nJ
3ee0: 6f 62 29 20 2d 31 0a 20 20 7d 20 65 6c 73 65 20  ob) -1.  } else 
3ef0: 7b 0a 20 20 20 20 73 65 74 20 6c 69 6e 65 20 5b  {.    set line [
3f00: 67 65 74 73 20 24 66 64 5d 0a 20 20 20 20 69 66  gets $fd].    if
3f10: 20 7b 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24   {[string trim $
3f20: 6c 69 6e 65 5d 20 21 3d 20 22 22 7d 20 7b 0a 20  line] != ""} {. 
3f30: 20 20 20 20 20 70 75 74 73 20 22 54 72 61 63 65       puts "Trace
3f40: 20 20 20 3a 20 24 74 69 74 6c 65 20 2d 20 5c 22     : $title - \"
3f50: 24 6c 69 6e 65 5c 22 22 0a 20 20 20 20 7d 0a 20  $line\"".    }. 
3f60: 20 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d   }.}..#---------
3f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3fb0: 2d 0a 23 20 54 68 65 20 6f 6e 6c 79 20 61 72 67  -.# The only arg
3fc0: 75 6d 65 6e 74 20 70 61 73 73 65 64 20 74 6f 20  ument passed to 
3fd0: 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  this function is
3fe0: 20 61 20 6c 69 73 74 20 6f 66 20 74 65 73 74 2d   a list of test-
3ff0: 73 75 69 74 65 73 20 74 6f 0a 23 20 72 75 6e 2e  suites to.# run.
4000: 20 45 61 63 68 20 22 74 65 73 74 2d 73 75 69 74   Each "test-suit
4010: 65 22 20 69 73 20 69 74 73 65 6c 66 20 61 20 6c  e" is itself a l
4020: 69 73 74 20 63 6f 6e 73 69 73 74 69 6e 67 20 6f  ist consisting o
4030: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
4040: 23 20 65 6c 65 6d 65 6e 74 73 3a 0a 23 0a 23 20  # elements:.#.# 
4050: 20 20 2a 20 54 65 73 74 20 74 69 74 6c 65 20 28    * Test title (
4060: 66 6f 72 20 64 69 73 70 6c 61 79 29 2e 0a 23 20  for display)..# 
4070: 20 20 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20    * The name of 
4080: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 74 6f  the directory to
4090: 20 72 75 6e 20 74 68 65 20 74 65 73 74 20 69 6e   run the test in
40a0: 2e 0a 23 20 20 20 2a 20 54 68 65 20 61 72 67 75  ..#   * The argu
40b0: 6d 65 6e 74 20 66 6f 72 20 5b 63 6f 6e 66 69 67  ment for [config
40c0: 75 72 65 43 6f 6d 6d 61 6e 64 5d 0a 23 20 20 20  ureCommand].#   
40d0: 2a 20 54 68 65 20 66 69 72 73 74 20 61 72 67 75  * The first argu
40e0: 6d 65 6e 74 20 66 6f 72 20 5b 6d 61 6b 65 43 6f  ment for [makeCo
40f0: 6d 6d 61 6e 64 5d 0a 23 20 20 20 2a 20 54 68 65  mmand].#   * The
4100: 20 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74   second argument
4110: 20 66 6f 72 20 5b 6d 61 6b 65 43 6f 6d 6d 61 6e   for [makeComman
4120: 64 5d 0a 23 20 20 20 2a 20 54 68 65 20 74 68 69  d].#   * The thi
4130: 72 64 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20  rd argument for 
4140: 5b 6d 61 6b 65 43 6f 6d 6d 61 6e 64 5d 0a 23 0a  [makeCommand].#.
4150: 70 72 6f 63 20 72 75 6e 5f 61 6c 6c 5f 74 65 73  proc run_all_tes
4160: 74 5f 73 75 69 74 65 73 20 7b 61 6c 6c 74 65 73  t_suites {alltes
4170: 74 73 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 47  ts} {.  global G
4180: 0a 20 20 73 65 74 20 74 65 73 74 73 20 24 61 6c  .  set tests $al
4190: 6c 74 65 73 74 73 0a 0a 20 20 73 65 74 20 47 28  ltests..  set G(
41a0: 6e 4a 6f 62 29 20 30 0a 0a 20 20 77 68 69 6c 65  nJob) 0..  while
41b0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 74 65 73 74   {[llength $test
41c0: 73 5d 3e 30 20 7c 7c 20 24 47 28 6e 4a 6f 62 29  s]>0 || $G(nJob)
41d0: 3e 30 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 47  >0} {.    if {$G
41e0: 28 6e 4a 6f 62 29 3e 3d 24 3a 3a 4a 4f 42 53 20  (nJob)>=$::JOBS 
41f0: 7c 7c 20 5b 6c 6c 65 6e 67 74 68 20 24 74 65 73  || [llength $tes
4200: 74 73 5d 3d 3d 30 7d 20 7b 0a 20 20 20 20 20 20  ts]==0} {.      
4210: 76 77 61 69 74 20 47 28 6e 4a 6f 62 29 0a 20 20  vwait G(nJob).  
4220: 20 20 7d 0a 0a 20 20 20 20 69 66 20 7b 5b 6c 6c    }..    if {[ll
4230: 65 6e 67 74 68 20 24 74 65 73 74 73 5d 3e 30 7d  ength $tests]>0}
4240: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 54 20 5b   {.      set T [
4250: 6c 69 6e 64 65 78 20 24 74 65 73 74 73 20 30 5d  lindex $tests 0]
4260: 0a 20 20 20 20 20 20 73 65 74 20 74 65 73 74 73  .      set tests
4270: 20 5b 6c 72 61 6e 67 65 20 24 74 65 73 74 73 20   [lrange $tests 
4280: 31 20 65 6e 64 5d 0a 20 20 20 20 20 20 66 6f 72  1 end].      for
4290: 65 61 63 68 20 7b 74 69 74 6c 65 20 64 69 72 20  each {title dir 
42a0: 63 6f 6e 66 69 67 4f 70 74 73 20 74 65 73 74 74  configOpts testt
42b0: 61 72 67 65 74 20 6d 61 6b 65 4f 70 74 73 20 63  arget makeOpts c
42c0: 66 6c 61 67 73 20 6f 70 74 73 7d 20 24 54 20 7b  flags opts} $T {
42d0: 7d 0a 20 20 20 20 20 20 69 66 20 7b 24 3a 3a 50  }.      if {$::P
42e0: 52 4f 47 52 45 53 53 5f 4d 53 47 53 20 26 26 20  ROGRESS_MSGS && 
42f0: 21 24 3a 3a 54 52 41 43 45 7d 20 7b 0a 20 20 20  !$::TRACE} {.   
4300: 20 20 20 20 20 73 65 74 20 6e 20 5b 73 74 72 69       set n [stri
4310: 6e 67 20 6c 65 6e 67 74 68 20 24 74 69 74 6c 65  ng length $title
4320: 5d 0a 20 20 20 20 20 20 20 20 50 55 54 53 20 22  ].        PUTS "
4330: 73 74 61 72 74 69 6e 67 3a 20 24 7b 74 69 74 6c  starting: ${titl
4340: 65 7d 20 61 74 20 5b 6e 6f 77 5d 22 0a 20 20 20  e} at [now]".   
4350: 20 20 20 20 20 66 6c 75 73 68 20 73 74 64 6f 75       flush stdou
4360: 74 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  t.      }..     
4370: 20 23 20 52 75 6e 20 74 68 65 20 6a 6f 62 2e 0a   # Run the job..
4380: 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 73 65        #.      se
4390: 74 20 74 6d 31 20 5b 63 6c 6f 63 6b 20 73 65 63  t tm1 [clock sec
43a0: 6f 6e 64 73 5d 0a 20 20 20 20 20 20 69 6e 63 72  onds].      incr
43b0: 20 47 28 6e 4a 6f 62 29 0a 20 20 20 20 20 20 73   G(nJob).      s
43c0: 65 74 20 73 63 72 69 70 74 20 5b 66 69 6c 65 20  et script [file 
43d0: 6e 6f 72 6d 61 6c 69 7a 65 20 5b 69 6e 66 6f 20  normalize [info 
43e0: 73 63 72 69 70 74 5d 5d 0a 20 20 20 20 20 20 73  script]].      s
43f0: 65 74 20 66 64 20 5b 6f 70 65 6e 20 22 7c 5b 69  et fd [open "|[i
4400: 6e 66 6f 20 6e 61 6d 65 6f 66 65 78 65 63 75 74  nfo nameofexecut
4410: 61 62 6c 65 5d 20 24 73 63 72 69 70 74 20 2d 2d  able] $script --
4420: 73 6c 61 76 65 22 20 72 2b 5d 0a 20 20 20 20 20  slave" r+].     
4430: 20 66 63 6f 6e 66 69 67 75 72 65 20 24 66 64 20   fconfigure $fd 
4440: 2d 62 6c 6f 63 6b 69 6e 67 20 30 0a 20 20 20 20  -blocking 0.    
4450: 20 20 66 69 6c 65 65 76 65 6e 74 20 24 66 64 20    fileevent $fd 
4460: 72 65 61 64 61 62 6c 65 20 5b 6c 69 73 74 20 73  readable [list s
4470: 6c 61 76 65 5f 66 69 6c 65 65 76 65 6e 74 20 24  lave_fileevent $
4480: 66 64 20 24 54 20 24 74 6d 31 5d 0a 20 20 20 20  fd $T $tm1].    
4490: 20 20 70 75 74 73 20 24 66 64 20 5b 6c 69 73 74    puts $fd [list
44a0: 20 24 3a 3a 54 52 41 43 45 20 24 3a 3a 4d 53 56   $::TRACE $::MSV
44b0: 43 20 24 3a 3a 44 52 59 52 55 4e 20 24 3a 3a 4b  C $::DRYRUN $::K
44c0: 45 45 50 46 49 4c 45 53 5d 0a 20 20 20 20 20 20  EEPFILES].      
44d0: 70 75 74 73 20 24 66 64 20 5b 6c 69 73 74 20 7b  puts $fd [list {
44e0: 2a 7d 24 54 5d 0a 20 20 20 20 20 20 66 6c 75 73  *}$T].      flus
44f0: 68 20 24 66 64 0a 20 20 20 20 7d 0a 20 20 7d 0a  h $fd.    }.  }.
4500: 7d 0a 0a 70 72 6f 63 20 61 64 64 5f 74 65 73 74  }..proc add_test
4510: 5f 73 75 69 74 65 20 7b 6c 69 73 74 76 61 72 20  _suite {listvar 
4520: 6e 61 6d 65 20 74 65 73 74 74 61 72 67 65 74 20  name testtarget 
4530: 63 6f 6e 66 69 67 7d 20 7b 0a 20 20 75 70 76 61  config} {.  upva
4540: 72 20 24 6c 69 73 74 76 61 72 20 61 6c 6c 74 65  r $listvar allte
4550: 73 74 73 0a 0a 20 20 23 20 54 63 6c 20 76 61 72  sts..  # Tcl var
4560: 69 61 62 6c 65 20 24 6f 70 74 73 20 69 73 20 75  iable $opts is u
4570: 73 65 64 20 74 6f 20 62 75 69 6c 64 20 75 70 20  sed to build up 
4580: 74 68 65 20 76 61 6c 75 65 20 75 73 65 64 20 74  the value used t
4590: 6f 20 73 65 74 20 74 68 65 0a 20 20 23 20 4f 50  o set the.  # OP
45a0: 54 53 20 4d 61 6b 65 66 69 6c 65 20 76 61 72 69  TS Makefile vari
45b0: 61 62 6c 65 2e 20 56 61 72 69 61 62 6c 65 20 24  able. Variable $
45c0: 63 66 6c 61 67 73 20 68 6f 6c 64 73 20 74 68 65  cflags holds the
45d0: 20 76 61 6c 75 65 20 66 6f 72 0a 20 20 23 20 43   value for.  # C
45e0: 46 4c 41 47 53 2e 20 54 68 65 20 6d 61 6b 65 66  FLAGS. The makef
45f0: 69 6c 65 20 77 69 6c 6c 20 70 61 73 73 20 4f 50  ile will pass OP
4600: 54 53 20 74 6f 20 62 6f 74 68 20 67 63 63 20 61  TS to both gcc a
4610: 6e 64 20 6c 65 6d 6f 6e 2c 20 62 75 74 0a 20 20  nd lemon, but.  
4620: 23 20 43 46 4c 41 47 53 20 69 73 20 6f 6e 6c 79  # CFLAGS is only
4630: 20 70 61 73 73 65 64 20 74 6f 20 67 63 63 2e 0a   passed to gcc..
4640: 20 20 23 0a 20 20 73 65 74 20 6d 61 6b 65 4f 70    #.  set makeOp
4650: 74 73 20 22 22 0a 20 20 73 65 74 20 63 66 6c 61  ts "".  set cfla
4660: 67 73 20 5b 65 78 70 72 20 7b 24 3a 3a 4d 53 56  gs [expr {$::MSV
4670: 43 20 3f 20 22 2d 5a 69 22 20 3a 20 22 2d 67 22  C ? "-Zi" : "-g"
4680: 7d 5d 0a 20 20 73 65 74 20 6f 70 74 73 20 22 22  }].  set opts ""
4690: 0a 20 20 73 65 74 20 74 69 74 6c 65 20 24 7b 6e  .  set title ${n
46a0: 61 6d 65 7d 28 24 74 65 73 74 74 61 72 67 65 74  ame}($testtarget
46b0: 29 0a 20 20 73 65 74 20 63 6f 6e 66 69 67 4f 70  ).  set configOp
46c0: 74 73 20 24 3a 3a 57 49 54 48 54 43 4c 0a 20 20  ts $::WITHTCL.  
46d0: 73 65 74 20 73 6b 69 70 20 30 0a 0a 20 20 72 65  set skip 0..  re
46e0: 67 73 75 62 20 2d 61 6c 6c 20 7b 23 5b 5e 5c 6e  gsub -all {#[^\n
46f0: 5d 2a 5c 6e 7d 20 24 63 6f 6e 66 69 67 20 5c 6e  ]*\n} $config \n
4700: 20 63 6f 6e 66 69 67 0a 20 20 66 6f 72 65 61 63   config.  foreac
4710: 68 20 61 72 67 20 24 63 6f 6e 66 69 67 20 7b 0a  h arg $config {.
4720: 20 20 20 20 69 66 20 7b 24 73 6b 69 70 7d 20 7b      if {$skip} {
4730: 0a 20 20 20 20 20 20 73 65 74 20 73 6b 69 70 20  .      set skip 
4740: 30 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65  0.      continue
4750: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 5b  .    }.    if {[
4760: 72 65 67 65 78 70 20 7b 5e 2d 5b 55 44 5d 7d 20  regexp {^-[UD]} 
4770: 24 61 72 67 5d 7d 20 7b 0a 20 20 20 20 20 20 6c  $arg]} {.      l
4780: 61 70 70 65 6e 64 20 6f 70 74 73 20 24 61 72 67  append opts $arg
4790: 0a 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b  .    } elseif {[
47a0: 72 65 67 65 78 70 20 7b 5e 5b 41 2d 5a 5d 2b 3d  regexp {^[A-Z]+=
47b0: 7d 20 24 61 72 67 5d 7d 20 7b 0a 20 20 20 20 20  } $arg]} {.     
47c0: 20 6c 61 70 70 65 6e 64 20 74 65 73 74 74 61 72   lappend testtar
47d0: 67 65 74 20 24 61 72 67 0a 20 20 20 20 7d 20 65  get $arg.    } e
47e0: 6c 73 65 69 66 20 7b 5b 72 65 67 65 78 70 20 7b  lseif {[regexp {
47f0: 5e 69 66 3a 28 5b 61 2d 7a 5d 2b 29 28 2e 2a 29  ^if:([a-z]+)(.*)
4800: 7d 20 24 61 72 67 20 61 6c 6c 20 6b 65 79 20 74  } $arg all key t
4810: 61 69 6c 5d 7d 20 7b 0a 20 20 20 20 20 20 23 20  ail]} {.      # 
4820: 41 72 67 75 6d 65 6e 74 73 20 6f 66 20 74 68 65  Arguments of the
4830: 20 66 6f 72 6d 20 27 69 66 3a 6f 73 3d 3d 22 4c   form 'if:os=="L
4840: 69 6e 75 78 22 27 20 77 69 6c 6c 20 63 61 75 73  inux"' will caus
4850: 65 20 74 68 65 20 73 75 62 73 65 71 75 65 6e 74  e the subsequent
4860: 0a 20 20 20 20 20 20 23 20 61 72 67 75 6d 65 6e  .      # argumen
4870: 74 20 74 6f 20 62 65 20 73 6b 69 70 70 65 64 20  t to be skipped 
4880: 69 66 20 74 68 65 20 24 74 63 6c 5f 70 6c 61 74  if the $tcl_plat
4890: 66 6f 72 6d 28 6f 73 29 20 69 73 20 6e 6f 74 20  form(os) is not 
48a0: 22 4c 69 6e 75 78 22 2c 20 66 6f 72 0a 20 20 20  "Linux", for.   
48b0: 20 20 20 23 20 65 78 61 6d 70 6c 65 2e 2e 2e 0a     # example....
48c0: 20 20 20 20 20 20 73 65 74 20 73 6b 69 70 20 5b        set skip [
48d0: 65 78 70 72 20 21 28 5c 24 3a 3a 74 63 6c 5f 70  expr !(\$::tcl_p
48e0: 6c 61 74 66 6f 72 6d 28 24 6b 65 79 29 24 74 61  latform($key)$ta
48f0: 69 6c 29 5d 0a 20 20 20 20 7d 20 65 6c 73 65 69  il)].    } elsei
4900: 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 2d 2d 28  f {[regexp {^--(
4910: 65 6e 61 62 6c 65 7c 64 69 73 61 62 6c 65 29 2d  enable|disable)-
4920: 7d 20 24 61 72 67 5d 7d 20 7b 0a 20 20 20 20 20  } $arg]} {.     
4930: 20 69 66 20 7b 24 3a 3a 4d 53 56 43 7d 20 7b 0a   if {$::MSVC} {.
4940: 20 20 20 20 20 20 20 20 69 66 20 7b 24 61 72 67          if {$arg
4950: 20 65 71 20 22 2d 2d 64 69 73 61 62 6c 65 2d 61   eq "--disable-a
4960: 6d 61 6c 67 61 6d 61 74 69 6f 6e 22 7d 20 7b 0a  malgamation"} {.
4970: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
4980: 64 20 6d 61 6b 65 4f 70 74 73 20 55 53 45 5f 41  d makeOpts USE_A
4990: 4d 41 4c 47 41 4d 41 54 49 4f 4e 3d 30 0a 20 20  MALGAMATION=0.  
49a0: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
49b0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
49c0: 20 20 20 69 66 20 7b 24 61 72 67 20 65 71 20 22     if {$arg eq "
49d0: 2d 2d 64 69 73 61 62 6c 65 2d 73 68 61 72 65 64  --disable-shared
49e0: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 6c  "} {.          l
49f0: 61 70 70 65 6e 64 20 6d 61 6b 65 4f 70 74 73 20  append makeOpts 
4a00: 55 53 45 5f 43 52 54 5f 44 4c 4c 3d 30 20 44 59  USE_CRT_DLL=0 DY
4a10: 4e 41 4d 49 43 5f 53 48 45 4c 4c 3d 30 0a 20 20  NAMIC_SHELL=0.  
4a20: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
4a30: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4a40: 20 20 20 69 66 20 7b 24 61 72 67 20 65 71 20 22     if {$arg eq "
4a50: 2d 2d 65 6e 61 62 6c 65 2d 66 74 73 35 22 7d 20  --enable-fts5"} 
4a60: 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70  {.          lapp
4a70: 65 6e 64 20 6f 70 74 73 20 2d 44 53 51 4c 49 54  end opts -DSQLIT
4a80: 45 5f 45 4e 41 42 4c 45 5f 46 54 53 35 0a 20 20  E_ENABLE_FTS5.  
4a90: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
4aa0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4ab0: 20 20 20 69 66 20 7b 24 61 72 67 20 65 71 20 22     if {$arg eq "
4ac0: 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 22 7d  --enable-json1"}
4ad0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70   {.          lap
4ae0: 70 65 6e 64 20 6f 70 74 73 20 2d 44 53 51 4c 49  pend opts -DSQLI
4af0: 54 45 5f 45 4e 41 42 4c 45 5f 4a 53 4f 4e 31 0a  TE_ENABLE_JSON1.
4b00: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
4b10: 75 65 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ue.        }.   
4b20: 20 20 20 20 20 69 66 20 7b 24 61 72 67 20 65 71       if {$arg eq
4b30: 20 22 2d 2d 65 6e 61 62 6c 65 2d 73 68 61 72 65   "--enable-share
4b40: 64 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  d"} {.          
4b50: 6c 61 70 70 65 6e 64 20 6d 61 6b 65 4f 70 74 73  lappend makeOpts
4b60: 20 55 53 45 5f 43 52 54 5f 44 4c 4c 3d 31 20 44   USE_CRT_DLL=1 D
4b70: 59 4e 41 4d 49 43 5f 53 48 45 4c 4c 3d 31 0a 20  YNAMIC_SHELL=1. 
4b80: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
4b90: 65 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  e.        }.    
4ba0: 20 20 7d 0a 20 20 20 20 20 20 6c 61 70 70 65 6e    }.      lappen
4bb0: 64 20 63 6f 6e 66 69 67 4f 70 74 73 20 24 61 72  d configOpts $ar
4bc0: 67 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20  g.    } else {. 
4bd0: 20 20 20 20 20 69 66 20 7b 24 3a 3a 4d 53 56 43       if {$::MSVC
4be0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 69 66 20 7b  } {.        if {
4bf0: 24 61 72 67 20 65 71 20 22 2d 67 22 7d 20 7b 0a  $arg eq "-g"} {.
4c00: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
4c10: 64 20 63 66 6c 61 67 73 20 2d 5a 69 0a 20 20 20  d cflags -Zi.   
4c20: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a         continue.
4c30: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4c40: 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 2d    if {[regexp --
4c50: 20 7b 5e 2d 4f 28 5c 64 2b 29 24 7d 20 24 61 72   {^-O(\d+)$} $ar
4c60: 67 20 61 6c 6c 20 6c 65 76 65 6c 5d 7d 20 74 68  g all level]} th
4c70: 65 6e 20 7b 0a 20 20 20 20 20 20 20 20 20 20 6c  en {.          l
4c80: 61 70 70 65 6e 64 20 6d 61 6b 65 4f 70 74 73 20  append makeOpts 
4c90: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 3d 24 6c  OPTIMIZATIONS=$l
4ca0: 65 76 65 6c 0a 20 20 20 20 20 20 20 20 20 20 63  evel.          c
4cb0: 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20 20 20  ontinue.        
4cc0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
4cd0: 6c 61 70 70 65 6e 64 20 63 66 6c 61 67 73 20 24  lappend cflags $
4ce0: 61 72 67 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  arg.    }.  }.. 
4cf0: 20 23 20 44 69 73 61 62 6c 65 20 73 79 6e 63 20   # Disable sync 
4d00: 74 6f 20 6d 61 6b 65 20 74 65 73 74 69 6e 67 20  to make testing 
4d10: 66 61 73 74 65 72 2e 0a 20 20 23 0a 20 20 6c 61  faster..  #.  la
4d20: 70 70 65 6e 64 20 6f 70 74 73 20 2d 44 53 51 4c  ppend opts -DSQL
4d30: 49 54 45 5f 4e 4f 5f 53 59 4e 43 3d 31 0a 0a 20  ITE_NO_SYNC=1.. 
4d40: 20 23 20 53 6f 6d 65 20 63 6f 6e 66 69 67 75 72   # Some configur
4d50: 61 74 69 6f 6e 73 20 61 6c 72 65 61 64 79 20 73  ations already s
4d60: 65 74 20 48 41 56 45 5f 55 53 4c 45 45 50 3b 20  et HAVE_USLEEP; 
4d70: 69 6e 20 74 68 61 74 20 63 61 73 65 2c 20 73 6b  in that case, sk
4d80: 69 70 20 69 74 2e 0a 20 20 23 0a 20 20 69 66 20  ip it..  #.  if 
4d90: 7b 5b 6c 73 65 61 72 63 68 20 2d 72 65 67 65 78  {[lsearch -regex
4da0: 70 20 24 6f 70 74 73 20 7b 5e 2d 44 48 41 56 45  p $opts {^-DHAVE
4db0: 5f 55 53 4c 45 45 50 28 3f 3a 3d 7c 24 29 7d 5d  _USLEEP(?:=|$)}]
4dc0: 3d 3d 2d 31 7d 20 7b 0a 20 20 20 20 6c 61 70 70  ==-1} {.    lapp
4dd0: 65 6e 64 20 6f 70 74 73 20 2d 44 48 41 56 45 5f  end opts -DHAVE_
4de0: 55 53 4c 45 45 50 3d 31 0a 20 20 7d 0a 0a 20 20  USLEEP=1.  }..  
4df0: 23 20 41 64 64 20 74 68 65 20 64 65 66 69 6e 65  # Add the define
4e00: 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f   for this platfo
4e10: 72 6d 2e 0a 20 20 23 0a 20 20 69 66 20 7b 24 3a  rm..  #.  if {$:
4e20: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c  :tcl_platform(pl
4e30: 61 74 66 6f 72 6d 29 3d 3d 22 77 69 6e 64 6f 77  atform)=="window
4e40: 73 22 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e  s"} {.    lappen
4e50: 64 20 6f 70 74 73 20 2d 44 53 51 4c 49 54 45 5f  d opts -DSQLITE_
4e60: 4f 53 5f 57 49 4e 3d 31 0a 20 20 7d 20 65 6c 73  OS_WIN=1.  } els
4e70: 65 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  e {.    lappend 
4e80: 6f 70 74 73 20 2d 44 53 51 4c 49 54 45 5f 4f 53  opts -DSQLITE_OS
4e90: 5f 55 4e 49 58 3d 31 0a 20 20 7d 0a 0a 20 20 23  _UNIX=1.  }..  #
4ea0: 20 53 65 74 20 74 68 65 20 73 75 62 2d 64 69 72   Set the sub-dir
4eb0: 65 63 74 6f 72 79 20 74 6f 20 75 73 65 2e 0a 20  ectory to use.. 
4ec0: 20 23 0a 20 20 73 65 74 20 64 69 72 20 5b 73 74   #.  set dir [st
4ed0: 72 69 6e 67 20 74 6f 6c 6f 77 65 72 20 5b 73 74  ring tolower [st
4ee0: 72 69 6e 67 20 6d 61 70 20 7b 2d 20 5f 20 22 20  ring map {- _ " 
4ef0: 22 20 5f 7d 20 24 6e 61 6d 65 5d 5d 0a 0a 20 20  " _} $name]]..  
4f00: 23 20 4a 6f 69 6e 20 6f 70 74 69 6f 6e 20 6c 69  # Join option li
4f10: 73 74 73 20 69 6e 74 6f 20 73 74 72 69 6e 67 73  sts into strings
4f20: 2c 20 75 73 69 6e 67 20 73 70 61 63 65 20 61 73  , using space as
4f30: 20 64 65 6c 69 6d 69 74 65 72 2e 0a 20 20 23 0a   delimiter..  #.
4f40: 20 20 73 65 74 20 6d 61 6b 65 4f 70 74 73 20 5b    set makeOpts [
4f50: 6a 6f 69 6e 20 24 6d 61 6b 65 4f 70 74 73 20 22  join $makeOpts "
4f60: 20 22 5d 0a 20 20 73 65 74 20 63 66 6c 61 67 73   "].  set cflags
4f70: 20 20 20 5b 6a 6f 69 6e 20 24 63 66 6c 61 67 73     [join $cflags
4f80: 20 22 20 22 5d 0a 20 20 73 65 74 20 6f 70 74 73   " "].  set opts
4f90: 20 20 20 20 20 5b 6a 6f 69 6e 20 24 6f 70 74 73       [join $opts
4fa0: 20 22 20 22 5d 0a 0a 20 20 6c 61 70 70 65 6e 64   " "]..  lappend
4fb0: 20 61 6c 6c 74 65 73 74 73 20 5b 6c 69 73 74 20   alltests [list 
4fc0: 5c 0a 20 20 20 20 20 20 24 74 69 74 6c 65 20 24  \.      $title $
4fd0: 64 69 72 20 24 63 6f 6e 66 69 67 4f 70 74 73 20  dir $configOpts 
4fe0: 24 74 65 73 74 74 61 72 67 65 74 20 24 6d 61 6b  $testtarget $mak
4ff0: 65 4f 70 74 73 20 24 63 66 6c 61 67 73 20 24 6f  eOpts $cflags $o
5000: 70 74 73 5d 0a 7d 0a 0a 23 20 54 68 65 20 66 6f  pts].}..# The fo
5010: 6c 6c 6f 77 69 6e 67 20 70 72 6f 63 65 64 75 72  llowing procedur
5020: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 22 63  e returns the "c
5030: 6f 6e 66 69 67 75 72 65 22 20 63 6f 6d 6d 61 6e  onfigure" comman
5040: 64 20 74 6f 20 62 65 20 65 78 65 63 74 75 65 64  d to be exectued
5050: 20 66 6f 72 0a 23 20 74 68 65 20 63 75 72 72 65   for.# the curre
5060: 6e 74 20 70 6c 61 74 66 6f 72 6d 2c 20 77 68 69  nt platform, whi
5070: 63 68 20 6d 61 79 20 62 65 20 57 69 6e 64 6f 77  ch may be Window
5080: 73 20 28 76 69 61 20 4d 69 6e 47 57 2c 20 65 74  s (via MinGW, et
5090: 63 29 2e 0a 23 0a 70 72 6f 63 20 63 6f 6e 66 69  c)..#.proc confi
50a0: 67 75 72 65 43 6f 6d 6d 61 6e 64 20 7b 6f 70 74  gureCommand {opt
50b0: 73 7d 20 7b 0a 20 20 69 66 20 7b 24 3a 3a 4d 53  s} {.  if {$::MS
50c0: 56 43 7d 20 72 65 74 75 72 6e 20 5b 6c 69 73 74  VC} return [list
50d0: 5d 3b 20 23 20 54 68 69 73 20 69 73 20 6e 6f 74  ]; # This is not
50e0: 20 6e 65 65 64 65 64 20 66 6f 72 20 4d 53 56 43   needed for MSVC
50f0: 2e 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b  ..  set result [
5100: 6c 69 73 74 20 74 72 61 63 65 5f 63 6d 64 20 65  list trace_cmd e
5110: 78 65 63 5d 0a 20 20 69 66 20 7b 24 3a 3a 74 63  xec].  if {$::tc
5120: 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66  l_platform(platf
5130: 6f 72 6d 29 3d 3d 22 77 69 6e 64 6f 77 73 22 7d  orm)=="windows"}
5140: 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72   {.    lappend r
5150: 65 73 75 6c 74 20 73 68 0a 20 20 7d 0a 20 20 6c  esult sh.  }.  l
5160: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 3a  append result $:
5170: 3a 53 52 43 44 49 52 2f 63 6f 6e 66 69 67 75 72  :SRCDIR/configur
5180: 65 20 2d 2d 65 6e 61 62 6c 65 2d 6c 6f 61 64 2d  e --enable-load-
5190: 65 78 74 65 6e 73 69 6f 6e 0a 20 20 66 6f 72 65  extension.  fore
51a0: 61 63 68 20 78 20 24 6f 70 74 73 20 7b 6c 61 70  ach x $opts {lap
51b0: 70 65 6e 64 20 72 65 73 75 6c 74 20 24 78 7d 0a  pend result $x}.
51c0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
51d0: 20 3e 26 20 74 65 73 74 2e 6c 6f 67 0a 7d 0a 0a   >& test.log.}..
51e0: 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  # The following 
51f0: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e  procedure return
5200: 73 20 74 68 65 20 22 6d 61 6b 65 22 20 63 6f 6d  s the "make" com
5210: 6d 61 6e 64 20 74 6f 20 62 65 20 65 78 65 63 75  mand to be execu
5220: 74 65 64 20 66 6f 72 20 74 68 65 0a 23 20 73 70  ted for the.# sp
5230: 65 63 69 66 69 65 64 20 74 61 72 67 65 74 73 2c  ecified targets,
5240: 20 63 6f 6d 70 69 6c 65 72 20 66 6c 61 67 73 2c   compiler flags,
5250: 20 61 6e 64 20 6f 70 74 69 6f 6e 73 2e 0a 23 0a   and options..#.
5260: 70 72 6f 63 20 6d 61 6b 65 43 6f 6d 6d 61 6e 64  proc makeCommand
5270: 20 7b 20 74 61 72 67 65 74 73 20 6d 61 6b 65 4f   { targets makeO
5280: 70 74 73 20 63 66 6c 61 67 73 20 6f 70 74 73 20  pts cflags opts 
5290: 7d 20 7b 0a 20 20 73 65 74 20 72 65 73 75 6c 74  } {.  set result
52a0: 20 5b 6c 69 73 74 20 74 72 61 63 65 5f 63 6d 64   [list trace_cmd
52b0: 20 65 78 65 63 5d 0a 20 20 69 66 20 7b 24 3a 3a   exec].  if {$::
52c0: 4d 53 56 43 7d 20 7b 0a 20 20 20 20 73 65 74 20  MSVC} {.    set 
52d0: 6e 6d 61 6b 65 44 69 72 20 5b 66 69 6c 65 20 6e  nmakeDir [file n
52e0: 61 74 69 76 65 6e 61 6d 65 20 24 3a 3a 53 52 43  ativename $::SRC
52f0: 44 49 52 5d 0a 20 20 20 20 73 65 74 20 6e 6d 61  DIR].    set nma
5300: 6b 65 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  keFile [file nat
5310: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
5320: 69 6e 20 24 6e 6d 61 6b 65 44 69 72 20 4d 61 6b  in $nmakeDir Mak
5330: 65 66 69 6c 65 2e 6d 73 63 5d 5d 0a 20 20 20 20  efile.msc]].    
5340: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 6e  lappend result n
5350: 6d 61 6b 65 20 2f 66 20 24 6e 6d 61 6b 65 46 69  make /f $nmakeFi
5360: 6c 65 20 54 4f 50 3d 24 6e 6d 61 6b 65 44 69 72  le TOP=$nmakeDir
5370: 0a 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70  .    if {[regexp
5380: 20 7b 55 53 45 5f 53 54 44 43 41 4c 4c 3d 31 7d   {USE_STDCALL=1}
5390: 20 24 63 66 6c 61 67 73 5d 7d 20 7b 0a 20 20 20   $cflags]} {.   
53a0: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
53b0: 74 20 55 53 45 5f 53 54 44 43 41 4c 4c 3d 31 0a  t USE_STDCALL=1.
53c0: 20 20 20 20 7d 0a 20 20 7d 20 65 6c 73 65 20 7b      }.  } else {
53d0: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
53e0: 75 6c 74 20 6d 61 6b 65 0a 20 20 7d 0a 20 20 66  ult make.  }.  f
53f0: 6f 72 65 61 63 68 20 6d 61 6b 65 4f 70 74 20 24  oreach makeOpt $
5400: 6d 61 6b 65 4f 70 74 73 20 7b 0a 20 20 20 20 6c  makeOpts {.    l
5410: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 6d  append result $m
5420: 61 6b 65 4f 70 74 0a 20 20 7d 0a 20 20 6c 61 70  akeOpt.  }.  lap
5430: 70 65 6e 64 20 72 65 73 75 6c 74 20 63 6c 65 61  pend result clea
5440: 6e 0a 20 20 66 6f 72 65 61 63 68 20 74 61 72 67  n.  foreach targ
5450: 65 74 20 24 74 61 72 67 65 74 73 20 7b 0a 20 20  et $targets {.  
5460: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
5470: 20 24 74 61 72 67 65 74 0a 20 20 7d 0a 20 20 6c   $target.  }.  l
5480: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 43 46  append result CF
5490: 4c 41 47 53 3d 24 63 66 6c 61 67 73 20 4f 50 54  LAGS=$cflags OPT
54a0: 53 3d 24 6f 70 74 73 20 3e 3e 26 20 74 65 73 74  S=$opts >>& test
54b0: 2e 6c 6f 67 0a 7d 0a 0a 23 20 54 68 65 20 66 6f  .log.}..# The fo
54c0: 6c 6c 6f 77 69 6e 67 20 70 72 6f 63 65 64 75 72  llowing procedur
54d0: 65 20 70 72 69 6e 74 73 20 69 74 73 20 61 72 67  e prints its arg
54e0: 75 6d 65 6e 74 73 20 69 66 20 3a 3a 54 52 41 43  uments if ::TRAC
54f0: 45 20 69 73 20 74 72 75 65 2e 0a 23 20 41 6e 64  E is true..# And
5500: 20 69 74 20 65 78 65 63 75 74 65 73 20 74 68 65   it executes the
5510: 20 63 6f 6d 6d 61 6e 64 20 6f 66 20 69 74 73 20   command of its 
5520: 61 72 67 75 6d 65 6e 74 73 20 69 6e 20 74 68 65  arguments in the
5530: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 74 65 78 74   calling context
5540: 0a 23 20 69 66 20 3a 3a 44 52 59 52 55 4e 20 69  .# if ::DRYRUN i
5550: 73 20 66 61 6c 73 65 2e 0a 23 0a 70 72 6f 63 20  s false..#.proc 
5560: 74 72 61 63 65 5f 63 6d 64 20 7b 61 72 67 73 7d  trace_cmd {args}
5570: 20 7b 0a 20 20 69 66 20 7b 24 3a 3a 54 52 41 43   {.  if {$::TRAC
5580: 45 7d 20 7b 0a 20 20 20 20 50 55 54 53 20 24 61  E} {.    PUTS $a
5590: 72 67 73 0a 20 20 7d 0a 20 20 73 65 74 20 72 65  rgs.  }.  set re
55a0: 73 20 22 22 0a 20 20 69 66 20 7b 21 24 3a 3a 44  s "".  if {!$::D
55b0: 52 59 52 55 4e 7d 20 7b 0a 20 20 20 20 73 65 74  RYRUN} {.    set
55c0: 20 72 65 73 20 5b 75 70 6c 65 76 65 6c 20 31 20   res [uplevel 1 
55d0: 24 61 72 67 73 5d 0a 20 20 7d 0a 20 20 72 65 74  $args].  }.  ret
55e0: 75 72 6e 20 24 72 65 73 0a 7d 0a 0a 0a 23 20 54  urn $res.}...# T
55f0: 68 69 73 20 70 72 6f 63 20 70 72 6f 63 65 73 73  his proc process
5600: 65 73 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  es the command l
5610: 69 6e 65 20 6f 70 74 69 6f 6e 73 20 70 61 73 73  ine options pass
5620: 65 64 20 74 6f 20 74 68 69 73 20 73 63 72 69 70  ed to this scrip
5630: 74 2e 0a 23 20 43 75 72 72 65 6e 74 6c 79 20 74  t..# Currently t
5640: 68 65 20 6f 6e 6c 79 20 6f 70 74 69 6f 6e 20 73  he only option s
5650: 75 70 70 6f 72 74 65 64 20 69 73 20 22 2d 6d 61  upported is "-ma
5660: 6b 65 66 69 6c 65 22 2c 20 64 65 66 61 75 6c 74  kefile", default
5670: 0a 23 20 22 72 65 6c 65 61 73 65 74 65 73 74 2e  .# "releasetest.
5680: 6d 6b 22 2e 20 53 65 74 20 74 68 65 20 3a 3a 4d  mk". Set the ::M
5690: 41 4b 45 46 49 4c 45 20 76 61 72 69 61 62 6c 65  AKEFILE variable
56a0: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
56b0: 20 74 68 69 73 0a 23 20 6f 70 74 69 6f 6e 2e 0a   this.# option..
56c0: 23 0a 70 72 6f 63 20 70 72 6f 63 65 73 73 5f 6f  #.proc process_o
56d0: 70 74 69 6f 6e 73 20 7b 61 72 67 76 7d 20 7b 0a  ptions {argv} {.
56e0: 20 20 73 65 74 20 3a 3a 53 52 43 44 49 52 20 20    set ::SRCDIR  
56f0: 20 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a    [file normaliz
5700: 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  e [file dirname 
5710: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a  [file dirname $:
5720: 3a 61 72 67 76 30 5d 5d 5d 0a 20 20 73 65 74 20  :argv0]]].  set 
5730: 3a 3a 51 55 49 43 4b 20 20 20 20 20 20 20 20 20  ::QUICK         
5740: 20 30 0a 20 20 73 65 74 20 3a 3a 4d 53 56 43 20   0.  set ::MSVC 
5750: 20 20 20 20 20 20 20 20 20 20 30 0a 20 20 73 65            0.  se
5760: 74 20 3a 3a 42 55 49 4c 44 4f 4e 4c 59 20 20 20  t ::BUILDONLY   
5770: 20 20 20 30 0a 20 20 73 65 74 20 3a 3a 44 52 59     0.  set ::DRY
5780: 52 55 4e 20 20 20 20 20 20 20 20 20 30 0a 20 20  RUN         0.  
5790: 73 65 74 20 3a 3a 54 52 41 43 45 20 20 20 20 20  set ::TRACE     
57a0: 20 20 20 20 20 30 0a 20 20 73 65 74 20 3a 3a 4a       0.  set ::J
57b0: 4f 42 53 20 20 20 20 20 20 20 20 20 20 20 31 0a  OBS           1.
57c0: 20 20 73 65 74 20 3a 3a 50 52 4f 47 52 45 53 53    set ::PROGRESS
57d0: 5f 4d 53 47 53 20 20 30 0a 20 20 73 65 74 20 3a  _MSGS  0.  set :
57e0: 3a 57 49 54 48 54 43 4c 20 20 20 20 20 20 20 20  :WITHTCL        
57f0: 7b 7d 0a 20 20 73 65 74 20 3a 3a 46 4f 52 43 45  {}.  set ::FORCE
5800: 20 20 20 20 20 20 20 20 20 20 30 0a 20 20 73 65            0.  se
5810: 74 20 3a 3a 4b 45 45 50 46 49 4c 45 53 20 20 20  t ::KEEPFILES   
5820: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 3b 23     0          ;#
5830: 20 4b 65 65 70 20 65 78 74 72 61 20 66 69 6c 65   Keep extra file
5840: 73 20 61 66 74 65 72 20 74 65 73 74 20 72 75 6e  s after test run
5850: 0a 20 20 73 65 74 20 63 6f 6e 66 69 67 20 7b 7d  .  set config {}
5860: 0a 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20  .  set platform 
5870: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform(
5880: 6f 73 29 2d 24 3a 3a 74 63 6c 5f 70 6c 61 74 66  os)-$::tcl_platf
5890: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 0a 0a 20 20  orm(machine)..  
58a0: 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24  for {set i 0} {$
58b0: 69 20 3c 20 5b 6c 6c 65 6e 67 74 68 20 24 61 72  i < [llength $ar
58c0: 67 76 5d 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  gv]} {incr i} {.
58d0: 20 20 20 20 73 65 74 20 78 20 5b 6c 69 6e 64 65      set x [linde
58e0: 78 20 24 61 72 67 76 20 24 69 5d 0a 20 20 20 20  x $argv $i].    
58f0: 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 2d 2d  if {[regexp {^--
5900: 5b 61 2d 7a 5d 7d 20 24 78 5d 7d 20 7b 73 65 74  [a-z]} $x]} {set
5910: 20 78 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65   x [string range
5920: 20 24 78 20 31 20 65 6e 64 5d 7d 0a 20 20 20 20   $x 1 end]}.    
5930: 73 77 69 74 63 68 20 2d 67 6c 6f 62 20 2d 2d 20  switch -glob -- 
5940: 24 78 20 7b 0a 20 20 20 20 20 20 2d 73 6c 61 76  $x {.      -slav
5950: 65 20 7b 0a 20 20 20 20 20 20 20 20 72 75 6e 5f  e {.        run_
5960: 73 6c 61 76 65 5f 74 65 73 74 0a 20 20 20 20 20  slave_test.     
5970: 20 20 20 65 78 69 74 0a 20 20 20 20 20 20 7d 0a     exit.      }.
5980: 0a 20 20 20 20 20 20 23 20 55 6e 64 6f 63 75 6d  .      # Undocum
5990: 65 6e 74 65 64 20 6c 65 67 61 63 79 20 6f 70 74  ented legacy opt
59a0: 69 6f 6e 3a 20 2d 2d 73 72 63 64 69 72 20 44 49  ion: --srcdir DI
59b0: 52 45 43 54 4f 52 59 0a 20 20 20 20 20 20 23 0a  RECTORY.      #.
59c0: 20 20 20 20 20 20 23 20 44 49 52 45 43 54 4f 52        # DIRECTOR
59d0: 59 20 69 73 20 74 68 65 20 72 6f 6f 74 20 6f 66  Y is the root of
59e0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 68 65 63   the SQLite chec
59f0: 6b 6f 75 74 2e 20 20 54 68 69 73 20 73 65 74 73  kout.  This sets
5a00: 20 74 68 65 0a 20 20 20 20 20 20 23 20 53 52 43   the.      # SRC
5a10: 44 49 52 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  DIR global varia
5a20: 62 6c 65 2e 20 20 42 75 74 20 74 68 61 74 20 76  ble.  But that v
5a30: 61 72 69 61 62 6c 65 20 69 73 20 61 6c 72 65 61  ariable is alrea
5a40: 64 79 20 73 65 74 0a 20 20 20 20 20 20 23 20 61  dy set.      # a
5a50: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 6f 20  utomatically so 
5a60: 74 68 65 72 65 20 72 65 61 6c 6c 79 20 69 73 20  there really is 
5a70: 6e 6f 20 72 65 61 73 6f 6e 20 74 6f 20 68 61 76  no reason to hav
5a80: 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 2e 0a 20  e this option.. 
5a90: 20 20 20 20 20 23 0a 20 20 20 20 20 20 2d 73 72       #.      -sr
5aa0: 63 64 69 72 20 7b 0a 20 20 20 20 20 20 20 20 69  cdir {.        i
5ab0: 6e 63 72 20 69 0a 20 20 20 20 20 20 20 20 73 65  ncr i.        se
5ac0: 74 20 3a 3a 53 52 43 44 49 52 20 5b 66 69 6c 65  t ::SRCDIR [file
5ad0: 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 6c 69 6e 64   normalize [lind
5ae0: 65 78 20 24 61 72 67 76 20 24 69 5d 5d 0a 20 20  ex $argv $i]].  
5af0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d 70 6c      }..      -pl
5b00: 61 74 66 6f 72 6d 20 7b 0a 20 20 20 20 20 20 20  atform {.       
5b10: 20 69 6e 63 72 20 69 0a 20 20 20 20 20 20 20 20   incr i.        
5b20: 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 6c 69  set platform [li
5b30: 6e 64 65 78 20 24 61 72 67 76 20 24 69 5d 0a 20  ndex $argv $i]. 
5b40: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d 6a       }..      -j
5b50: 6f 62 73 20 7b 0a 20 20 20 20 20 20 20 20 69 6e  obs {.        in
5b60: 63 72 20 69 0a 20 20 20 20 20 20 20 20 73 65 74  cr i.        set
5b70: 20 3a 3a 4a 4f 42 53 20 5b 6c 69 6e 64 65 78 20   ::JOBS [lindex 
5b80: 24 61 72 67 76 20 24 69 5d 0a 20 20 20 20 20 20  $argv $i].      
5b90: 7d 0a 0a 20 20 20 20 20 20 2d 70 72 6f 67 72 65  }..      -progre
5ba0: 73 73 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  ss {.        set
5bb0: 20 3a 3a 50 52 4f 47 52 45 53 53 5f 4d 53 47 53   ::PROGRESS_MSGS
5bc0: 20 31 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20   1.      }..    
5bd0: 20 20 2d 71 75 69 63 6b 20 7b 0a 20 20 20 20 20    -quick {.     
5be0: 20 20 20 73 65 74 20 3a 3a 51 55 49 43 4b 20 31     set ::QUICK 1
5bf0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2d  .      }.      -
5c00: 76 65 72 79 71 75 69 63 6b 20 7b 0a 20 20 20 20  veryquick {.    
5c10: 20 20 20 20 73 65 74 20 3a 3a 51 55 49 43 4b 20      set ::QUICK 
5c20: 32 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  2.      }..     
5c30: 20 2d 63 6f 6e 66 69 67 20 7b 0a 20 20 20 20 20   -config {.     
5c40: 20 20 20 69 6e 63 72 20 69 0a 20 20 20 20 20 20     incr i.      
5c50: 20 20 73 65 74 20 63 6f 6e 66 69 67 20 5b 6c 69    set config [li
5c60: 6e 64 65 78 20 24 61 72 67 76 20 24 69 5d 0a 20  ndex $argv $i]. 
5c70: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d 6d       }..      -m
5c80: 73 76 63 20 7b 0a 20 20 20 20 20 20 20 20 73 65  svc {.        se
5c90: 74 20 3a 3a 4d 53 56 43 20 31 0a 20 20 20 20 20  t ::MSVC 1.     
5ca0: 20 7d 0a 0a 20 20 20 20 20 20 2d 62 75 69 6c 64   }..      -build
5cb0: 6f 6e 6c 79 20 7b 0a 20 20 20 20 20 20 20 20 73  only {.        s
5cc0: 65 74 20 3a 3a 42 55 49 4c 44 4f 4e 4c 59 20 31  et ::BUILDONLY 1
5cd0: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
5ce0: 2d 64 72 79 72 75 6e 20 7b 0a 20 20 20 20 20 20  -dryrun {.      
5cf0: 20 20 73 65 74 20 3a 3a 44 52 59 52 55 4e 20 31    set ::DRYRUN 1
5d00: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
5d10: 2d 66 6f 72 63 65 20 2d 0a 20 20 20 20 20 20 2d  -force -.      -
5d20: 66 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  f {.        set 
5d30: 3a 3a 46 4f 52 43 45 20 31 0a 20 20 20 20 20 20  ::FORCE 1.      
5d40: 7d 0a 0a 20 20 20 20 20 20 2d 74 72 61 63 65 20  }..      -trace 
5d50: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
5d60: 54 52 41 43 45 20 31 0a 20 20 20 20 20 20 7d 0a  TRACE 1.      }.
5d70: 0a 20 20 20 20 20 20 2d 69 6e 66 6f 20 7b 0a 20  .      -info {. 
5d80: 20 20 20 20 20 20 20 50 55 54 53 20 22 43 6f 6d         PUTS "Com
5d90: 6d 61 6e 64 2d 6c 69 6e 65 20 4f 70 74 69 6f 6e  mand-line Option
5da0: 73 3a 22 0a 20 20 20 20 20 20 20 20 50 55 54 53  s:".        PUTS
5db0: 20 22 20 20 20 2d 2d 73 72 63 64 69 72 20 24 3a   "   --srcdir $:
5dc0: 3a 53 52 43 44 49 52 22 0a 20 20 20 20 20 20 20  :SRCDIR".       
5dd0: 20 50 55 54 53 20 22 20 20 20 2d 2d 70 6c 61 74   PUTS "   --plat
5de0: 66 6f 72 6d 20 5b 6c 69 73 74 20 24 70 6c 61 74  form [list $plat
5df0: 66 6f 72 6d 5d 22 0a 20 20 20 20 20 20 20 20 50  form]".        P
5e00: 55 54 53 20 22 20 20 20 2d 2d 63 6f 6e 66 69 67  UTS "   --config
5e10: 20 5b 6c 69 73 74 20 24 63 6f 6e 66 69 67 5d 22   [list $config]"
5e20: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 3a 3a  .        if {$::
5e30: 51 55 49 43 4b 7d 20 7b 0a 20 20 20 20 20 20 20  QUICK} {.       
5e40: 20 20 20 69 66 20 7b 24 3a 3a 51 55 49 43 4b 3d     if {$::QUICK=
5e50: 3d 31 7d 20 7b 50 55 54 53 20 22 20 20 20 2d 2d  =1} {PUTS "   --
5e60: 71 75 69 63 6b 22 7d 0a 20 20 20 20 20 20 20 20  quick"}.        
5e70: 20 20 69 66 20 7b 24 3a 3a 51 55 49 43 4b 3d 3d    if {$::QUICK==
5e80: 32 7d 20 7b 50 55 54 53 20 22 20 20 20 2d 2d 76  2} {PUTS "   --v
5e90: 65 72 79 71 75 69 63 6b 22 7d 0a 20 20 20 20 20  eryquick"}.     
5ea0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20     }.        if 
5eb0: 7b 24 3a 3a 4d 53 56 43 7d 20 20 20 20 20 20 7b  {$::MSVC}      {
5ec0: 50 55 54 53 20 22 20 20 20 2d 2d 6d 73 76 63 22  PUTS "   --msvc"
5ed0: 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 3a  }.        if {$:
5ee0: 3a 42 55 49 4c 44 4f 4e 4c 59 7d 20 7b 50 55 54  :BUILDONLY} {PUT
5ef0: 53 20 22 20 20 20 2d 2d 62 75 69 6c 64 6f 6e 6c  S "   --buildonl
5f00: 79 22 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  y"}.        if {
5f10: 24 3a 3a 44 52 59 52 55 4e 7d 20 20 20 20 7b 50  $::DRYRUN}    {P
5f20: 55 54 53 20 22 20 20 20 2d 2d 64 72 79 72 75 6e  UTS "   --dryrun
5f30: 22 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24  "}.        if {$
5f40: 3a 3a 54 52 41 43 45 7d 20 20 20 20 20 7b 50 55  ::TRACE}     {PU
5f50: 54 53 20 22 20 20 20 2d 2d 74 72 61 63 65 22 7d  TS "   --trace"}
5f60: 0a 20 20 20 20 20 20 20 20 50 55 54 53 20 22 5c  .        PUTS "\
5f70: 6e 41 76 61 69 6c 61 62 6c 65 20 2d 2d 70 6c 61  nAvailable --pla
5f80: 74 66 6f 72 6d 20 6f 70 74 69 6f 6e 73 3a 22 0a  tform options:".
5f90: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
5fa0: 79 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20  y [lsort [array 
5fb0: 6e 61 6d 65 73 20 3a 3a 50 6c 61 74 66 6f 72 6d  names ::Platform
5fc0: 73 5d 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  s]] {.          
5fd0: 50 55 54 53 20 22 20 20 20 5b 6c 69 73 74 20 24  PUTS "   [list $
5fe0: 79 5d 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  y]".        }.  
5ff0: 20 20 20 20 20 20 50 55 54 53 20 22 5c 6e 41 76        PUTS "\nAv
6000: 61 69 6c 61 62 6c 65 20 2d 2d 63 6f 6e 66 69 67  ailable --config
6010: 20 6f 70 74 69 6f 6e 73 3a 22 0a 20 20 20 20 20   options:".     
6020: 20 20 20 66 6f 72 65 61 63 68 20 79 20 5b 6c 73     foreach y [ls
6030: 6f 72 74 20 5b 61 72 72 61 79 20 6e 61 6d 65 73  ort [array names
6040: 20 3a 3a 43 6f 6e 66 69 67 73 5d 5d 20 7b 0a 20   ::Configs]] {. 
6050: 20 20 20 20 20 20 20 20 20 50 55 54 53 20 22 20           PUTS " 
6060: 20 20 5b 6c 69 73 74 20 24 79 5d 22 0a 20 20 20    [list $y]".   
6070: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 65       }.        e
6080: 78 69 74 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  xit.      }..   
6090: 20 20 20 2d 67 20 7b 0a 20 20 20 20 20 20 20 20     -g {.        
60a0: 6c 61 70 70 65 6e 64 20 3a 3a 45 58 54 52 41 43  lappend ::EXTRAC
60b0: 4f 4e 46 49 47 20 5b 6c 69 6e 64 65 78 20 24 61  ONFIG [lindex $a
60c0: 72 67 76 20 24 69 5d 0a 20 20 20 20 20 20 7d 0a  rgv $i].      }.
60d0: 0a 20 20 20 20 20 20 2d 6b 65 65 70 20 7b 0a 20  .      -keep {. 
60e0: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 4b 45 45         set ::KEE
60f0: 50 46 49 4c 45 53 20 31 0a 20 20 20 20 20 20 7d  PFILES 1.      }
6100: 0a 0a 20 20 20 20 20 20 2d 77 69 74 68 2d 74 63  ..      -with-tc
6110: 6c 3d 2a 20 7b 0a 20 20 20 20 20 20 20 20 73 65  l=* {.        se
6120: 74 20 3a 3a 57 49 54 48 54 43 4c 20 2d 24 78 0a  t ::WITHTCL -$x.
6130: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d        }..      -
6140: 44 2a 20 2d 0a 20 20 20 20 20 20 2d 4f 2a 20 2d  D* -.      -O* -
6150: 0a 20 20 20 20 20 20 2d 65 6e 61 62 6c 65 2d 2a  .      -enable-*
6160: 20 2d 0a 20 20 20 20 20 20 2d 64 69 73 61 62 6c   -.      -disabl
6170: 65 2d 2a 20 2d 0a 20 20 20 20 20 20 2a 3d 2a 20  e-* -.      *=* 
6180: 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  {.        lappen
6190: 64 20 3a 3a 45 58 54 52 41 43 4f 4e 46 49 47 20  d ::EXTRACONFIG 
61a0: 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20 24 69  [lindex $argv $i
61b0: 5d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ].      }..     
61c0: 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20   default {.     
61d0: 20 20 20 50 55 54 53 45 52 52 20 22 22 0a 20 20     PUTSERR "".  
61e0: 20 20 20 20 20 20 50 55 54 53 45 52 52 20 5b 73        PUTSERR [s
61f0: 74 72 69 6e 67 20 74 72 69 6d 20 24 3a 3a 55 53  tring trim $::US
6200: 41 47 45 5f 4d 45 53 53 41 47 45 5d 0a 20 20 20  AGE_MESSAGE].   
6210: 20 20 20 20 20 65 78 69 74 20 2d 31 0a 20 20 20       exit -1.   
6220: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a     }.    }.  }..
6230: 20 20 69 66 20 7b 30 3d 3d 5b 69 6e 66 6f 20 65    if {0==[info e
6240: 78 69 73 74 73 20 3a 3a 50 6c 61 74 66 6f 72 6d  xists ::Platform
6250: 73 28 24 70 6c 61 74 66 6f 72 6d 29 5d 7d 20 7b  s($platform)]} {
6260: 0a 20 20 20 20 50 55 54 53 20 22 55 6e 6b 6e 6f  .    PUTS "Unkno
6270: 77 6e 20 70 6c 61 74 66 6f 72 6d 3a 20 24 70 6c  wn platform: $pl
6280: 61 74 66 6f 72 6d 22 0a 20 20 20 20 50 55 54 53  atform".    PUTS
6290: 4e 4e 4c 20 22 53 65 74 20 74 68 65 20 2d 70 6c  NNL "Set the -pl
62a0: 61 74 66 6f 72 6d 20 6f 70 74 69 6f 6e 20 74 6f  atform option to
62b0: 20 22 0a 20 20 20 20 73 65 74 20 70 72 69 6e 74   ".    set print
62c0: 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65   [list].    fore
62d0: 61 63 68 20 70 20 5b 61 72 72 61 79 20 6e 61 6d  ach p [array nam
62e0: 65 73 20 3a 3a 50 6c 61 74 66 6f 72 6d 73 5d 20  es ::Platforms] 
62f0: 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20  {.      lappend 
6300: 70 72 69 6e 74 20 22 5c 22 24 70 5c 22 22 0a 20  print "\"$p\"". 
6310: 20 20 20 7d 0a 20 20 20 20 6c 73 65 74 20 70 72     }.    lset pr
6320: 69 6e 74 20 65 6e 64 20 22 6f 72 20 5b 6c 69 6e  int end "or [lin
6330: 64 65 78 20 24 70 72 69 6e 74 20 65 6e 64 5d 22  dex $print end]"
6340: 0a 20 20 20 20 50 55 54 53 20 22 5b 6a 6f 69 6e  .    PUTS "[join
6350: 20 24 70 72 69 6e 74 20 7b 2c 20 7d 5d 2e 22 0a   $print {, }].".
6360: 20 20 20 20 65 78 69 74 0a 20 20 7d 0a 0a 20 20      exit.  }..  
6370: 69 66 20 7b 24 63 6f 6e 66 69 67 21 3d 22 22 7d  if {$config!=""}
6380: 20 7b 0a 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e   {.    if {[llen
6390: 67 74 68 20 24 63 6f 6e 66 69 67 5d 3d 3d 31 7d  gth $config]==1}
63a0: 20 7b 6c 61 70 70 65 6e 64 20 63 6f 6e 66 69 67   {lappend config
63b0: 20 66 75 6c 6c 74 65 73 74 7d 0a 20 20 20 20 73   fulltest}.    s
63c0: 65 74 20 3a 3a 43 4f 4e 46 49 47 4c 49 53 54 20  et ::CONFIGLIST 
63d0: 24 63 6f 6e 66 69 67 0a 20 20 7d 20 65 6c 73 65  $config.  } else
63e0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 3a 3a 4a 4f   {.    if {$::JO
63f0: 42 53 3e 31 7d 20 7b 0a 20 20 20 20 20 20 73 65  BS>1} {.      se
6400: 74 20 3a 3a 43 4f 4e 46 49 47 4c 49 53 54 20 7b  t ::CONFIGLIST {
6410: 7d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  }.      foreach 
6420: 7b 74 61 72 67 65 74 20 7a 43 6f 6e 66 69 67 7d  {target zConfig}
6430: 20 5b 6c 72 65 76 65 72 73 65 20 24 3a 3a 50 6c   [lreverse $::Pl
6440: 61 74 66 6f 72 6d 73 28 24 70 6c 61 74 66 6f 72  atforms($platfor
6450: 6d 29 5d 20 7b 0a 20 20 20 20 20 20 20 20 61 70  m)] {.        ap
6460: 70 65 6e 64 20 3a 3a 43 4f 4e 46 49 47 4c 49 53  pend ::CONFIGLIS
6470: 54 20 5b 66 6f 72 6d 61 74 20 22 20 20 20 20 25  T [format "    %
6480: 2d 32 35 73 20 25 73 5c 6e 22 20 5c 0a 20 20 20  -25s %s\n" \.   
6490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64a0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69 73              [lis
64b0: 74 20 24 7a 43 6f 6e 66 69 67 5d 20 5b 6c 69 73  t $zConfig] [lis
64c0: 74 20 24 74 61 72 67 65 74 5d 5d 0a 20 20 20 20  t $target]].    
64d0: 20 20 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b    }.    } else {
64e0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 43 4f 4e  .      set ::CON
64f0: 46 49 47 4c 49 53 54 20 24 3a 3a 50 6c 61 74 66  FIGLIST $::Platf
6500: 6f 72 6d 73 28 24 70 6c 61 74 66 6f 72 6d 29 0a  orms($platform).
6510: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 50 55 54 53      }.  }.  PUTS
6520: 20 22 52 75 6e 6e 69 6e 67 20 74 68 65 20 66 6f   "Running the fo
6530: 6c 6c 6f 77 69 6e 67 20 74 65 73 74 20 63 6f 6e  llowing test con
6540: 66 69 67 75 72 61 74 69 6f 6e 73 20 66 6f 72 20  figurations for 
6550: 24 70 6c 61 74 66 6f 72 6d 3a 22 0a 20 20 50 55  $platform:".  PU
6560: 54 53 20 22 20 20 20 20 5b 73 74 72 69 6e 67 20  TS "    [string 
6570: 74 72 69 6d 20 24 3a 3a 43 4f 4e 46 49 47 4c 49  trim $::CONFIGLI
6580: 53 54 5d 22 0a 20 20 50 55 54 53 4e 4e 4c 20 22  ST]".  PUTSNNL "
6590: 46 6c 61 67 73 3a 22 0a 20 20 69 66 20 7b 24 3a  Flags:".  if {$:
65a0: 3a 50 52 4f 47 52 45 53 53 5f 4d 53 47 53 7d 20  :PROGRESS_MSGS} 
65b0: 7b 50 55 54 53 4e 4e 4c 20 22 20 2d 2d 70 72 6f  {PUTSNNL " --pro
65c0: 67 72 65 73 73 22 7d 0a 20 20 69 66 20 7b 24 3a  gress"}.  if {$:
65d0: 3a 44 52 59 52 55 4e 7d 20 7b 50 55 54 53 4e 4e  :DRYRUN} {PUTSNN
65e0: 4c 20 22 20 2d 2d 64 72 79 72 75 6e 22 7d 0a 20  L " --dryrun"}. 
65f0: 20 69 66 20 7b 24 3a 3a 42 55 49 4c 44 4f 4e 4c   if {$::BUILDONL
6600: 59 7d 20 7b 50 55 54 53 4e 4e 4c 20 22 20 2d 2d  Y} {PUTSNNL " --
6610: 62 75 69 6c 64 6f 6e 6c 79 22 7d 0a 20 20 69 66  buildonly"}.  if
6620: 20 7b 24 3a 3a 4d 53 56 43 7d 20 7b 50 55 54 53   {$::MSVC} {PUTS
6630: 4e 4e 4c 20 22 20 2d 2d 6d 73 76 63 22 7d 0a 20  NNL " --msvc"}. 
6640: 20 73 77 69 74 63 68 20 2d 2d 20 24 3a 3a 51 55   switch -- $::QU
6650: 49 43 4b 20 7b 0a 20 20 20 20 20 31 20 7b 50 55  ICK {.     1 {PU
6660: 54 53 4e 4e 4c 20 22 20 2d 2d 71 75 69 63 6b 22  TSNNL " --quick"
6670: 7d 0a 20 20 20 20 20 32 20 7b 50 55 54 53 4e 4e  }.     2 {PUTSNN
6680: 4c 20 22 20 2d 2d 76 65 72 79 71 75 69 63 6b 22  L " --veryquick"
6690: 7d 0a 20 20 7d 0a 20 20 69 66 20 7b 24 3a 3a 4a  }.  }.  if {$::J
66a0: 4f 42 53 3e 31 7d 20 7b 50 55 54 53 4e 4e 4c 20  OBS>1} {PUTSNNL 
66b0: 22 20 2d 2d 6a 6f 62 73 20 24 3a 3a 4a 4f 42 53  " --jobs $::JOBS
66c0: 22 7d 0a 20 20 50 55 54 53 20 22 22 0a 7d 0a 0a  "}.  PUTS "".}..
66d0: 23 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  # Check to see i
66e0: 66 20 74 68 65 72 65 20 61 72 65 20 75 6e 63 6f  f there are unco
66f0: 6d 6d 69 74 74 65 64 20 63 68 61 6e 67 65 73 20  mmitted changes 
6700: 69 6e 20 74 68 65 20 53 51 4c 69 74 65 20 73 6f  in the SQLite so
6710: 75 72 63 65 0a 23 20 63 68 65 63 6b 6f 75 74 2e  urce.# checkout.
6720: 20 20 45 78 69 74 20 69 66 20 74 68 65 72 65 20    Exit if there 
6730: 61 72 65 2e 20 20 45 78 63 65 70 74 3a 20 20 44  are.  Except:  D
6740: 6f 20 6e 6f 74 68 69 6e 67 20 69 66 20 74 68 65  o nothing if the
6750: 20 2d 2d 66 6f 72 63 65 0a 23 20 66 6c 61 67 20   --force.# flag 
6760: 69 73 20 75 73 65 64 2e 20 20 41 6c 73 6f 2c 20  is used.  Also, 
6770: 69 67 6e 6f 72 65 20 74 68 69 73 20 74 65 73 74  ignore this test
6780: 20 69 66 20 74 68 65 20 66 6f 73 73 69 6c 20 62   if the fossil b
6790: 69 6e 61 72 79 20 69 73 0a 23 20 75 6e 61 76 61  inary is.# unava
67a0: 69 6c 61 62 6c 65 2c 20 6f 72 20 69 66 20 74 68  ilable, or if th
67b0: 65 20 73 6f 75 72 63 65 20 74 72 65 65 20 69 73  e source tree is
67c0: 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 66 6f 73   not a valid fos
67d0: 73 69 6c 20 63 68 65 63 6b 6f 75 74 2e 0a 23 0a  sil checkout..#.
67e0: 70 72 6f 63 20 63 68 65 63 6b 5f 75 6e 63 6f 6d  proc check_uncom
67f0: 6d 69 74 74 65 64 20 7b 7d 20 7b 0a 20 20 69 66  mitted {} {.  if
6800: 20 7b 24 3a 3a 46 4f 52 43 45 7d 20 72 65 74 75   {$::FORCE} retu
6810: 72 6e 0a 20 20 73 65 74 20 70 77 64 20 5b 70 77  rn.  set pwd [pw
6820: 64 5d 0a 20 20 63 64 20 24 3a 3a 53 52 43 44 49  d].  cd $::SRCDI
6830: 52 0a 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b  R.  if {[catch {
6840: 65 78 65 63 20 66 6f 73 73 69 6c 20 63 68 61 6e  exec fossil chan
6850: 67 65 73 7d 20 72 65 73 5d 3d 3d 30 20 26 26 20  ges} res]==0 && 
6860: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 72 65  [string trim $re
6870: 73 5d 21 3d 22 22 7d 20 7b 0a 20 20 20 20 70 75  s]!=""} {.    pu
6880: 74 73 20 22 45 52 52 4f 52 3a 20 54 68 65 20 63  ts "ERROR: The c
6890: 68 65 63 6b 2d 6f 75 74 20 63 6f 6e 74 61 69 6e  heck-out contain
68a0: 73 20 75 6e 63 6f 6d 6d 69 74 74 65 64 20 63 68  s uncommitted ch
68b0: 61 6e 67 65 73 3a 22 0a 20 20 20 20 70 75 74 73  anges:".    puts
68c0: 20 24 72 65 73 0a 20 20 20 20 70 75 74 73 20 22   $res.    puts "
68d0: 55 73 65 20 74 68 65 20 2d 66 20 6f 72 20 2d 2d  Use the -f or --
68e0: 66 6f 72 63 65 20 6f 70 74 69 6f 6e 73 20 74 6f  force options to
68f0: 20 6f 76 65 72 72 69 64 65 22 0a 20 20 20 20 65   override".    e
6900: 78 69 74 20 31 0a 20 20 7d 0a 20 20 63 64 20 24  xit 1.  }.  cd $
6910: 70 77 64 0a 7d 0a 0a 23 20 41 20 74 65 73 74 20  pwd.}..# A test 
6920: 72 75 6e 20 68 61 73 20 6a 75 73 74 20 66 69 6e  run has just fin
6930: 69 73 68 65 64 20 69 6e 20 64 69 72 65 63 74 6f  ished in directo
6940: 72 79 20 24 64 69 72 2e 20 54 68 69 73 20 63 6f  ry $dir. This co
6950: 6d 6d 61 6e 64 20 64 65 6c 65 74 65 73 20 61 6c  mmand deletes al
6960: 6c 0a 23 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61  l.# non-essentia
6970: 6c 20 66 69 6c 65 73 20 66 72 6f 6d 20 74 68 65  l files from the
6980: 20 64 69 72 65 63 74 6f 72 79 2e 20 53 70 65 63   directory. Spec
6990: 69 66 69 63 61 6c 6c 79 2c 20 65 76 65 72 79 74  ifically, everyt
69a0: 68 69 6e 67 20 65 78 63 65 70 74 0a 23 0a 23 20  hing except.#.# 
69b0: 20 20 2a 20 54 68 65 20 22 74 65 73 74 66 69 78    * The "testfix
69c0: 74 75 72 65 22 20 61 6e 64 20 22 73 71 6c 69 74  ture" and "sqlit
69d0: 65 33 22 20 62 69 6e 61 72 69 65 73 2c 0a 23 20  e3" binaries,.# 
69e0: 20 20 2a 20 54 68 65 20 22 74 65 73 74 2d 6f 75    * The "test-ou
69f0: 74 2e 6c 6f 67 22 20 61 6e 64 20 22 74 65 73 74  t.log" and "test
6a00: 2e 6c 6f 67 22 20 6c 6f 67 20 66 69 6c 65 73 2e  .log" log files.
6a10: 0a 23 0a 70 72 6f 63 20 63 6c 65 61 6e 75 70 20  .#.proc cleanup 
6a20: 7b 64 69 72 7d 20 7b 0a 20 20 73 65 74 20 4b 28  {dir} {.  set K(
6a30: 74 65 73 74 66 69 78 74 75 72 65 29 20 31 0a 20  testfixture) 1. 
6a40: 20 73 65 74 20 4b 28 74 65 73 74 66 69 78 74 75   set K(testfixtu
6a50: 72 65 2e 65 78 65 29 20 31 0a 20 20 73 65 74 20  re.exe) 1.  set 
6a60: 4b 28 73 71 6c 69 74 65 33 29 20 31 0a 20 20 73  K(sqlite3) 1.  s
6a70: 65 74 20 4b 28 73 71 6c 69 74 65 33 2e 65 78 65  et K(sqlite3.exe
6a80: 29 20 31 0a 20 20 73 65 74 20 4b 28 74 65 73 74  ) 1.  set K(test
6a90: 2d 6f 75 74 2e 74 78 74 29 20 31 0a 20 20 73 65  -out.txt) 1.  se
6aa0: 74 20 4b 28 74 65 73 74 2e 6c 6f 67 29 20 31 0a  t K(test.log) 1.
6ab0: 0a 20 20 66 6f 72 65 61 63 68 20 66 20 5b 67 6c  .  foreach f [gl
6ac0: 6f 62 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5b  ob -nocomplain [
6ad0: 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20 2a  file join $dir *
6ae0: 5d 5d 20 7b 0a 20 20 20 20 73 65 74 20 74 61 69  ]] {.    set tai
6af0: 6c 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 5d  l [file tail $f]
6b00: 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65  .    if {[info e
6b10: 78 69 73 74 73 20 4b 28 24 74 61 69 6c 29 5d 3d  xists K($tail)]=
6b20: 3d 30 7d 20 7b 20 0a 20 20 20 20 20 20 66 69 6c  =0} { .      fil
6b30: 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20  e delete -force 
6b40: 24 66 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  $f.    }.  }.}..
6b50: 0a 23 20 4d 61 69 6e 20 72 6f 75 74 69 6e 65 2e  .# Main routine.
6b60: 0a 23 0a 70 72 6f 63 20 6d 61 69 6e 20 7b 61 72  .#.proc main {ar
6b70: 67 76 7d 20 7b 0a 0a 20 20 23 20 50 72 6f 63 65  gv} {..  # Proce
6b80: 73 73 20 61 6e 79 20 63 6f 6d 6d 61 6e 64 20 6c  ss any command l
6b90: 69 6e 65 20 6f 70 74 69 6f 6e 73 2e 0a 20 20 73  ine options..  s
6ba0: 65 74 20 3a 3a 45 58 54 52 41 43 4f 4e 46 49 47  et ::EXTRACONFIG
6bb0: 20 7b 7d 0a 20 20 70 72 6f 63 65 73 73 5f 6f 70   {}.  process_op
6bc0: 74 69 6f 6e 73 20 24 61 72 67 76 0a 20 20 69 66  tions $argv.  if
6bd0: 20 7b 21 24 3a 3a 44 52 59 52 55 4e 7d 20 63 68   {!$::DRYRUN} ch
6be0: 65 63 6b 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 0a  eck_uncommitted.
6bf0: 20 20 50 55 54 53 20 5b 73 74 72 69 6e 67 20 72    PUTS [string r
6c00: 65 70 65 61 74 20 2a 20 37 39 5d 0a 0a 20 20 73  epeat * 79]..  s
6c10: 65 74 20 3a 3a 4e 45 52 52 20 30 0a 20 20 73 65  et ::NERR 0.  se
6c20: 74 20 3a 3a 4e 54 45 53 54 20 30 0a 20 20 73 65  t ::NTEST 0.  se
6c30: 74 20 3a 3a 4e 54 45 53 54 43 41 53 45 20 30 0a  t ::NTESTCASE 0.
6c40: 20 20 73 65 74 20 3a 3a 4e 45 52 52 43 41 53 45    set ::NERRCASE
6c50: 20 30 0a 20 20 73 65 74 20 3a 3a 53 51 4c 49 54   0.  set ::SQLIT
6c60: 45 5f 56 45 52 53 49 4f 4e 20 7b 7d 0a 20 20 73  E_VERSION {}.  s
6c70: 65 74 20 53 54 41 52 54 54 49 4d 45 20 5b 63 6c  et STARTTIME [cl
6c80: 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 20 20 66  ock seconds].  f
6c90: 6f 72 65 61 63 68 20 7b 7a 43 6f 6e 66 69 67 20  oreach {zConfig 
6ca0: 74 61 72 67 65 74 7d 20 24 3a 3a 43 4f 4e 46 49  target} $::CONFI
6cb0: 47 4c 49 53 54 20 7b 0a 20 20 20 20 69 66 20 7b  GLIST {.    if {
6cc0: 24 3a 3a 4d 53 56 43 20 26 26 20 28 24 7a 43 6f  $::MSVC && ($zCo
6cd0: 6e 66 69 67 20 65 71 20 22 53 61 6e 69 74 69 7a  nfig eq "Sanitiz
6ce0: 65 22 20 7c 7c 20 22 63 68 65 63 6b 73 79 6d 62  e" || "checksymb
6cf0: 6f 6c 73 22 20 69 6e 20 24 74 61 72 67 65 74 0a  ols" in $target.
6d00: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 22 76             || "v
6d10: 61 6c 67 72 69 6e 64 74 65 73 74 22 20 69 6e 20  algrindtest" in 
6d20: 24 74 61 72 67 65 74 29 7d 20 7b 0a 20 20 20 20  $target)} {.    
6d30: 20 20 50 55 54 53 20 22 53 6b 69 70 70 69 6e 67    PUTS "Skipping
6d40: 20 24 7a 43 6f 6e 66 69 67 20 2f 20 24 74 61 72   $zConfig / $tar
6d50: 67 65 74 20 66 6f 72 20 4d 53 56 43 2e 2e 2e 22  get for MSVC..."
6d60: 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a  .      continue.
6d70: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 24 74      }.    if {$t
6d80: 61 72 67 65 74 20 6e 65 20 22 63 68 65 63 6b 73  arget ne "checks
6d90: 79 6d 62 6f 6c 73 22 7d 20 7b 0a 20 20 20 20 20  ymbols"} {.     
6da0: 20 73 77 69 74 63 68 20 2d 2d 20 24 3a 3a 51 55   switch -- $::QU
6db0: 49 43 4b 20 7b 0a 20 20 20 20 20 20 20 20 20 31  ICK {.         1
6dc0: 20 7b 73 65 74 20 74 61 72 67 65 74 20 71 75 69   {set target qui
6dd0: 63 6b 74 65 73 74 7d 0a 20 20 20 20 20 20 20 20  cktest}.        
6de0: 20 32 20 7b 73 65 74 20 74 61 72 67 65 74 20 73   2 {set target s
6df0: 6d 6f 6b 65 74 65 73 74 7d 0a 20 20 20 20 20 20  moketest}.      
6e00: 7d 0a 20 20 20 20 20 20 69 66 20 7b 24 3a 3a 42  }.      if {$::B
6e10: 55 49 4c 44 4f 4e 4c 59 7d 20 7b 0a 20 20 20 20  UILDONLY} {.    
6e20: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 20 74      set target t
6e30: 65 73 74 66 69 78 74 75 72 65 0a 20 20 20 20 20  estfixture.     
6e40: 20 20 20 69 66 20 7b 24 3a 3a 74 63 6c 5f 70 6c     if {$::tcl_pl
6e50: 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29  atform(platform)
6e60: 3d 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 20  =="windows"} {. 
6e70: 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20           append 
6e80: 74 61 72 67 65 74 20 2e 65 78 65 0a 20 20 20 20  target .exe.    
6e90: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
6ea0: 20 20 7d 0a 20 20 20 20 73 65 74 20 63 6f 6e 66    }.    set conf
6eb0: 69 67 5f 6f 70 74 69 6f 6e 73 20 5b 63 6f 6e 63  ig_options [conc
6ec0: 61 74 20 24 3a 3a 43 6f 6e 66 69 67 73 28 24 7a  at $::Configs($z
6ed0: 43 6f 6e 66 69 67 29 20 24 3a 3a 45 58 54 52 41  Config) $::EXTRA
6ee0: 43 4f 4e 46 49 47 5d 0a 0a 20 20 20 20 69 6e 63  CONFIG]..    inc
6ef0: 72 20 4e 54 45 53 54 0a 20 20 20 20 61 64 64 5f  r NTEST.    add_
6f00: 74 65 73 74 5f 73 75 69 74 65 20 61 6c 6c 20 24  test_suite all $
6f10: 7a 43 6f 6e 66 69 67 20 24 74 61 72 67 65 74 20  zConfig $target 
6f20: 24 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 0a  $config_options.
6f30: 0a 20 20 20 20 23 20 49 66 20 74 68 65 20 63 6f  .    # If the co
6f40: 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 63 6c  nfiguration incl
6f50: 75 64 65 64 20 74 68 65 20 53 51 4c 49 54 45 5f  uded the SQLITE_
6f60: 44 45 42 55 47 20 6f 70 74 69 6f 6e 2c 20 74 68  DEBUG option, th
6f70: 65 6e 20 72 65 6d 6f 76 65 0a 20 20 20 20 23 20  en remove.    # 
6f80: 69 74 20 61 6e 64 20 72 75 6e 20 76 65 72 79 71  it and run veryq
6f90: 75 69 63 6b 2e 74 65 73 74 2e 20 49 66 20 69 74  uick.test. If it
6fa0: 20 64 69 64 20 6e 6f 74 20 69 6e 63 6c 75 64 65   did not include
6fb0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 45 42 55   the SQLITE_DEBU
6fc0: 47 20 6f 70 74 69 6f 6e 0a 20 20 20 20 23 20 61  G option.    # a
6fd0: 64 64 20 69 74 20 61 6e 64 20 72 75 6e 20 76 65  dd it and run ve
6fe0: 72 79 71 75 69 63 6b 2e 74 65 73 74 2e 0a 20 20  ryquick.test..  
6ff0: 20 20 69 66 20 7b 24 74 61 72 67 65 74 21 3d 22    if {$target!="
7000: 63 68 65 63 6b 73 79 6d 62 6f 6c 73 22 20 26 26  checksymbols" &&
7010: 20 24 74 61 72 67 65 74 21 3d 22 76 61 6c 67 72   $target!="valgr
7020: 69 6e 64 74 65 73 74 22 0a 20 20 20 20 20 20 20  indtest".       
7030: 20 20 20 20 26 26 20 24 74 61 72 67 65 74 21 3d      && $target!=
7040: 22 66 75 7a 7a 6f 6f 6d 74 65 73 74 22 20 26 26  "fuzzoomtest" &&
7050: 20 21 24 3a 3a 42 55 49 4c 44 4f 4e 4c 59 20 26   !$::BUILDONLY &
7060: 26 20 24 3a 3a 51 55 49 43 4b 3c 32 7d 20 7b 0a  & $::QUICK<2} {.
7070: 20 20 20 20 20 20 73 65 74 20 64 65 62 75 67 5f        set debug_
7080: 69 64 78 20 5b 6c 73 65 61 72 63 68 20 2d 67 6c  idx [lsearch -gl
7090: 6f 62 20 24 63 6f 6e 66 69 67 5f 6f 70 74 69 6f  ob $config_optio
70a0: 6e 73 20 2d 44 53 51 4c 49 54 45 5f 44 45 42 55  ns -DSQLITE_DEBU
70b0: 47 2a 5d 0a 20 20 20 20 20 20 73 65 74 20 78 74  G*].      set xt
70c0: 61 72 67 65 74 20 24 74 61 72 67 65 74 0a 20 20  arget $target.  
70d0: 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20      regsub -all 
70e0: 7b 66 75 6c 6c 74 65 73 74 5b 61 2d 7a 5d 2a 7d  {fulltest[a-z]*}
70f0: 20 24 78 74 61 72 67 65 74 20 74 65 73 74 20 78   $xtarget test x
7100: 74 61 72 67 65 74 0a 20 20 20 20 20 20 72 65 67  target.      reg
7110: 73 75 62 20 2d 61 6c 6c 20 7b 66 75 7a 7a 6f 6f  sub -all {fuzzoo
7120: 6d 74 65 73 74 7d 20 24 78 74 61 72 67 65 74 20  mtest} $xtarget 
7130: 66 75 7a 7a 74 65 73 74 20 78 74 61 72 67 65 74  fuzztest xtarget
7140: 0a 20 20 20 20 20 20 69 66 20 7b 24 64 65 62 75  .      if {$debu
7150: 67 5f 69 64 78 20 3c 20 30 7d 20 7b 0a 20 20 20  g_idx < 0} {.   
7160: 20 20 20 20 20 69 6e 63 72 20 4e 54 45 53 54 0a       incr NTEST.
7170: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63          append c
7180: 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 20 22 20  onfig_options " 
7190: 2d 44 53 51 4c 49 54 45 5f 44 45 42 55 47 3d 31  -DSQLITE_DEBUG=1
71a0: 22 0a 20 20 20 20 20 20 20 20 61 64 64 5f 74 65  ".        add_te
71b0: 73 74 5f 73 75 69 74 65 20 61 6c 6c 20 22 24 7b  st_suite all "${
71c0: 7a 43 6f 6e 66 69 67 7d 5f 64 65 62 75 67 22 20  zConfig}_debug" 
71d0: 24 78 74 61 72 67 65 74 20 24 63 6f 6e 66 69 67  $xtarget $config
71e0: 5f 6f 70 74 69 6f 6e 73 0a 20 20 20 20 20 20 7d  _options.      }
71f0: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
7200: 69 6e 63 72 20 4e 54 45 53 54 0a 20 20 20 20 20  incr NTEST.     
7210: 20 20 20 72 65 67 73 75 62 20 7b 20 2a 2d 44 53     regsub { *-DS
7220: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 5b 5e  QLITE_MEMDEBUG[^
7230: 20 5d 2a 20 2a 7d 20 24 63 6f 6e 66 69 67 5f 6f   ]* *} $config_o
7240: 70 74 69 6f 6e 73 20 7b 20 7d 20 63 6f 6e 66 69  ptions { } confi
7250: 67 5f 6f 70 74 69 6f 6e 73 0a 20 20 20 20 20 20  g_options.      
7260: 20 20 72 65 67 73 75 62 20 7b 20 2a 2d 44 53 51    regsub { *-DSQ
7270: 4c 49 54 45 5f 44 45 42 55 47 5b 5e 20 5d 2a 20  LITE_DEBUG[^ ]* 
7280: 2a 7d 20 24 63 6f 6e 66 69 67 5f 6f 70 74 69 6f  *} $config_optio
7290: 6e 73 20 7b 20 7d 20 63 6f 6e 66 69 67 5f 6f 70  ns { } config_op
72a0: 74 69 6f 6e 73 0a 20 20 20 20 20 20 20 20 61 64  tions.        ad
72b0: 64 5f 74 65 73 74 5f 73 75 69 74 65 20 61 6c 6c  d_test_suite all
72c0: 20 22 24 7b 7a 43 6f 6e 66 69 67 7d 5f 6e 64 65   "${zConfig}_nde
72d0: 62 75 67 22 20 24 78 74 61 72 67 65 74 20 24 63  bug" $xtarget $c
72e0: 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 0a 20 20  onfig_options.  
72f0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
7300: 0a 20 20 72 75 6e 5f 61 6c 6c 5f 74 65 73 74 5f  .  run_all_test_
7310: 73 75 69 74 65 73 20 24 61 6c 6c 0a 0a 20 20 73  suites $all..  s
7320: 65 74 20 65 6c 61 70 73 65 74 69 6d 65 20 5b 65  et elapsetime [e
7330: 78 70 72 20 7b 5b 63 6c 6f 63 6b 20 73 65 63 6f  xpr {[clock seco
7340: 6e 64 73 5d 2d 24 53 54 41 52 54 54 49 4d 45 7d  nds]-$STARTTIME}
7350: 5d 0a 20 20 73 65 74 20 68 72 20 5b 65 78 70 72  ].  set hr [expr
7360: 20 7b 24 65 6c 61 70 73 65 74 69 6d 65 2f 33 36   {$elapsetime/36
7370: 30 30 7d 5d 0a 20 20 73 65 74 20 6d 69 6e 20 5b  00}].  set min [
7380: 65 78 70 72 20 7b 28 24 65 6c 61 70 73 65 74 69  expr {($elapseti
7390: 6d 65 2f 36 30 29 25 36 30 7d 5d 0a 20 20 73 65  me/60)%60}].  se
73a0: 74 20 73 65 63 20 5b 65 78 70 72 20 7b 24 65 6c  t sec [expr {$el
73b0: 61 70 73 65 74 69 6d 65 25 36 30 7d 5d 0a 20 20  apsetime%60}].  
73c0: 73 65 74 20 65 74 69 6d 65 20 5b 66 6f 72 6d 61  set etime [forma
73d0: 74 20 28 25 30 32 64 3a 25 30 32 64 3a 25 30 32  t (%02d:%02d:%02
73e0: 64 29 20 24 68 72 20 24 6d 69 6e 20 24 73 65 63  d) $hr $min $sec
73f0: 5d 0a 20 20 69 66 20 7b 24 3a 3a 4a 4f 42 53 3e  ].  if {$::JOBS>
7400: 31 7d 20 7b 61 70 70 65 6e 64 20 65 74 69 6d 65  1} {append etime
7410: 20 22 20 24 3a 3a 4a 4f 42 53 20 63 6f 72 65 73   " $::JOBS cores
7420: 22 7d 0a 20 20 69 66 20 7b 5b 63 61 74 63 68 20  "}.  if {[catch 
7430: 7b 65 78 65 63 20 68 6f 73 74 6e 61 6d 65 7d 20  {exec hostname} 
7440: 48 4e 41 4d 45 5d 3d 3d 30 7d 20 7b 61 70 70 65  HNAME]==0} {appe
7450: 6e 64 20 65 74 69 6d 65 20 22 20 6f 6e 20 24 48  nd etime " on $H
7460: 4e 41 4d 45 22 7d 0a 20 20 50 55 54 53 20 5b 73  NAME"}.  PUTS [s
7470: 74 72 69 6e 67 20 72 65 70 65 61 74 20 2a 20 37  tring repeat * 7
7480: 39 5d 0a 20 20 69 6e 63 72 20 3a 3a 4e 45 52 52  9].  incr ::NERR
7490: 43 41 53 45 20 24 3a 3a 4e 45 52 52 0a 20 20 50  CASE $::NERR.  P
74a0: 55 54 53 20 22 24 3a 3a 4e 45 52 52 43 41 53 45  UTS "$::NERRCASE
74b0: 20 66 61 69 6c 75 72 65 73 20 6f 75 74 20 6f 66   failures out of
74c0: 20 24 3a 3a 4e 54 45 53 54 43 41 53 45 20 74 65   $::NTESTCASE te
74d0: 73 74 73 20 69 6e 20 24 65 74 69 6d 65 22 0a 20  sts in $etime". 
74e0: 20 69 66 20 7b 24 3a 3a 53 51 4c 49 54 45 5f 56   if {$::SQLITE_V
74f0: 45 52 53 49 4f 4e 20 6e 65 20 22 22 7d 20 7b 0a  ERSION ne ""} {.
7500: 20 20 20 20 50 55 54 53 20 22 53 51 4c 69 74 65      PUTS "SQLite
7510: 20 24 3a 3a 53 51 4c 49 54 45 5f 56 45 52 53 49   $::SQLITE_VERSI
7520: 4f 4e 22 0a 20 20 7d 0a 7d 0a 0a 6d 61 69 6e 20  ON".  }.}..main 
7530: 24 61 72 67 76 0a                                $argv.