/ Hex Artifact Content
Login

Artifact 7712811e0f4e2f198ec786cb2e1352b3793d7395f48a3cceef0572d8823eb75e:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 74 63 6c 73 68  #!/usr/bin/tclsh
0010: 0a 23 0a 23 20 44 6f 63 75 6d 65 6e 74 61 74 69  .#.# Documentati
0020: 6f 6e 20 66 6f 72 20 74 68 69 73 20 73 63 72 69  on for this scri
0030: 70 74 2e 20 54 68 69 73 20 6d 61 79 20 62 65 20  pt. This may be 
0040: 6f 75 74 70 75 74 20 74 6f 20 73 74 64 65 72 72  output to stderr
0050: 0a 23 20 69 66 20 74 68 65 20 73 63 72 69 70 74  .# if the script
0060: 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 6e 63 6f   is invoked inco
0070: 72 72 65 63 74 6c 79 2e 20 53 65 65 20 74 68 65  rrectly. See the
0080: 20 5b 70 72 6f 63 65 73 73 5f 6f 70 74 69 6f 6e   [process_option
0090: 73 5d 0a 23 20 70 72 6f 63 20 62 65 6c 6f 77 2e  s].# proc below.
00a0: 0a 23 0a 73 65 74 20 3a 3a 55 53 41 47 45 5f 4d  .#.set ::USAGE_M
00b0: 45 53 53 41 47 45 20 7b 0a 54 68 69 73 20 54 63  ESSAGE {.This Tc
00c0: 6c 20 73 63 72 69 70 74 20 69 73 20 75 73 65 64  l script is used
00d0: 20 74 6f 20 74 65 73 74 20 74 68 65 20 76 61 72   to test the var
00e0: 69 6f 75 73 20 63 6f 6e 66 69 67 75 72 61 74 69  ious configurati
00f0: 6f 6e 73 20 72 65 71 75 69 72 65 64 0a 62 65 66  ons required.bef
0100: 6f 72 65 20 72 65 6c 65 61 73 69 6e 67 20 61 20  ore releasing a 
0110: 6e 65 77 20 76 65 72 73 69 6f 6e 2e 20 53 75 70  new version. Sup
0120: 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
0130: 69 6e 65 20 6f 70 74 69 6f 6e 73 20 28 61 6c 6c  ine options (all
0140: 0a 6f 70 74 69 6f 6e 61 6c 29 20 61 72 65 3a 0a  .optional) are:.
0150: 0a 20 20 20 20 2d 2d 62 75 69 6c 64 6f 6e 6c 79  .    --buildonly
0160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0170: 20 20 20 20 20 20 20 20 28 4a 75 73 74 20 62 75          (Just bu
0180: 69 6c 64 20 74 65 73 74 66 69 78 74 75 72 65 20  ild testfixture 
0190: 2d 20 64 6f 20 6e 6f 74 20 72 75 6e 29 0a 20 20  - do not run).  
01a0: 20 20 2d 2d 63 6f 6e 66 69 67 20 20 20 43 4f 4e    --config   CON
01b0: 46 49 47 4e 41 4d 45 20 20 20 20 20 20 20 20 20  FIGNAME         
01c0: 20 20 20 20 20 28 52 75 6e 20 6f 6e 6c 79 20 43       (Run only C
01d0: 4f 4e 46 49 47 4e 41 4d 45 29 0a 20 20 20 20 2d  ONFIGNAME).    -
01e0: 2d 64 72 79 72 75 6e 20 20 20 20 20 20 20 20 20  -dryrun         
01f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0200: 20 20 28 50 72 69 6e 74 20 77 68 61 74 20 77 6f    (Print what wo
0210: 75 6c 64 20 68 61 76 65 20 68 61 70 70 65 6e 65  uld have happene
0220: 64 29 0a 20 20 20 20 2d 66 7c 2d 2d 66 6f 72 63  d).    -f|--forc
0230: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
0240: 20 20 20 20 20 20 20 20 20 20 28 52 75 6e 20 65            (Run e
0250: 76 65 6e 20 69 66 20 75 6e 63 6f 6d 6d 69 74 74  ven if uncommitt
0260: 65 64 20 63 68 61 6e 67 65 73 29 0a 20 20 20 20  ed changes).    
0270: 2d 2d 69 6e 66 6f 20 20 20 20 20 20 20 20 20 20  --info          
0280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0290: 20 20 20 28 53 68 6f 77 20 64 69 61 67 6e 6f 73     (Show diagnos
02a0: 74 69 63 20 69 6e 66 6f 29 0a 20 20 20 20 2d 2d  tic info).    --
02b0: 6a 6f 62 73 20 20 20 20 20 4e 20 20 20 20 20 20  jobs     N      
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02d0: 20 28 55 73 65 20 4e 20 70 72 6f 63 65 73 73 65   (Use N processe
02e0: 73 20 2d 20 64 65 66 61 75 6c 74 20 31 29 0a 20  s - default 1). 
02f0: 20 20 20 2d 2d 6b 65 65 70 20 20 20 20 20 20 20     --keep       
0300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0310: 20 20 20 20 20 20 28 44 65 6c 65 74 65 20 6e 6f        (Delete no
0320: 20 66 69 6c 65 73 20 61 66 74 65 72 20 65 61 63   files after eac
0330: 68 20 74 65 73 74 20 72 75 6e 29 0a 20 20 20 20  h test run).    
0340: 2d 2d 6d 73 76 63 20 20 20 20 20 20 20 20 20 20  --msvc          
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0360: 20 20 20 28 55 73 65 20 4d 53 56 43 20 61 73 20     (Use MSVC as 
0370: 74 68 65 20 63 6f 6d 70 69 6c 65 72 29 0a 20 20  the compiler).  
0380: 20 20 2d 2d 70 6c 61 74 66 6f 72 6d 20 50 4c 41    --platform PLA
0390: 54 46 4f 52 4d 20 20 20 20 20 20 20 20 20 20 20  TFORM           
03a0: 20 20 20 20 20 28 73 65 65 20 62 65 6c 6f 77 29       (see below)
03b0: 0a 20 20 20 20 2d 2d 70 72 6f 67 72 65 73 73 20  .    --progress 
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 20 20 28 53 68 6f 77 20 70 72          (Show pr
03e0: 6f 67 72 65 73 73 20 6d 65 73 73 61 67 65 73 29  ogress messages)
03f0: 0a 20 20 20 20 2d 2d 71 75 69 63 6b 20 20 20 20  .    --quick    
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0410: 20 20 20 20 20 20 20 20 28 52 75 6e 20 22 76 65          (Run "ve
0420: 72 79 71 75 69 63 6b 2e 74 65 73 74 22 20 6f 6e  ryquick.test" on
0430: 6c 79 29 0a 20 20 20 20 2d 2d 76 65 72 79 71 75  ly).    --veryqu
0440: 69 63 6b 20 20 20 20 20 20 20 20 20 20 20 20 20  ick             
0450: 20 20 20 20 20 20 20 20 20 20 20 28 52 75 6e 20             (Run 
0460: 22 6d 61 6b 65 20 73 6d 6f 6b 65 74 65 73 74 22  "make smoketest"
0470: 20 6f 6e 6c 79 29 0a 20 20 20 20 2d 2d 77 69 74   only).    --wit
0480: 68 2d 74 63 6c 3d 44 49 52 20 20 20 20 20 20 20  h-tcl=DIR       
0490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 55                (U
04a0: 73 65 20 54 43 4c 20 62 75 69 6c 64 20 61 74 20  se TCL build at 
04b0: 44 49 52 29 0a 0a 54 68 65 20 73 63 72 69 70 74  DIR)..The script
04c0: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
04d0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
04e0: 72 20 2d 2d 70 6c 61 74 66 6f 72 6d 20 75 73 69  r --platform usi
04f0: 6e 67 20 74 68 65 0a 24 74 63 6c 5f 70 6c 61 74  ng the.$tcl_plat
0500: 66 6f 72 6d 28 6f 73 29 20 61 6e 64 20 24 74 63  form(os) and $tc
0510: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69  l_platform(machi
0520: 6e 65 29 20 76 61 72 69 61 62 6c 65 73 2e 20 20  ne) variables.  
0530: 53 75 70 70 6f 72 74 65 64 0a 70 6c 61 74 66 6f  Supported.platfo
0540: 72 6d 73 20 61 72 65 20 22 4c 69 6e 75 78 2d 78  rms are "Linux-x
0550: 38 36 22 2c 20 22 4c 69 6e 75 78 2d 78 38 36 5f  86", "Linux-x86_
0560: 36 34 22 2c 20 22 44 61 72 77 69 6e 2d 69 33 38  64", "Darwin-i38
0570: 36 22 2c 0a 22 44 61 72 77 69 6e 2d 78 38 36 5f  6",."Darwin-x86_
0580: 36 34 22 2c 20 22 57 69 6e 64 6f 77 73 20 4e 54  64", "Windows NT
0590: 2d 69 6e 74 65 6c 22 2c 20 61 6e 64 20 22 57 69  -intel", and "Wi
05a0: 6e 64 6f 77 73 20 4e 54 2d 61 6d 64 36 34 22 2e  ndows NT-amd64".
05b0: 0a 0a 45 76 65 72 79 20 74 65 73 74 20 62 65 67  ..Every test beg
05c0: 69 6e 73 20 77 69 74 68 20 61 20 66 72 65 73 68  ins with a fresh
05d0: 20 72 75 6e 20 6f 66 20 74 68 65 20 63 6f 6e 66   run of the conf
05e0: 69 67 75 72 65 20 73 63 72 69 70 74 20 61 74 20  igure script at 
05f0: 74 68 65 20 74 6f 70 0a 6f 66 20 74 68 65 20 53  the top.of the S
0600: 51 4c 69 74 65 20 73 6f 75 72 63 65 20 74 72 65  QLite source tre
0610: 65 2e 0a 7d 0a 0a 23 20 52 65 74 75 72 6e 20 61  e..}..# Return a
0620: 20 74 69 6d 65 73 74 61 6d 70 20 6f 66 20 74 68   timestamp of th
0630: 65 20 66 6f 72 6d 20 48 48 3a 4d 4d 3a 53 53 0a  e form HH:MM:SS.
0640: 23 0a 70 72 6f 63 20 6e 6f 77 20 7b 7d 20 7b 0a  #.proc now {} {.
0650: 20 20 72 65 74 75 72 6e 20 5b 63 6c 6f 63 6b 20    return [clock 
0660: 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65  format [clock se
0670: 63 6f 6e 64 73 5d 20 2d 66 6f 72 6d 61 74 20 25  conds] -format %
0680: 48 3a 25 4d 3a 25 53 5d 0a 7d 0a 0a 23 20 4f 6d  H:%M:%S].}..# Om
0690: 69 74 20 63 6f 6d 6d 65 6e 74 73 20 28 74 65 78  it comments (tex
06a0: 74 20 62 65 74 77 65 65 6e 20 23 20 61 6e 64 20  t between # and 
06b0: 5c 6e 29 20 69 6e 20 61 20 6c 6f 6e 67 20 6d 75  \n) in a long mu
06c0: 6c 74 69 2d 6c 69 6e 65 20 73 74 72 69 6e 67 2e  lti-line string.
06d0: 0a 23 0a 70 72 6f 63 20 73 74 72 69 70 5f 63 6f  .#.proc strip_co
06e0: 6d 6d 65 6e 74 73 20 7b 69 6e 7d 20 7b 0a 20 20  mments {in} {.  
06f0: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 23 5b 5e  regsub -all {#[^
0700: 5c 6e 5d 2a 5c 6e 7d 20 24 69 6e 20 7b 7d 20 6f  \n]*\n} $in {} o
0710: 75 74 0a 20 20 72 65 74 75 72 6e 20 24 6f 75 74  ut.  return $out
0720: 0a 7d 0a 0a 61 72 72 61 79 20 73 65 74 20 3a 3a  .}..array set ::
0730: 43 6f 6e 66 69 67 73 20 5b 73 74 72 69 70 5f 63  Configs [strip_c
0740: 6f 6d 6d 65 6e 74 73 20 7b 0a 20 20 22 44 65 66  omments {.  "Def
0750: 61 75 6c 74 22 20 7b 0a 20 20 20 20 2d 4f 32 0a  ault" {.    -O2.
0760: 20 20 20 20 2d 2d 64 69 73 61 62 6c 65 2d 61 6d      --disable-am
0770: 61 6c 67 61 6d 61 74 69 6f 6e 20 2d 2d 64 69 73  algamation --dis
0780: 61 62 6c 65 2d 73 68 61 72 65 64 0a 20 20 20 20  able-shared.    
0790: 2d 2d 65 6e 61 62 6c 65 2d 73 65 73 73 69 6f 6e  --enable-session
07a0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e  .    -DSQLITE_EN
07b0: 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a 45  ABLE_DESERIALIZE
07c0: 0a 20 20 7d 0a 20 20 22 53 61 6e 69 74 69 7a 65  .  }.  "Sanitize
07d0: 22 20 7b 0a 20 20 20 20 43 43 3d 63 6c 61 6e 67  " {.    CC=clang
07e0: 20 2d 66 73 61 6e 69 74 69 7a 65 3d 75 6e 64 65   -fsanitize=unde
07f0: 66 69 6e 65 64 0a 20 20 20 20 2d 44 53 51 4c 49  fined.    -DSQLI
0800: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
0810: 20 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 73 65 73      --enable-ses
0820: 73 69 6f 6e 0a 20 20 7d 0a 20 20 22 53 74 64 63  sion.  }.  "Stdc
0830: 61 6c 6c 22 20 7b 0a 20 20 20 20 2d 44 55 53 45  all" {.    -DUSE
0840: 5f 53 54 44 43 41 4c 4c 3d 31 0a 20 20 20 20 2d  _STDCALL=1.    -
0850: 4f 32 0a 20 20 7d 0a 20 20 22 48 61 76 65 2d 4e  O2.  }.  "Have-N
0860: 6f 74 22 20 7b 0a 20 20 20 20 23 20 54 68 65 20  ot" {.    # The 
0870: 22 48 61 76 65 2d 4e 6f 74 22 20 63 6f 6e 66 69  "Have-Not" confi
0880: 67 75 72 61 74 69 6f 6e 20 73 65 74 73 20 61 6c  guration sets al
0890: 6c 20 70 6f 73 73 69 62 6c 65 20 2d 55 48 41 56  l possible -UHAV
08a0: 45 5f 66 65 61 74 75 72 65 20 6f 70 74 69 6f 6e  E_feature option
08b0: 73 0a 20 20 20 20 23 20 69 6e 20 6f 72 64 65 72  s.    # in order
08c0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
08d0: 74 68 65 20 63 6f 64 65 20 77 6f 72 6b 73 20 65  the code works e
08e0: 76 65 6e 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  ven on platforms
08f0: 20 74 68 61 74 20 6c 61 63 6b 0a 20 20 20 20 23   that lack.    #
0900: 20 74 68 65 73 65 20 73 75 70 70 6f 72 74 20 73   these support s
0910: 65 72 76 69 63 65 73 2e 0a 20 20 20 20 2d 44 48  ervices..    -DH
0920: 41 56 45 5f 46 44 41 54 41 53 59 4e 43 3d 30 0a  AVE_FDATASYNC=0.
0930: 20 20 20 20 2d 44 48 41 56 45 5f 47 4d 54 49 4d      -DHAVE_GMTIM
0940: 45 5f 52 3d 30 0a 20 20 20 20 2d 44 48 41 56 45  E_R=0.    -DHAVE
0950: 5f 49 53 4e 41 4e 3d 30 0a 20 20 20 20 2d 44 48  _ISNAN=0.    -DH
0960: 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f 52 3d  AVE_LOCALTIME_R=
0970: 30 0a 20 20 20 20 2d 44 48 41 56 45 5f 4c 4f 43  0.    -DHAVE_LOC
0980: 41 4c 54 49 4d 45 5f 53 3d 30 0a 20 20 20 20 2d  ALTIME_S=0.    -
0990: 44 48 41 56 45 5f 4d 41 4c 4c 4f 43 5f 55 53 41  DHAVE_MALLOC_USA
09a0: 42 4c 45 5f 53 49 5a 45 3d 30 0a 20 20 20 20 2d  BLE_SIZE=0.    -
09b0: 44 48 41 56 45 5f 53 54 52 43 48 52 4e 55 4c 3d  DHAVE_STRCHRNUL=
09c0: 30 0a 20 20 20 20 2d 44 48 41 56 45 5f 55 53 4c  0.    -DHAVE_USL
09d0: 45 45 50 3d 30 0a 20 20 20 20 2d 44 48 41 56 45  EEP=0.    -DHAVE
09e0: 5f 55 54 49 4d 45 3d 30 0a 20 20 7d 0a 20 20 22  _UTIME=0.  }.  "
09f0: 55 6e 6c 6f 63 6b 2d 4e 6f 74 69 66 79 22 20 7b  Unlock-Notify" {
0a00: 0a 20 20 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53  .    -O2.    -DS
0a10: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
0a20: 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 20 20 2d  OCK_NOTIFY.    -
0a30: 44 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41  DSQLITE_THREADSA
0a40: 46 45 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  FE.    -DSQLITE_
0a50: 54 43 4c 5f 44 45 46 41 55 4c 54 5f 46 55 4c 4c  TCL_DEFAULT_FULL
0a60: 4d 55 54 45 58 3d 31 0a 20 20 7d 0a 20 20 22 55  MUTEX=1.  }.  "U
0a70: 73 65 72 2d 41 75 74 68 22 20 7b 0a 20 20 20 20  ser-Auth" {.    
0a80: 2d 4f 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  -O2.    -DSQLITE
0a90: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
0aa0: 54 49 4f 4e 3d 31 0a 20 20 7d 0a 20 20 22 53 65  TION=1.  }.  "Se
0ab0: 63 75 72 65 2d 44 65 6c 65 74 65 22 20 7b 0a 20  cure-Delete" {. 
0ac0: 20 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53 51 4c     -O2.    -DSQL
0ad0: 49 54 45 5f 53 45 43 55 52 45 5f 44 45 4c 45 54  ITE_SECURE_DELET
0ae0: 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  E=1.    -DSQLITE
0af0: 5f 53 4f 55 4e 44 45 58 3d 31 0a 20 20 7d 0a 20  _SOUNDEX=1.  }. 
0b00: 20 22 55 70 64 61 74 65 2d 44 65 6c 65 74 65 2d   "Update-Delete-
0b10: 4c 69 6d 69 74 22 20 7b 0a 20 20 20 20 2d 4f 32  Limit" {.    -O2
0b20: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45  .    -DSQLITE_DE
0b30: 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41  FAULT_FILE_FORMA
0b40: 54 3d 34 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  T=4.    -DSQLITE
0b50: 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
0b60: 45 4c 45 54 45 5f 4c 49 4d 49 54 3d 31 0a 20 20  ELETE_LIMIT=1.  
0b70: 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c    -DSQLITE_ENABL
0b80: 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
0b90: 53 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4c  S.    -DSQLITE_L
0ba0: 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54 43 48  IKE_DOESNT_MATCH
0bb0: 5f 42 4c 4f 42 53 0a 20 20 20 20 2d 44 53 51 4c  _BLOBS.    -DSQL
0bc0: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f  ITE_ENABLE_CURSO
0bd0: 52 5f 48 49 4e 54 53 0a 20 20 20 20 2d 2d 65 6e  R_HINTS.    --en
0be0: 61 62 6c 65 2d 6a 73 6f 6e 31 0a 20 20 7d 0a 20  able-json1.  }. 
0bf0: 20 22 43 68 65 63 6b 2d 53 79 6d 62 6f 6c 73 22   "Check-Symbols"
0c00: 20 7b 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f   {.    -DSQLITE_
0c10: 4d 45 4d 44 45 42 55 47 3d 31 0a 20 20 20 20 2d  MEMDEBUG=1.    -
0c20: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  DSQLITE_ENABLE_F
0c30: 54 53 33 5f 50 41 52 45 4e 54 48 45 53 49 53 3d  TS3_PARENTHESIS=
0c40: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  1.    -DSQLITE_E
0c50: 4e 41 42 4c 45 5f 46 54 53 33 3d 31 0a 20 20 20  NABLE_FTS3=1.   
0c60: 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
0c70: 5f 52 54 52 45 45 3d 31 0a 20 20 20 20 2d 44 53  _RTREE=1.    -DS
0c80: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
0c90: 53 59 53 35 3d 31 0a 20 20 20 20 2d 44 53 51 4c  SYS5=1.    -DSQL
0ca0: 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
0cb0: 53 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  S3=1.    -DSQLIT
0cc0: 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
0cd0: 4d 45 54 41 44 41 54 41 3d 31 0a 20 20 20 20 2d  METADATA=1.    -
0ce0: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55  DSQLITE_ENABLE_U
0cf0: 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d  PDATE_DELETE_LIM
0d00: 49 54 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  IT=1.    -DSQLIT
0d10: 45 5f 53 45 43 55 52 45 5f 44 45 4c 45 54 45 3d  E_SECURE_DELETE=
0d20: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 53  1.    -DSQLITE_S
0d30: 4f 55 4e 44 45 58 3d 31 0a 20 20 20 20 2d 44 53  OUNDEX=1.    -DS
0d40: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
0d50: 4d 49 43 5f 57 52 49 54 45 3d 31 0a 20 20 20 20  MIC_WRITE=1.    
0d60: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
0d70: 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e  MEMORY_MANAGEMEN
0d80: 54 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  T=1.    -DSQLITE
0d90: 5f 45 4e 41 42 4c 45 5f 4f 56 45 52 53 49 5a 45  _ENABLE_OVERSIZE
0da0: 5f 43 45 4c 4c 5f 43 48 45 43 4b 3d 31 0a 20 20  _CELL_CHECK=1.  
0db0: 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c    -DSQLITE_ENABL
0dc0: 45 5f 53 54 41 54 34 0a 20 20 20 20 2d 44 53 51  E_STAT4.    -DSQ
0dd0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
0de0: 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20  _SCANSTATUS.    
0df0: 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 20 2d  --enable-json1 -
0e00: 2d 65 6e 61 62 6c 65 2d 66 74 73 35 20 2d 2d 65  -enable-fts5 --e
0e10: 6e 61 62 6c 65 2d 73 65 73 73 69 6f 6e 0a 20 20  nable-session.  
0e20: 7d 0a 20 20 22 44 65 62 75 67 2d 4f 6e 65 22 20  }.  "Debug-One" 
0e30: 7b 0a 20 20 20 20 2d 2d 64 69 73 61 62 6c 65 2d  {.    --disable-
0e40: 73 68 61 72 65 64 0a 20 20 20 20 2d 4f 32 20 2d  shared.    -O2 -
0e50: 66 75 6e 73 69 67 6e 65 64 2d 63 68 61 72 0a 20  funsigned-char. 
0e60: 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 42 55     -DSQLITE_DEBU
0e70: 47 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  G=1.    -DSQLITE
0e80: 5f 4d 45 4d 44 45 42 55 47 3d 31 0a 20 20 20 20  _MEMDEBUG=1.    
0e90: 2d 44 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e  -DSQLITE_MUTEX_N
0ea0: 4f 4f 50 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  OOP=1.    -DSQLI
0eb0: 54 45 5f 54 43 4c 5f 44 45 46 41 55 4c 54 5f 46  TE_TCL_DEFAULT_F
0ec0: 55 4c 4c 4d 55 54 45 58 3d 31 0a 20 20 20 20 2d  ULLMUTEX=1.    -
0ed0: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  DSQLITE_ENABLE_F
0ee0: 54 53 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  TS3=1.    -DSQLI
0ef0: 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45 3d  TE_ENABLE_RTREE=
0f00: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  1.    -DSQLITE_E
0f10: 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 3d 31 0a  NABLE_MEMSYS5=1.
0f20: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
0f30: 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44  BLE_COLUMN_METAD
0f40: 41 54 41 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  ATA=1.    -DSQLI
0f50: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
0f60: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
0f70: 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
0f80: 4e 53 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  NS.    -DSQLITE_
0f90: 4d 41 58 5f 41 54 54 41 43 48 45 44 3d 31 32 35  MAX_ATTACHED=125
0fa0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4d 55  .    -DSQLITE_MU
0fb0: 54 41 54 49 4f 4e 5f 54 45 53 54 0a 20 20 20 20  TATION_TEST.    
0fc0: 2d 2d 65 6e 61 62 6c 65 2d 66 74 73 35 20 2d 2d  --enable-fts5 --
0fd0: 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 0a 20 20 7d  enable-json1.  }
0fe0: 0a 20 20 22 46 61 73 74 2d 4f 6e 65 22 20 7b 0a  .  "Fast-One" {.
0ff0: 20 20 20 20 2d 4f 36 0a 20 20 20 20 2d 44 53 51      -O6.    -DSQ
1000: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
1010: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
1020: 45 4e 41 42 4c 45 5f 52 54 52 45 45 3d 31 0a 20  ENABLE_RTREE=1. 
1030: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
1040: 4c 45 5f 53 54 41 54 34 0a 20 20 20 20 2d 44 53  LE_STAT4.    -DS
1050: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 42 55  QLITE_ENABLE_RBU
1060: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4d 41  .    -DSQLITE_MA
1070: 58 5f 41 54 54 41 43 48 45 44 3d 31 32 35 0a 20  X_ATTACHED=125. 
1080: 20 20 20 2d 44 4c 4f 4e 47 44 4f 55 42 4c 45 5f     -DLONGDOUBLE_
1090: 54 59 50 45 3d 64 6f 75 62 6c 65 0a 20 20 20 20  TYPE=double.    
10a0: 2d 2d 65 6e 61 62 6c 65 2d 73 65 73 73 69 6f 6e  --enable-session
10b0: 0a 20 20 7d 0a 20 20 22 44 65 76 69 63 65 2d 4f  .  }.  "Device-O
10c0: 6e 65 22 20 7b 0a 20 20 20 20 2d 4f 32 0a 20 20  ne" {.    -O2.  
10d0: 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 42 55 47    -DSQLITE_DEBUG
10e0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
10f0: 44 45 46 41 55 4c 54 5f 41 55 54 4f 56 41 43 55  DEFAULT_AUTOVACU
1100: 55 4d 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  UM=1.    -DSQLIT
1110: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
1120: 53 49 5a 45 3d 36 34 0a 20 20 20 20 2d 44 53 51  SIZE=64.    -DSQ
1130: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 41 47  LITE_DEFAULT_PAG
1140: 45 5f 53 49 5a 45 3d 31 30 32 34 0a 20 20 20 20  E_SIZE=1024.    
1150: 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  -DSQLITE_DEFAULT
1160: 5f 54 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a 45  _TEMP_CACHE_SIZE
1170: 3d 33 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  =32.    -DSQLITE
1180: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 3d 31 0a 20  _DISABLE_LFS=1. 
1190: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
11a0: 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 3d  LE_ATOMIC_WRITE=
11b0: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  1.    -DSQLITE_E
11c0: 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 3d 31 0a  NABLE_IOTRACE=1.
11d0: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
11e0: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
11f0: 45 4d 45 4e 54 3d 31 0a 20 20 20 20 2d 44 53 51  EMENT=1.    -DSQ
1200: 4c 49 54 45 5f 4d 41 58 5f 50 41 47 45 5f 53 49  LITE_MAX_PAGE_SI
1210: 5a 45 3d 34 30 39 36 0a 20 20 20 20 2d 44 53 51  ZE=4096.    -DSQ
1220: 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
1230: 58 54 45 4e 53 49 4f 4e 3d 31 0a 20 20 20 20 2d  XTENSION=1.    -
1240: 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f  DSQLITE_OMIT_PRO
1250: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 3d 31  GRESS_CALLBACK=1
1260: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4f 4d  .    -DSQLITE_OM
1270: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 3d  IT_VIRTUALTABLE=
1280: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  1.    -DSQLITE_E
1290: 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
12a0: 55 4d 4e 53 0a 20 20 20 20 2d 44 53 51 4c 49 54  UMNS.    -DSQLIT
12b0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 33 0a 20  E_TEMP_STORE=3. 
12c0: 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e     --enable-json
12d0: 31 0a 20 20 7d 0a 20 20 22 44 65 76 69 63 65 2d  1.  }.  "Device-
12e0: 54 77 6f 22 20 7b 0a 20 20 20 20 2d 44 53 51 4c  Two" {.    -DSQL
12f0: 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e  ITE_4_BYTE_ALIGN
1300: 45 44 5f 4d 41 4c 4c 4f 43 3d 31 0a 20 20 20 20  ED_MALLOC=1.    
1310: 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  -DSQLITE_DEFAULT
1320: 5f 41 55 54 4f 56 41 43 55 55 4d 3d 31 0a 20 20  _AUTOVACUUM=1.  
1330: 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55    -DSQLITE_DEFAU
1340: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3d 31 30  LT_CACHE_SIZE=10
1350: 30 30 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  00.    -DSQLITE_
1360: 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f  DEFAULT_LOCKING_
1370: 4d 4f 44 45 3d 30 0a 20 20 20 20 2d 44 53 51 4c  MODE=0.    -DSQL
1380: 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 41 47 45  ITE_DEFAULT_PAGE
1390: 5f 53 49 5a 45 3d 31 30 32 34 0a 20 20 20 20 2d  _SIZE=1024.    -
13a0: 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  DSQLITE_DEFAULT_
13b0: 54 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a 45 3d  TEMP_CACHE_SIZE=
13c0: 31 30 30 30 0a 20 20 20 20 2d 44 53 51 4c 49 54  1000.    -DSQLIT
13d0: 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 3d 31 0a  E_DISABLE_LFS=1.
13e0: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
13f0: 42 4c 45 5f 46 54 53 33 3d 31 0a 20 20 20 20 2d  BLE_FTS3=1.    -
1400: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  DSQLITE_ENABLE_M
1410: 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54  EMORY_MANAGEMENT
1420: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
1430: 45 4e 41 42 4c 45 5f 52 54 52 45 45 3d 31 0a 20  ENABLE_RTREE=1. 
1440: 20 20 20 2d 44 53 51 4c 49 54 45 5f 4d 41 58 5f     -DSQLITE_MAX_
1450: 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 3d  COMPOUND_SELECT=
1460: 35 30 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  50.    -DSQLITE_
1470: 4d 41 58 5f 50 41 47 45 5f 53 49 5a 45 3d 33 32  MAX_PAGE_SIZE=32
1480: 37 36 38 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  768.    -DSQLITE
1490: 5f 4f 4d 49 54 5f 54 52 41 43 45 3d 31 0a 20 20  _OMIT_TRACE=1.  
14a0: 20 20 2d 44 53 51 4c 49 54 45 5f 54 45 4d 50 5f    -DSQLITE_TEMP_
14b0: 53 54 4f 52 45 3d 33 0a 20 20 20 20 2d 44 53 51  STORE=3.    -DSQ
14c0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d  LITE_THREADSAFE=
14d0: 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  2.    -DSQLITE_E
14e0: 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a  NABLE_DESERIALIZ
14f0: 45 3d 31 0a 20 20 20 20 2d 2d 65 6e 61 62 6c 65  E=1.    --enable
1500: 2d 6a 73 6f 6e 31 20 2d 2d 65 6e 61 62 6c 65 2d  -json1 --enable-
1510: 66 74 73 35 20 2d 2d 65 6e 61 62 6c 65 2d 73 65  fts5 --enable-se
1520: 73 73 69 6f 6e 0a 20 20 7d 0a 20 20 22 4c 6f 63  ssion.  }.  "Loc
1530: 6b 69 6e 67 2d 53 74 79 6c 65 22 20 7b 0a 20 20  king-Style" {.  
1540: 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53 51 4c 49    -O2.    -DSQLI
1550: 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e  TE_ENABLE_LOCKIN
1560: 47 5f 53 54 59 4c 45 3d 31 0a 20 20 7d 0a 20 20  G_STYLE=1.  }.  
1570: 22 41 70 70 6c 65 22 20 7b 0a 20 20 20 20 2d 4f  "Apple" {.    -O
1580: 73 0a 20 20 20 20 2d 44 48 41 56 45 5f 47 4d 54  s.    -DHAVE_GMT
1590: 49 4d 45 5f 52 3d 31 0a 20 20 20 20 2d 44 48 41  IME_R=1.    -DHA
15a0: 56 45 5f 49 53 4e 41 4e 3d 31 0a 20 20 20 20 2d  VE_ISNAN=1.    -
15b0: 44 48 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f  DHAVE_LOCALTIME_
15c0: 52 3d 31 0a 20 20 20 20 2d 44 48 41 56 45 5f 50  R=1.    -DHAVE_P
15d0: 52 45 41 44 3d 31 0a 20 20 20 20 2d 44 48 41 56  READ=1.    -DHAV
15e0: 45 5f 50 57 52 49 54 45 3d 31 0a 20 20 20 20 2d  E_PWRITE=1.    -
15f0: 44 48 41 56 45 5f 55 53 4c 45 45 50 3d 31 0a 20  DHAVE_USLEEP=1. 
1600: 20 20 20 2d 44 48 41 56 45 5f 55 53 4c 45 45 50     -DHAVE_USLEEP
1610: 3d 31 0a 20 20 20 20 2d 44 48 41 56 45 5f 55 54  =1.    -DHAVE_UT
1620: 49 4d 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  IME=1.    -DSQLI
1630: 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  TE_DEFAULT_CACHE
1640: 5f 53 49 5a 45 3d 31 30 30 30 0a 20 20 20 20 2d  _SIZE=1000.    -
1650: 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  DSQLITE_DEFAULT_
1660: 43 4b 50 54 46 55 4c 4c 46 53 59 4e 43 3d 31 0a  CKPTFULLFSYNC=1.
1670: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 46      -DSQLITE_DEF
1680: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 31  AULT_MEMSTATUS=1
1690: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45  .    -DSQLITE_DE
16a0: 46 41 55 4c 54 5f 50 41 47 45 5f 53 49 5a 45 3d  FAULT_PAGE_SIZE=
16b0: 31 30 32 34 0a 20 20 20 20 2d 44 53 51 4c 49 54  1024.    -DSQLIT
16c0: 45 5f 44 49 53 41 42 4c 45 5f 50 41 47 45 43 41  E_DISABLE_PAGECA
16d0: 43 48 45 5f 4f 56 45 52 46 4c 4f 57 5f 53 54 41  CHE_OVERFLOW_STA
16e0: 54 53 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  TS=1.    -DSQLIT
16f0: 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d  E_ENABLE_API_ARM
1700: 4f 52 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  OR=1.    -DSQLIT
1710: 45 5f 45 4e 41 42 4c 45 5f 41 55 54 4f 5f 50 52  E_ENABLE_AUTO_PR
1720: 4f 46 49 4c 45 3d 31 0a 20 20 20 20 2d 44 53 51  OFILE=1.    -DSQ
1730: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 4c 4f 43  LITE_ENABLE_FLOC
1740: 4b 54 49 4d 45 4f 55 54 3d 31 0a 20 20 20 20 2d  KTIMEOUT=1.    -
1750: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  DSQLITE_ENABLE_F
1760: 54 53 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  TS3=1.    -DSQLI
1770: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 5f 50  TE_ENABLE_FTS3_P
1780: 41 52 45 4e 54 48 45 53 49 53 3d 31 0a 20 20 20  ARENTHESIS=1.   
1790: 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
17a0: 5f 46 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 3d  _FTS3_TOKENIZER=
17b0: 31 0a 20 20 20 20 69 66 3a 6f 73 3d 3d 22 44 61  1.    if:os=="Da
17c0: 72 77 69 6e 22 20 2d 44 53 51 4c 49 54 45 5f 45  rwin" -DSQLITE_E
17d0: 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54  NABLE_LOCKING_ST
17e0: 59 4c 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  YLE=1.    -DSQLI
17f0: 54 45 5f 45 4e 41 42 4c 45 5f 50 45 52 53 49 53  TE_ENABLE_PERSIS
1800: 54 5f 57 41 4c 3d 31 0a 20 20 20 20 2d 44 53 51  T_WAL=1.    -DSQ
1810: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 55 52 47  LITE_ENABLE_PURG
1820: 45 41 42 4c 45 5f 50 43 41 43 48 45 3d 31 0a 20  EABLE_PCACHE=1. 
1830: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
1840: 4c 45 5f 52 54 52 45 45 3d 31 0a 20 20 20 20 2d  LE_RTREE=1.    -
1850: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  DSQLITE_ENABLE_S
1860: 4e 41 50 53 48 4f 54 3d 31 0a 20 20 20 20 23 20  NAPSHOT=1.    # 
1870: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
1880: 53 51 4c 4c 4f 47 3d 31 0a 20 20 20 20 2d 44 53  SQLLOG=1.    -DS
1890: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
18a0: 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
18b0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
18c0: 4d 41 58 5f 4c 45 4e 47 54 48 3d 32 31 34 37 34  MAX_LENGTH=21474
18d0: 38 33 36 34 35 0a 20 20 20 20 2d 44 53 51 4c 49  83645.    -DSQLI
18e0: 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
18f0: 4e 55 4d 42 45 52 3d 35 30 30 30 30 30 0a 20 20  NUMBER=500000.  
1900: 20 20 23 20 2d 44 53 51 4c 49 54 45 5f 4d 45 4d    # -DSQLITE_MEM
1910: 44 45 42 55 47 3d 31 0a 20 20 20 20 2d 44 53 51  DEBUG=1.    -DSQ
1920: 4c 49 54 45 5f 4e 4f 5f 53 59 4e 43 3d 31 0a 20  LITE_NO_SYNC=1. 
1930: 20 20 20 2d 44 53 51 4c 49 54 45 5f 4f 4d 49 54     -DSQLITE_OMIT
1940: 5f 41 55 54 4f 52 45 53 45 54 3d 31 0a 20 20 20  _AUTORESET=1.   
1950: 20 2d 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c   -DSQLITE_OMIT_L
1960: 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 3d 31 0a  OAD_EXTENSION=1.
1970: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 50 52 45      -DSQLITE_PRE
1980: 46 45 52 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e  FER_PROXY_LOCKIN
1990: 47 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  G=1.    -DSQLITE
19a0: 5f 53 45 52 49 45 53 5f 43 4f 4e 53 54 52 41 49  _SERIES_CONSTRAI
19b0: 4e 54 5f 56 45 52 49 46 59 3d 31 0a 20 20 20 20  NT_VERIFY=1.    
19c0: 2d 44 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  -DSQLITE_THREADS
19d0: 41 46 45 3d 32 0a 20 20 20 20 2d 44 53 51 4c 49  AFE=2.    -DSQLI
19e0: 54 45 5f 55 53 45 5f 55 52 49 3d 31 0a 20 20 20  TE_USE_URI=1.   
19f0: 20 2d 44 53 51 4c 49 54 45 5f 57 52 49 54 45 5f   -DSQLITE_WRITE_
1a00: 57 41 4c 46 52 41 4d 45 5f 50 52 45 42 55 46 46  WALFRAME_PREBUFF
1a10: 45 52 45 44 3d 31 0a 20 20 20 20 2d 44 55 53 45  ERED=1.    -DUSE
1a20: 5f 47 55 41 52 44 45 44 5f 46 44 3d 31 0a 20 20  _GUARDED_FD=1.  
1a30: 20 20 2d 44 55 53 45 5f 50 52 45 41 44 3d 31 0a    -DUSE_PREAD=1.
1a40: 20 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f      --enable-jso
1a50: 6e 31 20 2d 2d 65 6e 61 62 6c 65 2d 66 74 73 35  n1 --enable-fts5
1a60: 0a 20 20 7d 0a 20 20 22 45 78 74 72 61 2d 52 6f  .  }.  "Extra-Ro
1a70: 62 75 73 74 6e 65 73 73 22 20 7b 0a 20 20 20 20  bustness" {.    
1a80: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
1a90: 4f 56 45 52 53 49 5a 45 5f 43 45 4c 4c 5f 43 48  OVERSIZE_CELL_CH
1aa0: 45 43 4b 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  ECK=1.    -DSQLI
1ab0: 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3d  TE_MAX_ATTACHED=
1ac0: 36 32 0a 20 20 7d 0a 20 20 22 44 65 76 6b 69 74  62.  }.  "Devkit
1ad0: 22 20 7b 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  " {.    -DSQLITE
1ae0: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
1af0: 52 4d 41 54 3d 34 0a 20 20 20 20 2d 44 53 51 4c  RMAT=4.    -DSQL
1b00: 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1b10: 3d 33 30 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  =30.    -DSQLITE
1b20: 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d  _ENABLE_COLUMN_M
1b30: 45 54 41 44 41 54 41 0a 20 20 20 20 2d 44 53 51  ETADATA.    -DSQ
1b40: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
1b50: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e  .    -DSQLITE_EN
1b60: 41 42 4c 45 5f 46 54 53 35 0a 20 20 20 20 2d 44  ABLE_FTS5.    -D
1b70: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1b80: 53 34 5f 50 41 52 45 4e 54 48 45 53 49 53 0a 20  S4_PARENTHESIS. 
1b90: 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41     -DSQLITE_DISA
1ba0: 42 4c 45 5f 46 54 53 34 5f 44 45 46 45 52 52 45  BLE_FTS4_DEFERRE
1bb0: 44 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  D.    -DSQLITE_E
1bc0: 4e 41 42 4c 45 5f 52 54 52 45 45 0a 20 20 20 20  NABLE_RTREE.    
1bd0: 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 20 2d  --enable-json1 -
1be0: 2d 65 6e 61 62 6c 65 2d 66 74 73 35 0a 20 20 7d  -enable-fts5.  }
1bf0: 0a 20 20 22 4e 6f 2d 6c 6f 6f 6b 61 73 69 64 65  .  "No-lookaside
1c00: 22 20 7b 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  " {.    -DSQLITE
1c10: 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54  _TEST_REALLOC_ST
1c20: 52 45 53 53 3d 31 0a 20 20 20 20 2d 44 53 51 4c  RESS=1.    -DSQL
1c30: 49 54 45 5f 4f 4d 49 54 5f 4c 4f 4f 4b 41 53 49  ITE_OMIT_LOOKASI
1c40: 44 45 3d 31 0a 20 20 20 20 2d 44 48 41 56 45 5f  DE=1.    -DHAVE_
1c50: 55 53 4c 45 45 50 3d 31 0a 20 20 7d 0a 20 20 22  USLEEP=1.  }.  "
1c60: 56 61 6c 67 72 69 6e 64 22 20 7b 0a 20 20 20 20  Valgrind" {.    
1c70: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
1c80: 53 54 41 54 34 0a 20 20 20 20 2d 44 53 51 4c 49  STAT4.    -DSQLI
1c90: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 20  TE_ENABLE_FTS4. 
1ca0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
1cb0: 4c 45 5f 52 54 52 45 45 0a 20 20 20 20 2d 44 53  LE_RTREE.    -DS
1cc0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
1cd0: 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 20 20  DEN_COLUMNS.    
1ce0: 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 0a 20  --enable-json1. 
1cf0: 20 7d 0a 0a 20 20 23 20 54 68 65 20 6e 65 78 74   }..  # The next
1d00: 20 67 72 6f 75 70 20 6f 66 20 63 6f 6e 66 69 67   group of config
1d10: 75 72 61 74 69 6f 6e 73 20 61 72 65 20 75 73 65  urations are use
1d20: 64 20 6f 6e 6c 79 20 62 79 20 74 68 65 0a 20 20  d only by the.  
1d30: 23 20 46 61 69 6c 75 72 65 2d 44 65 74 65 63 74  # Failure-Detect
1d40: 69 6f 6e 20 70 6c 61 74 66 6f 72 6d 2e 20 20 54  ion platform.  T
1d50: 68 65 79 20 61 72 65 20 61 6c 6c 20 74 68 65 20  hey are all the 
1d60: 73 61 6d 65 2c 20 62 75 74 20 77 65 20 6e 65 65  same, but we nee
1d70: 64 0a 20 20 23 20 64 69 66 66 65 72 65 6e 74 20  d.  # different 
1d80: 6e 61 6d 65 73 20 66 6f 72 20 74 68 65 6d 20 61  names for them a
1d90: 6c 6c 20 73 6f 20 74 68 61 74 20 74 68 65 79 20  ll so that they 
1da0: 72 65 73 75 6c 74 73 20 61 70 70 65 61 72 20 69  results appear i
1db0: 6e 20 73 65 70 61 72 61 74 65 0a 20 20 23 20 73  n separate.  # s
1dc0: 75 62 64 69 72 65 63 74 6f 72 69 65 73 2e 0a 20  ubdirectories.. 
1dd0: 20 23 0a 20 20 46 61 69 6c 30 20 7b 2d 4f 30 7d   #.  Fail0 {-O0}
1de0: 0a 20 20 46 61 69 6c 32 20 7b 2d 4f 30 7d 0a 20  .  Fail2 {-O0}. 
1df0: 20 46 61 69 6c 33 20 7b 2d 4f 30 7d 0a 20 20 46   Fail3 {-O0}.  F
1e00: 61 69 6c 34 20 7b 2d 4f 30 7d 0a 20 20 46 75 7a  ail4 {-O0}.  Fuz
1e10: 7a 46 61 69 6c 31 20 7b 2d 4f 30 7d 0a 20 20 46  zFail1 {-O0}.  F
1e20: 75 7a 7a 46 61 69 6c 32 20 7b 2d 4f 30 7d 0a 7d  uzzFail2 {-O0}.}
1e30: 5d 0a 0a 61 72 72 61 79 20 73 65 74 20 3a 3a 50  ]..array set ::P
1e40: 6c 61 74 66 6f 72 6d 73 20 5b 73 74 72 69 70 5f  latforms [strip_
1e50: 63 6f 6d 6d 65 6e 74 73 20 7b 0a 20 20 4c 69 6e  comments {.  Lin
1e60: 75 78 2d 78 38 36 5f 36 34 20 7b 0a 20 20 20 20  ux-x86_64 {.    
1e70: 22 43 68 65 63 6b 2d 53 79 6d 62 6f 6c 73 22 20  "Check-Symbols" 
1e80: 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 73            checks
1e90: 79 6d 62 6f 6c 73 0a 20 20 20 20 22 46 61 73 74  ymbols.    "Fast
1ea0: 2d 4f 6e 65 22 20 20 20 20 20 20 20 20 20 20 20  -One"           
1eb0: 20 20 20 20 20 22 66 75 7a 7a 74 65 73 74 20 74       "fuzztest t
1ec0: 65 73 74 22 0a 20 20 20 20 22 44 65 62 75 67 2d  est".    "Debug-
1ed0: 4f 6e 65 22 20 20 20 20 20 20 20 20 20 20 20 20  One"            
1ee0: 20 20 20 22 6d 70 74 65 73 74 20 74 65 73 74 22     "mptest test"
1ef0: 0a 20 20 20 20 22 48 61 76 65 2d 4e 6f 74 22 20  .    "Have-Not" 
1f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f10: 65 73 74 0a 20 20 20 20 22 53 65 63 75 72 65 2d  est.    "Secure-
1f20: 44 65 6c 65 74 65 22 20 20 20 20 20 20 20 20 20  Delete"         
1f30: 20 20 74 65 73 74 0a 20 20 20 20 22 55 6e 6c 6f    test.    "Unlo
1f40: 63 6b 2d 4e 6f 74 69 66 79 22 20 20 20 20 20 20  ck-Notify"      
1f50: 20 20 20 20 20 22 51 55 49 43 4b 54 45 53 54 5f       "QUICKTEST_
1f60: 49 4e 43 4c 55 44 45 3d 6e 6f 74 69 66 79 32 2e  INCLUDE=notify2.
1f70: 74 65 73 74 20 74 65 73 74 22 0a 20 20 20 20 22  test test".    "
1f80: 55 73 65 72 2d 41 75 74 68 22 20 20 20 20 20 20  User-Auth"      
1f90: 20 20 20 20 20 20 20 20 20 74 63 6c 74 65 73 74           tcltest
1fa0: 0a 20 20 20 20 22 55 70 64 61 74 65 2d 44 65 6c  .    "Update-Del
1fb0: 65 74 65 2d 4c 69 6d 69 74 22 20 20 20 20 20 74  ete-Limit"     t
1fc0: 65 73 74 0a 20 20 20 20 22 45 78 74 72 61 2d 52  est.    "Extra-R
1fd0: 6f 62 75 73 74 6e 65 73 73 22 20 20 20 20 20 20  obustness"      
1fe0: 20 20 74 65 73 74 0a 20 20 20 20 22 44 65 76 69    test.    "Devi
1ff0: 63 65 2d 54 77 6f 22 20 20 20 20 20 20 20 20 20  ce-Two"         
2000: 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22 4e       test.    "N
2010: 6f 2d 6c 6f 6f 6b 61 73 69 64 65 22 20 20 20 20  o-lookaside"    
2020: 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20 20          test.   
2030: 20 22 44 65 76 6b 69 74 22 20 20 20 20 20 20 20   "Devkit"       
2040: 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 0a             test.
2050: 20 20 20 20 22 41 70 70 6c 65 22 20 20 20 20 20      "Apple"     
2060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
2070: 73 74 0a 20 20 20 20 22 53 61 6e 69 74 69 7a 65  st.    "Sanitize
2080: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
2090: 20 7b 51 55 49 43 4b 54 45 53 54 5f 4f 4d 49 54   {QUICKTEST_OMIT
20a0: 3d 66 75 6e 63 34 2e 74 65 73 74 2c 6e 61 6e 2e  =func4.test,nan.
20b0: 74 65 73 74 20 74 65 73 74 7d 0a 20 20 20 20 22  test test}.    "
20c0: 44 65 76 69 63 65 2d 4f 6e 65 22 20 20 20 20 20  Device-One"     
20d0: 20 20 20 20 20 20 20 20 20 66 75 6c 6c 74 65 73           fulltes
20e0: 74 0a 20 20 20 20 22 44 65 66 61 75 6c 74 22 20  t.    "Default" 
20f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2100: 22 74 68 72 65 61 64 74 65 73 74 20 66 75 6c 6c  "threadtest full
2110: 74 65 73 74 22 0a 20 20 20 20 22 56 61 6c 67 72  test".    "Valgr
2120: 69 6e 64 22 20 20 20 20 20 20 20 20 20 20 20 20  ind"            
2130: 20 20 20 20 76 61 6c 67 72 69 6e 64 74 65 73 74      valgrindtest
2140: 0a 20 20 7d 0a 20 20 4c 69 6e 75 78 2d 69 36 38  .  }.  Linux-i68
2150: 36 20 7b 0a 20 20 20 20 22 44 65 76 6b 69 74 22  6 {.    "Devkit"
2160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2170: 20 20 74 65 73 74 0a 20 20 20 20 22 48 61 76 65    test.    "Have
2180: 2d 4e 6f 74 22 20 20 20 20 20 20 20 20 20 20 20  -Not"           
2190: 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22 55       test.    "U
21a0: 6e 6c 6f 63 6b 2d 4e 6f 74 69 66 79 22 20 20 20  nlock-Notify"   
21b0: 20 20 20 20 20 20 20 20 22 51 55 49 43 4b 54 45          "QUICKTE
21c0: 53 54 5f 49 4e 43 4c 55 44 45 3d 6e 6f 74 69 66  ST_INCLUDE=notif
21d0: 79 32 2e 74 65 73 74 20 74 65 73 74 22 0a 20 20  y2.test test".  
21e0: 20 20 22 44 65 76 69 63 65 2d 4f 6e 65 22 20 20    "Device-One"  
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
2200: 0a 20 20 20 20 22 44 65 76 69 63 65 2d 54 77 6f  .    "Device-Two
2210: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  "              t
2220: 65 73 74 0a 20 20 20 20 22 44 65 66 61 75 6c 74  est.    "Default
2230: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
2240: 20 20 22 74 68 72 65 61 64 74 65 73 74 20 66 75    "threadtest fu
2250: 6c 6c 74 65 73 74 22 0a 20 20 7d 0a 20 20 44 61  lltest".  }.  Da
2260: 72 77 69 6e 2d 69 33 38 36 20 7b 0a 20 20 20 20  rwin-i386 {.    
2270: 22 4c 6f 63 6b 69 6e 67 2d 53 74 79 6c 65 22 20  "Locking-Style" 
2280: 20 20 20 20 20 20 20 20 20 20 22 6d 70 74 65 73            "mptes
2290: 74 20 74 65 73 74 22 0a 20 20 20 20 22 48 61 76  t test".    "Hav
22a0: 65 2d 4e 6f 74 22 20 20 20 20 20 20 20 20 20 20  e-Not"          
22b0: 20 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22        test.    "
22c0: 41 70 70 6c 65 22 20 20 20 20 20 20 20 20 20 20  Apple"          
22d0: 20 20 20 20 20 20 20 20 20 22 74 68 72 65 61 64           "thread
22e0: 74 65 73 74 20 66 75 6c 6c 74 65 73 74 22 0a 20  test fulltest". 
22f0: 20 7d 0a 20 20 44 61 72 77 69 6e 2d 78 38 36 5f   }.  Darwin-x86_
2300: 36 34 20 7b 0a 20 20 20 20 22 4c 6f 63 6b 69 6e  64 {.    "Lockin
2310: 67 2d 53 74 79 6c 65 22 20 20 20 20 20 20 20 20  g-Style"        
2320: 20 20 20 22 6d 70 74 65 73 74 20 74 65 73 74 22     "mptest test"
2330: 0a 20 20 20 20 22 48 61 76 65 2d 4e 6f 74 22 20  .    "Have-Not" 
2340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2350: 65 73 74 0a 20 20 20 20 22 41 70 70 6c 65 22 20  est.    "Apple" 
2360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2370: 20 20 22 74 68 72 65 61 64 74 65 73 74 20 66 75    "threadtest fu
2380: 6c 6c 74 65 73 74 22 0a 20 20 7d 0a 20 20 22 57  lltest".  }.  "W
2390: 69 6e 64 6f 77 73 20 4e 54 2d 69 6e 74 65 6c 22  indows NT-intel"
23a0: 20 7b 0a 20 20 20 20 22 53 74 64 63 61 6c 6c 22   {.    "Stdcall"
23b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c0: 20 74 65 73 74 0a 20 20 20 20 22 48 61 76 65 2d   test.    "Have-
23d0: 4e 6f 74 22 20 20 20 20 20 20 20 20 20 20 20 20  Not"            
23e0: 20 20 20 20 74 65 73 74 0a 20 20 20 20 22 44 65      test.    "De
23f0: 66 61 75 6c 74 22 20 20 20 20 20 20 20 20 20 20  fault"          
2400: 20 20 20 20 20 20 20 22 6d 70 74 65 73 74 20 66         "mptest f
2410: 75 6c 6c 74 65 73 74 6f 6e 6c 79 22 0a 20 20 7d  ulltestonly".  }
2420: 0a 20 20 22 57 69 6e 64 6f 77 73 20 4e 54 2d 61  .  "Windows NT-a
2430: 6d 64 36 34 22 20 7b 0a 20 20 20 20 22 53 74 64  md64" {.    "Std
2440: 63 61 6c 6c 22 20 20 20 20 20 20 20 20 20 20 20  call"           
2450: 20 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22        test.    "
2460: 48 61 76 65 2d 4e 6f 74 22 20 20 20 20 20 20 20  Have-Not"       
2470: 20 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20           test.  
2480: 20 20 22 44 65 66 61 75 6c 74 22 20 20 20 20 20    "Default"     
2490: 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 70 74              "mpt
24a0: 65 73 74 20 66 75 6c 6c 74 65 73 74 6f 6e 6c 79  est fulltestonly
24b0: 22 0a 20 20 7d 0a 0a 20 20 23 20 54 68 65 20 46  ".  }..  # The F
24c0: 61 69 6c 75 72 65 2d 44 65 74 65 63 74 69 6f 6e  ailure-Detection
24d0: 20 70 6c 61 74 66 6f 72 6d 20 72 75 6e 73 20 76   platform runs v
24e0: 61 72 69 6f 75 73 20 74 65 73 74 73 20 74 68 61  arious tests tha
24f0: 74 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 20  t deliberately. 
2500: 20 23 20 66 61 69 6c 2e 20 20 54 68 69 73 20 69   # fail.  This i
2510: 73 20 75 73 65 64 20 61 73 20 61 20 74 65 73 74  s used as a test
2520: 20 6f 66 20 74 68 69 73 20 73 63 72 69 70 74 20   of this script 
2530: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
2540: 68 69 73 20 73 63 72 69 70 74 0a 20 20 23 20 63  his script.  # c
2550: 6f 72 72 65 63 74 6c 79 20 69 64 65 6e 74 69 66  orrectly identif
2560: 69 65 73 20 66 61 69 6c 75 72 65 73 2e 0a 20 20  ies failures..  
2570: 23 0a 20 20 46 61 69 6c 75 72 65 2d 44 65 74 65  #.  Failure-Dete
2580: 63 74 69 6f 6e 20 7b 0a 20 20 20 20 46 61 69 6c  ction {.    Fail
2590: 30 20 20 20 20 20 22 54 45 53 54 5f 46 41 49 4c  0     "TEST_FAIL
25a0: 55 52 45 3d 30 20 74 65 73 74 22 0a 20 20 20 20  URE=0 test".    
25b0: 53 61 6e 69 74 69 7a 65 20 20 22 54 45 53 54 5f  Sanitize  "TEST_
25c0: 46 41 49 4c 55 52 45 3d 31 20 74 65 73 74 22 0a  FAILURE=1 test".
25d0: 20 20 20 20 46 61 69 6c 32 20 20 20 20 20 22 54      Fail2     "T
25e0: 45 53 54 5f 46 41 49 4c 55 52 45 3d 32 20 76 61  EST_FAILURE=2 va
25f0: 6c 67 72 69 6e 64 74 65 73 74 22 0a 20 20 20 20  lgrindtest".    
2600: 46 61 69 6c 33 20 20 20 20 20 22 54 45 53 54 5f  Fail3     "TEST_
2610: 46 41 49 4c 55 52 45 3d 33 20 76 61 6c 67 72 69  FAILURE=3 valgri
2620: 6e 64 74 65 73 74 22 0a 20 20 20 20 46 61 69 6c  ndtest".    Fail
2630: 34 20 20 20 20 20 22 54 45 53 54 5f 46 41 49 4c  4     "TEST_FAIL
2640: 55 52 45 3d 34 20 74 65 73 74 22 0a 20 20 20 20  URE=4 test".    
2650: 46 75 7a 7a 46 61 69 6c 31 20 22 54 45 53 54 5f  FuzzFail1 "TEST_
2660: 46 41 49 4c 55 52 45 3d 35 20 74 65 73 74 22 0a  FAILURE=5 test".
2670: 20 20 20 20 46 75 7a 7a 46 61 69 6c 32 20 22 54      FuzzFail2 "T
2680: 45 53 54 5f 46 41 49 4c 55 52 45 3d 35 20 76 61  EST_FAILURE=5 va
2690: 6c 67 72 69 6e 64 74 65 73 74 22 0a 20 20 7d 0a  lgrindtest".  }.
26a0: 7d 5d 0a 0a 0a 23 20 45 6e 64 20 6f 66 20 63 6f  }]...# End of co
26b0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 65 63 74  nfiguration sect
26c0: 69 6f 6e 2e 0a 23 23 23 23 23 23 23 23 23 23 23  ion..###########
26d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2700: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
2710: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2720: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2730: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2740: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2750: 23 23 23 23 23 23 23 23 0a 0a 23 20 43 6f 6e 66  ########..# Conf
2760: 69 67 75 72 61 74 69 6f 6e 20 76 65 72 69 66 69  iguration verifi
2770: 63 61 74 69 6f 6e 3a 20 43 68 65 63 6b 20 74 68  cation: Check th
2780: 61 74 20 65 61 63 68 20 65 6e 74 72 79 20 69 6e  at each entry in
2790: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63 6f 6e   the list of con
27a0: 66 69 67 73 0a 23 20 73 70 65 63 69 66 69 65 64  figs.# specified
27b0: 20 66 6f 72 20 65 61 63 68 20 70 6c 61 74 66 6f   for each platfo
27c0: 72 6d 73 20 65 78 69 73 74 73 2e 0a 23 0a 66 6f  rms exists..#.fo
27d0: 72 65 61 63 68 20 7b 6b 65 79 20 76 61 6c 75 65  reach {key value
27e0: 7d 20 5b 61 72 72 61 79 20 67 65 74 20 3a 3a 50  } [array get ::P
27f0: 6c 61 74 66 6f 72 6d 73 5d 20 7b 0a 20 20 66 6f  latforms] {.  fo
2800: 72 65 61 63 68 20 7b 76 20 74 7d 20 24 76 61 6c  reach {v t} $val
2810: 75 65 20 7b 0a 20 20 20 20 69 66 20 7b 30 3d 3d  ue {.    if {0==
2820: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 43  [info exists ::C
2830: 6f 6e 66 69 67 73 28 24 76 29 5d 7d 20 7b 0a 20  onfigs($v)]} {. 
2840: 20 20 20 20 20 70 75 74 73 20 73 74 64 65 72 72       puts stderr
2850: 20 22 4e 6f 20 73 75 63 68 20 63 6f 6e 66 69 67   "No such config
2860: 75 72 61 74 69 6f 6e 3a 20 5c 22 24 76 5c 22 22  uration: \"$v\""
2870: 0a 20 20 20 20 20 20 65 78 69 74 20 2d 31 0a 20  .      exit -1. 
2880: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23 20 4f 75     }.  }.}..# Ou
2890: 74 70 75 74 20 6c 6f 67 2e 20 20 20 44 69 73 61  tput log.   Disa
28a0: 62 6c 65 64 20 66 6f 72 20 73 6c 61 76 65 20 69  bled for slave i
28b0: 6e 74 65 72 70 72 65 74 65 72 73 2e 0a 23 0a 69  nterpreters..#.i
28c0: 66 20 7b 5b 6c 69 6e 64 65 78 20 24 61 72 67 76  f {[lindex $argv
28d0: 20 65 6e 64 5d 21 3d 22 2d 2d 73 6c 61 76 65 22   end]!="--slave"
28e0: 7d 20 7b 0a 20 20 73 65 74 20 4c 4f 47 20 5b 6f  } {.  set LOG [o
28f0: 70 65 6e 20 72 65 6c 65 61 73 65 74 65 73 74 2d  pen releasetest-
2900: 6f 75 74 2e 74 78 74 20 77 5d 0a 20 20 70 72 6f  out.txt w].  pro
2910: 63 20 50 55 54 53 20 7b 74 78 74 7d 20 7b 0a 20  c PUTS {txt} {. 
2920: 20 20 20 70 75 74 73 20 24 74 78 74 0a 20 20 20     puts $txt.   
2930: 20 70 75 74 73 20 24 3a 3a 4c 4f 47 20 24 74 78   puts $::LOG $tx
2940: 74 0a 20 20 20 20 66 6c 75 73 68 20 24 3a 3a 4c  t.    flush $::L
2950: 4f 47 0a 20 20 7d 0a 20 20 70 72 6f 63 20 50 55  OG.  }.  proc PU
2960: 54 53 4e 4e 4c 20 7b 74 78 74 7d 20 7b 0a 20 20  TSNNL {txt} {.  
2970: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
2980: 65 20 24 74 78 74 0a 20 20 20 20 70 75 74 73 20  e $txt.    puts 
2990: 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 3a 3a 4c 4f  -nonewline $::LO
29a0: 47 20 24 74 78 74 0a 20 20 20 20 66 6c 75 73 68  G $txt.    flush
29b0: 20 24 3a 3a 4c 4f 47 0a 20 20 7d 0a 20 20 70 72   $::LOG.  }.  pr
29c0: 6f 63 20 50 55 54 53 45 52 52 20 7b 74 78 74 7d  oc PUTSERR {txt}
29d0: 20 7b 0a 20 20 20 20 70 75 74 73 20 73 74 64 65   {.    puts stde
29e0: 72 72 20 24 74 78 74 0a 20 20 20 20 70 75 74 73  rr $txt.    puts
29f0: 20 24 3a 3a 4c 4f 47 20 24 74 78 74 0a 20 20 20   $::LOG $txt.   
2a00: 20 66 6c 75 73 68 20 24 3a 3a 4c 4f 47 0a 20 20   flush $::LOG.  
2a10: 7d 0a 20 20 70 75 74 73 20 24 4c 4f 47 20 22 24  }.  puts $LOG "$
2a20: 61 72 67 76 30 20 24 61 72 67 76 22 0a 20 20 73  argv0 $argv".  s
2a30: 65 74 20 74 6d 30 20 5b 63 6c 6f 63 6b 20 66 6f  et tm0 [clock fo
2a40: 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f  rmat [clock seco
2a50: 6e 64 73 5d 20 2d 66 6f 72 6d 61 74 20 7b 25 59  nds] -format {%Y
2a60: 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53 7d  -%m-%d %H:%M:%S}
2a70: 20 2d 67 6d 74 20 31 5d 0a 20 20 70 75 74 73 20   -gmt 1].  puts 
2a80: 24 4c 4f 47 20 22 73 74 61 72 74 2d 74 69 6d 65  $LOG "start-time
2a90: 3a 20 24 74 6d 30 20 55 54 43 22 0a 7d 20 65 6c  : $tm0 UTC".} el
2aa0: 73 65 20 7b 0a 20 20 70 72 6f 63 20 50 55 54 53  se {.  proc PUTS
2ab0: 20 7b 74 78 74 7d 20 7b 0a 20 20 20 20 70 75 74   {txt} {.    put
2ac0: 73 20 24 74 78 74 0a 20 20 7d 0a 20 20 70 72 6f  s $txt.  }.  pro
2ad0: 63 20 50 55 54 53 4e 4e 4c 20 7b 74 78 74 7d 20  c PUTSNNL {txt} 
2ae0: 7b 0a 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65  {.    puts -none
2af0: 77 6c 69 6e 65 20 24 74 78 74 0a 20 20 7d 0a 20  wline $txt.  }. 
2b00: 20 70 72 6f 63 20 50 55 54 53 45 52 52 20 7b 74   proc PUTSERR {t
2b10: 78 74 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 73  xt} {.    puts s
2b20: 74 64 65 72 72 20 24 74 78 74 0a 20 20 7d 0a 7d  tderr $txt.  }.}
2b30: 0a 0a 23 20 4f 70 65 6e 20 74 68 65 20 66 69 6c  ..# Open the fil
2b40: 65 20 24 6c 6f 67 66 69 6c 65 20 61 6e 64 20 6c  e $logfile and l
2b50: 6f 6f 6b 20 66 6f 72 20 61 20 72 65 70 6f 72 74  ook for a report
2b60: 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   on the number o
2b70: 66 20 65 72 72 6f 72 73 0a 23 20 61 6e 64 20 74  f errors.# and t
2b80: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 65 73  he number of tes
2b90: 74 20 63 61 73 65 73 20 72 75 6e 2e 20 20 41 64  t cases run.  Ad
2ba0: 64 20 74 68 65 73 65 20 76 61 6c 75 65 73 20 74  d these values t
2bb0: 6f 20 74 68 65 20 67 6c 6f 62 61 6c 0a 23 20 24  o the global.# $
2bc0: 3a 3a 4e 45 52 52 43 41 53 45 20 61 6e 64 20 24  ::NERRCASE and $
2bd0: 3a 3a 4e 54 45 53 54 43 41 53 45 20 76 61 72 69  ::NTESTCASE vari
2be0: 61 62 6c 65 73 2e 0a 23 0a 23 20 49 66 20 61 6e  ables..#.# If an
2bf0: 79 20 65 72 72 6f 72 73 20 6f 63 63 75 72 2c 20  y errors occur, 
2c00: 74 68 65 6e 20 77 72 69 74 65 20 69 6e 74 6f 20  then write into 
2c10: 24 65 72 72 6d 73 67 56 61 72 20 74 68 65 20 74  $errmsgVar the t
2c20: 65 78 74 20 6f 66 20 61 6e 20 61 70 70 72 6f 70  ext of an approp
2c30: 72 69 61 74 65 0a 23 20 6f 6e 65 2d 6c 69 6e 65  riate.# one-line
2c40: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 74   error message t
2c50: 6f 20 73 68 6f 77 20 6f 6e 20 74 68 65 20 6f 75  o show on the ou
2c60: 74 70 75 74 2e 0a 23 0a 70 72 6f 63 20 63 6f 75  tput..#.proc cou
2c70: 6e 74 5f 74 65 73 74 73 5f 61 6e 64 5f 65 72 72  nt_tests_and_err
2c80: 6f 72 73 20 7b 6c 6f 67 66 69 6c 65 20 72 63 56  ors {logfile rcV
2c90: 61 72 20 65 72 72 6d 73 67 56 61 72 7d 20 7b 0a  ar errmsgVar} {.
2ca0: 20 20 69 66 20 7b 24 3a 3a 44 52 59 52 55 4e 7d    if {$::DRYRUN}
2cb0: 20 72 65 74 75 72 6e 0a 20 20 75 70 76 61 72 20   return.  upvar 
2cc0: 31 20 24 72 63 56 61 72 20 72 63 20 24 65 72 72  1 $rcVar rc $err
2cd0: 6d 73 67 56 61 72 20 65 72 72 6d 73 67 0a 20 20  msgVar errmsg.  
2ce0: 73 65 74 20 66 64 20 5b 6f 70 65 6e 20 24 6c 6f  set fd [open $lo
2cf0: 67 66 69 6c 65 20 72 62 5d 0a 20 20 73 65 74 20  gfile rb].  set 
2d00: 73 65 65 6e 20 30 0a 20 20 77 68 69 6c 65 20 7b  seen 0.  while {
2d10: 21 5b 65 6f 66 20 24 66 64 5d 7d 20 7b 0a 20 20  ![eof $fd]} {.  
2d20: 20 20 73 65 74 20 6c 69 6e 65 20 5b 67 65 74 73    set line [gets
2d30: 20 24 66 64 5d 0a 20 20 20 20 69 66 20 7b 5b 72   $fd].    if {[r
2d40: 65 67 65 78 70 20 7b 28 5c 64 2b 29 20 65 72 72  egexp {(\d+) err
2d50: 6f 72 73 20 6f 75 74 20 6f 66 20 28 5c 64 2b 29  ors out of (\d+)
2d60: 20 74 65 73 74 73 7d 20 24 6c 69 6e 65 20 61 6c   tests} $line al
2d70: 6c 20 6e 65 72 72 20 6e 74 65 73 74 5d 7d 20 7b  l nerr ntest]} {
2d80: 0a 20 20 20 20 20 20 69 6e 63 72 20 3a 3a 4e 45  .      incr ::NE
2d90: 52 52 43 41 53 45 20 24 6e 65 72 72 0a 20 20 20  RRCASE $nerr.   
2da0: 20 20 20 69 6e 63 72 20 3a 3a 4e 54 45 53 54 43     incr ::NTESTC
2db0: 41 53 45 20 24 6e 74 65 73 74 0a 20 20 20 20 20  ASE $ntest.     
2dc0: 20 73 65 74 20 73 65 65 6e 20 31 0a 20 20 20 20   set seen 1.    
2dd0: 20 20 69 66 20 7b 24 6e 65 72 72 3e 30 7d 20 7b    if {$nerr>0} {
2de0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 72 63 20  .        set rc 
2df0: 31 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 72  1.        set er
2e00: 72 6d 73 67 20 24 6c 69 6e 65 0a 20 20 20 20 20  rmsg $line.     
2e10: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20   }.    }.    if 
2e20: 7b 5b 72 65 67 65 78 70 20 7b 72 75 6e 74 69 6d  {[regexp {runtim
2e30: 65 20 65 72 72 6f 72 3a 20 2b 28 2e 2a 29 7d 20  e error: +(.*)} 
2e40: 24 6c 69 6e 65 20 61 6c 6c 20 6d 73 67 5d 7d 20  $line all msg]} 
2e50: 7b 0a 20 20 20 20 20 20 23 20 73 6b 69 70 20 6f  {.      # skip o
2e60: 76 65 72 20 22 76 61 6c 75 65 20 69 73 20 6f 75  ver "value is ou
2e70: 74 73 69 64 65 20 72 61 6e 67 65 22 20 65 72 72  tside range" err
2e80: 6f 72 73 0a 20 20 20 20 20 20 69 66 20 7b 5b 72  ors.      if {[r
2e90: 65 67 65 78 70 20 7b 76 61 6c 75 65 20 2e 2a 20  egexp {value .* 
2ea0: 69 73 20 6f 75 74 73 69 64 65 20 74 68 65 20 72  is outside the r
2eb0: 61 6e 67 65 20 6f 66 20 72 65 70 72 65 73 65 6e  ange of represen
2ec0: 74 61 62 6c 65 7d 20 24 6c 69 6e 65 5d 7d 20 7b  table} $line]} {
2ed0: 0a 20 20 20 20 20 20 20 20 20 23 20 6e 6f 6f 70  .         # noop
2ee0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  .      } else {.
2ef0: 20 20 20 20 20 20 20 20 69 6e 63 72 20 3a 3a 4e          incr ::N
2f00: 45 52 52 43 41 53 45 0a 20 20 20 20 20 20 20 20  ERRCASE.        
2f10: 69 66 20 7b 24 72 63 3d 3d 30 7d 20 7b 0a 20 20  if {$rc==0} {.  
2f20: 20 20 20 20 20 20 20 20 73 65 74 20 72 63 20 31          set rc 1
2f30: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 65  .          set e
2f40: 72 72 6d 73 67 20 24 6d 73 67 0a 20 20 20 20 20  rrmsg $msg.     
2f50: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
2f60: 20 7d 0a 20 20 20 20 69 66 20 7b 5b 72 65 67 65   }.    if {[rege
2f70: 78 70 20 7b 66 61 74 61 6c 20 65 72 72 6f 72 20  xp {fatal error 
2f80: 2b 28 2e 2a 29 7d 20 24 6c 69 6e 65 20 61 6c 6c  +(.*)} $line all
2f90: 20 6d 73 67 5d 7d 20 7b 0a 20 20 20 20 20 20 69   msg]} {.      i
2fa0: 6e 63 72 20 3a 3a 4e 45 52 52 43 41 53 45 0a 20  ncr ::NERRCASE. 
2fb0: 20 20 20 20 20 69 66 20 7b 24 72 63 3d 3d 30 7d       if {$rc==0}
2fc0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 72   {.        set r
2fd0: 63 20 31 0a 20 20 20 20 20 20 20 20 73 65 74 20  c 1.        set 
2fe0: 65 72 72 6d 73 67 20 24 6d 73 67 0a 20 20 20 20  errmsg $msg.    
2ff0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
3000: 20 7b 5b 72 65 67 65 78 70 20 7b 45 52 52 4f 52   {[regexp {ERROR
3010: 20 53 55 4d 4d 41 52 59 3a 20 28 5c 64 2b 29 20   SUMMARY: (\d+) 
3020: 65 72 72 6f 72 73 2e 2a 7d 20 24 6c 69 6e 65 20  errors.*} $line 
3030: 61 6c 6c 20 63 6e 74 5d 20 26 26 20 24 63 6e 74  all cnt] && $cnt
3040: 3e 30 7d 20 7b 0a 20 20 20 20 20 20 69 6e 63 72  >0} {.      incr
3050: 20 3a 3a 4e 45 52 52 43 41 53 45 0a 20 20 20 20   ::NERRCASE.    
3060: 20 20 69 66 20 7b 24 72 63 3d 3d 30 7d 20 7b 0a    if {$rc==0} {.
3070: 20 20 20 20 20 20 20 20 73 65 74 20 72 63 20 31          set rc 1
3080: 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 72 72  .        set err
3090: 6d 73 67 20 24 61 6c 6c 0a 20 20 20 20 20 20 7d  msg $all.      }
30a0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 5b  .    }.    if {[
30b0: 72 65 67 65 78 70 20 7b 5e 56 45 52 53 49 4f 4e  regexp {^VERSION
30c0: 3a 20 33 5c 2e 5c 64 2b 2e 5c 64 2b 7d 20 24 6c  : 3\.\d+.\d+} $l
30d0: 69 6e 65 5d 7d 20 7b 0a 20 20 20 20 20 20 73 65  ine]} {.      se
30e0: 74 20 76 20 5b 73 74 72 69 6e 67 20 72 61 6e 67  t v [string rang
30f0: 65 20 24 6c 69 6e 65 20 39 20 65 6e 64 5d 0a 20  e $line 9 end]. 
3100: 20 20 20 20 20 69 66 20 7b 24 3a 3a 53 51 4c 49       if {$::SQLI
3110: 54 45 5f 56 45 52 53 49 4f 4e 20 65 71 20 22 22  TE_VERSION eq ""
3120: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
3130: 3a 3a 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  ::SQLITE_VERSION
3140: 20 24 76 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   $v.      } else
3150: 69 66 20 7b 24 3a 3a 53 51 4c 49 54 45 5f 56 45  if {$::SQLITE_VE
3160: 52 53 49 4f 4e 20 6e 65 20 24 76 7d 20 7b 0a 20  RSION ne $v} {. 
3170: 20 20 20 20 20 20 20 73 65 74 20 72 63 20 31 0a         set rc 1.
3180: 20 20 20 20 20 20 20 20 73 65 74 20 65 72 72 6d          set errm
3190: 73 67 20 22 76 65 72 73 69 6f 6e 20 63 6f 6e 66  sg "version conf
31a0: 6c 69 63 74 3a 20 7b 24 3a 3a 53 51 4c 49 54 45  lict: {$::SQLITE
31b0: 5f 56 45 52 53 49 4f 4e 7d 20 76 73 2e 20 7b 24  _VERSION} vs. {$
31c0: 76 7d 22 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  v}".      }.    
31d0: 7d 0a 20 20 7d 0a 20 20 63 6c 6f 73 65 20 24 66  }.  }.  close $f
31e0: 64 0a 20 20 69 66 20 7b 24 3a 3a 42 55 49 4c 44  d.  if {$::BUILD
31f0: 4f 4e 4c 59 7d 20 7b 0a 20 20 20 20 69 6e 63 72  ONLY} {.    incr
3200: 20 3a 3a 4e 54 45 53 54 43 41 53 45 0a 20 20 20   ::NTESTCASE.   
3210: 20 69 66 20 7b 24 72 63 21 3d 30 7d 20 7b 0a 20   if {$rc!=0} {. 
3220: 20 20 20 20 20 73 65 74 20 65 72 72 6d 73 67 20       set errmsg 
3230: 22 42 75 69 6c 64 20 66 61 69 6c 65 64 22 0a 20  "Build failed". 
3240: 20 20 20 7d 0a 20 20 7d 20 65 6c 73 65 69 66 20     }.  } elseif 
3250: 7b 21 24 73 65 65 6e 7d 20 7b 0a 20 20 20 20 73  {!$seen} {.    s
3260: 65 74 20 72 63 20 31 0a 20 20 20 20 73 65 74 20  et rc 1.    set 
3270: 65 72 72 6d 73 67 20 22 54 65 73 74 20 64 69 64  errmsg "Test did
3280: 20 6e 6f 74 20 63 6f 6d 70 6c 65 74 65 22 0a 20   not complete". 
3290: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 72 65 61     if {[file rea
32a0: 64 61 62 6c 65 20 63 6f 72 65 5d 7d 20 7b 0a 20  dable core]} {. 
32b0: 20 20 20 20 20 61 70 70 65 6e 64 20 65 72 72 6d       append errm
32c0: 73 67 20 22 20 2d 20 63 6f 72 65 20 66 69 6c 65  sg " - core file
32d0: 20 65 78 69 73 74 73 22 0a 20 20 20 20 7d 0a 20   exists".    }. 
32e0: 20 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d   }.}..#---------
32f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3330: 2d 0a 23 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64  -.# This command
3340: 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 73 20 74   is invoked as t
3350: 68 65 20 5b 6d 61 69 6e 5d 20 72 6f 75 74 69 6e  he [main] routin
3360: 65 20 66 6f 72 20 73 63 72 69 70 74 73 20 72 75  e for scripts ru
3370: 6e 20 77 69 74 68 20 74 68 65 0a 23 20 22 2d 2d  n with the.# "--
3380: 73 6c 61 76 65 22 20 6f 70 74 69 6f 6e 2e 0a 23  slave" option..#
3390: 0a 23 20 46 6f 72 20 65 61 63 68 20 74 65 73 74  .# For each test
33a0: 20 28 69 2e 65 2e 20 22 63 6f 6e 66 69 67 75 72   (i.e. "configur
33b0: 65 20 26 26 20 6d 61 6b 65 20 74 65 73 74 22 20  e && make test" 
33c0: 65 78 65 63 75 74 69 6f 6e 29 2c 20 74 68 65 20  execution), the 
33d0: 6d 61 73 74 65 72 0a 23 20 70 72 6f 63 65 73 73  master.# process
33e0: 20 73 70 61 77 6e 73 20 61 20 70 72 6f 63 65 73   spawns a proces
33f0: 73 20 77 69 74 68 20 74 68 65 20 2d 2d 73 6c 61  s with the --sla
3400: 76 65 20 6f 70 74 69 6f 6e 2e 20 49 74 20 77 72  ve option. It wr
3410: 69 74 65 73 20 74 77 6f 20 6c 69 6e 65 73 0a 23  ites two lines.#
3420: 20 74 6f 20 74 68 65 20 73 6c 61 76 65 73 20 73   to the slaves s
3430: 74 64 69 6e 2e 20 54 68 65 20 66 69 72 73 74 20  tdin. The first 
3440: 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c  contains a singl
3450: 65 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20  e boolean value 
3460: 2d 20 74 68 65 0a 23 20 76 61 6c 75 65 20 6f 66  - the.# value of
3470: 20 3a 3a 54 52 41 43 45 20 74 6f 20 75 73 65 20   ::TRACE to use 
3480: 69 6e 20 74 68 65 20 73 6c 61 76 65 20 73 63 72  in the slave scr
3490: 69 70 74 2e 20 54 68 65 20 73 65 63 6f 6e 64 20  ipt. The second 
34a0: 6c 69 6e 65 20 63 6f 6e 74 61 69 6e 73 20 61 0a  line contains a.
34b0: 23 20 6c 69 73 74 20 69 6e 20 74 68 65 20 73 61  # list in the sa
34c0: 6d 65 20 66 6f 72 6d 61 74 20 61 73 20 65 61 63  me format as eac
34d0: 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  h element of the
34e0: 20 6c 69 73 74 20 70 61 73 73 65 64 20 74 6f 20   list passed to 
34f0: 74 68 65 0a 23 20 5b 72 75 6e 5f 61 6c 6c 5f 74  the.# [run_all_t
3500: 65 73 74 5f 73 75 69 74 65 73 5d 20 63 6f 6d 6d  est_suites] comm
3510: 61 6e 64 20 69 6e 20 74 68 65 20 6d 61 73 74 65  and in the maste
3520: 72 20 70 72 6f 63 65 73 73 2e 0a 23 0a 23 20 54  r process..#.# T
3530: 68 65 20 73 6c 61 76 65 20 74 68 65 6e 20 72 75  he slave then ru
3540: 6e 73 20 74 68 65 20 22 63 6f 6e 66 69 67 75 72  ns the "configur
3550: 65 20 26 26 20 6d 61 6b 65 20 74 65 73 74 22 20  e && make test" 
3560: 63 6f 6d 6d 61 6e 64 73 20 73 70 65 63 69 66 69  commands specifi
3570: 65 64 2e 20 49 74 0a 23 20 65 78 69 74 73 20 73  ed. It.# exits s
3580: 75 63 63 65 73 73 66 75 6c 6c 79 20 69 66 20 74  uccessfully if t
3590: 68 65 20 74 65 73 74 73 20 70 61 73 73 65 73 2c  he tests passes,
35a0: 20 6f 72 20 77 69 74 68 20 61 20 6e 6f 6e 2d 7a   or with a non-z
35b0: 65 72 6f 20 65 72 72 6f 72 20 63 6f 64 65 0a 23  ero error code.#
35c0: 20 6f 74 68 65 72 77 69 73 65 2e 0a 23 0a 70 72   otherwise..#.pr
35d0: 6f 63 20 72 75 6e 5f 73 6c 61 76 65 5f 74 65 73  oc run_slave_tes
35e0: 74 20 7b 7d 20 7b 0a 20 20 23 20 52 65 61 64 20  t {} {.  # Read 
35f0: 67 6c 6f 62 61 6c 20 76 61 72 73 20 63 6f 6e 66  global vars conf
3600: 69 67 75 72 61 74 69 6f 6e 20 66 72 6f 6d 20 73  iguration from s
3610: 74 64 69 6e 2e 0a 20 20 73 65 74 20 56 20 5b 67  tdin..  set V [g
3620: 65 74 73 20 73 74 64 69 6e 5d 0a 20 20 66 6f 72  ets stdin].  for
3630: 65 61 63 68 20 7b 3a 3a 54 52 41 43 45 20 3a 3a  each {::TRACE ::
3640: 4d 53 56 43 20 3a 3a 44 52 59 52 55 4e 20 3a 3a  MSVC ::DRYRUN ::
3650: 4b 45 45 50 46 49 4c 45 53 7d 20 24 56 20 7b 7d  KEEPFILES} $V {}
3660: 0a 0a 20 20 23 20 52 65 61 64 20 74 68 65 20 74  ..  # Read the t
3670: 65 73 74 2d 73 75 69 74 65 20 63 6f 6e 66 69 67  est-suite config
3680: 75 72 61 74 69 6f 6e 20 66 72 6f 6d 20 73 74 64  uration from std
3690: 69 6e 2e 0a 20 20 73 65 74 20 54 20 5b 67 65 74  in..  set T [get
36a0: 73 20 73 74 64 69 6e 5d 0a 20 20 66 6f 72 65 61  s stdin].  forea
36b0: 63 68 20 7b 74 69 74 6c 65 20 64 69 72 20 63 6f  ch {title dir co
36c0: 6e 66 69 67 4f 70 74 73 20 74 65 73 74 74 61 72  nfigOpts testtar
36d0: 67 65 74 20 6d 61 6b 65 4f 70 74 73 20 63 66 6c  get makeOpts cfl
36e0: 61 67 73 20 6f 70 74 73 7d 20 24 54 20 7b 7d 0a  ags opts} $T {}.
36f0: 0a 20 20 23 20 43 72 65 61 74 65 20 61 6e 64 20  .  # Create and 
3700: 73 77 69 74 63 68 20 74 6f 20 74 68 65 20 74 65  switch to the te
3710: 73 74 20 64 69 72 65 63 74 6f 72 79 2e 0a 20 20  st directory..  
3720: 73 65 74 20 6e 6f 72 6d 61 6c 64 69 72 20 5b 66  set normaldir [f
3730: 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 24 64  ile normalize $d
3740: 69 72 5d 0a 20 20 73 65 74 20 3a 3a 65 6e 76 28  ir].  set ::env(
3750: 53 51 4c 49 54 45 5f 54 4d 50 44 49 52 29 20 24  SQLITE_TMPDIR) $
3760: 6e 6f 72 6d 61 6c 64 69 72 0a 20 20 74 72 61 63  normaldir.  trac
3770: 65 5f 63 6d 64 20 66 69 6c 65 20 6d 6b 64 69 72  e_cmd file mkdir
3780: 20 24 64 69 72 0a 20 20 74 72 61 63 65 5f 63 6d   $dir.  trace_cm
3790: 64 20 63 64 20 24 64 69 72 0a 20 20 63 61 74 63  d cd $dir.  catc
37a0: 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 63  h {file delete c
37b0: 6f 72 65 7d 0a 20 20 63 61 74 63 68 20 7b 66 69  ore}.  catch {fi
37c0: 6c 65 20 64 65 6c 65 74 65 20 74 65 73 74 2e 6c  le delete test.l
37d0: 6f 67 7d 0a 0a 20 20 23 20 52 75 6e 20 74 68 65  og}..  # Run the
37e0: 20 22 2e 2f 63 6f 6e 66 69 67 75 72 65 20 26 26   "./configure &&
37f0: 20 6d 61 6b 65 22 20 63 6f 6d 6d 61 6e 64 73 2e   make" commands.
3800: 0a 20 20 73 65 74 20 72 63 20 30 0a 20 20 73 65  .  set rc 0.  se
3810: 74 20 72 63 20 5b 63 61 74 63 68 20 5b 63 6f 6e  t rc [catch [con
3820: 66 69 67 75 72 65 43 6f 6d 6d 61 6e 64 20 24 63  figureCommand $c
3830: 6f 6e 66 69 67 4f 70 74 73 5d 5d 0a 20 20 69 66  onfigOpts]].  if
3840: 20 7b 21 24 72 63 7d 20 7b 0a 20 20 20 20 69 66   {!$rc} {.    if
3850: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
3860: 3a 65 6e 76 28 54 43 4c 53 48 5f 43 4d 44 29 5d  :env(TCLSH_CMD)]
3870: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 73 61  } {.      set sa
3880: 76 65 64 45 6e 76 28 54 43 4c 53 48 5f 43 4d 44  vedEnv(TCLSH_CMD
3890: 29 20 24 3a 3a 65 6e 76 28 54 43 4c 53 48 5f 43  ) $::env(TCLSH_C
38a0: 4d 44 29 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b  MD).    } else {
38b0: 0a 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f  .      unset -no
38c0: 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e  complain savedEn
38d0: 76 28 54 43 4c 53 48 5f 43 4d 44 29 0a 20 20 20  v(TCLSH_CMD).   
38e0: 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a 65 6e 76   }.    set ::env
38f0: 28 54 43 4c 53 48 5f 43 4d 44 29 20 5b 66 69 6c  (TCLSH_CMD) [fil
3900: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 69 6e  e nativename [in
3910: 66 6f 20 6e 61 6d 65 6f 66 65 78 65 63 75 74 61  fo nameofexecuta
3920: 62 6c 65 5d 5d 0a 20 20 20 20 73 65 74 20 72 63  ble]].    set rc
3930: 20 5b 63 61 74 63 68 20 5b 6d 61 6b 65 43 6f 6d   [catch [makeCom
3940: 6d 61 6e 64 20 24 74 65 73 74 74 61 72 67 65 74  mand $testtarget
3950: 20 24 6d 61 6b 65 4f 70 74 73 20 24 63 66 6c 61   $makeOpts $cfla
3960: 67 73 20 24 6f 70 74 73 5d 5d 0a 20 20 20 20 69  gs $opts]].    i
3970: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists 
3980: 73 61 76 65 64 45 6e 76 28 54 43 4c 53 48 5f 43  savedEnv(TCLSH_C
3990: 4d 44 29 5d 7d 20 7b 0a 20 20 20 20 20 20 73 65  MD)]} {.      se
39a0: 74 20 3a 3a 65 6e 76 28 54 43 4c 53 48 5f 43 4d  t ::env(TCLSH_CM
39b0: 44 29 20 24 73 61 76 65 64 45 6e 76 28 54 43 4c  D) $savedEnv(TCL
39c0: 53 48 5f 43 4d 44 29 0a 20 20 20 20 7d 20 65 6c  SH_CMD).    } el
39d0: 73 65 20 7b 0a 20 20 20 20 20 20 75 6e 73 65 74  se {.      unset
39e0: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 65   -nocomplain ::e
39f0: 6e 76 28 54 43 4c 53 48 5f 43 4d 44 29 0a 20 20  nv(TCLSH_CMD).  
3a00: 20 20 7d 0a 20 20 7d 0a 0a 20 20 23 20 43 6c 65    }.  }..  # Cle
3a10: 61 6e 20 75 70 20 6c 6f 74 73 20 6f 66 20 65 78  an up lots of ex
3a20: 74 72 61 20 66 69 6c 65 73 20 69 66 20 2d 2d 6b  tra files if --k
3a30: 65 65 70 20 77 61 73 20 6e 6f 74 20 73 70 65 63  eep was not spec
3a40: 69 66 69 65 64 2e 0a 20 20 69 66 20 7b 24 3a 3a  ified..  if {$::
3a50: 4b 45 45 50 46 49 4c 45 53 3d 3d 30 7d 20 7b 20  KEEPFILES==0} { 
3a60: 63 6c 65 61 6e 75 70 20 24 6e 6f 72 6d 61 6c 64  cleanup $normald
3a70: 69 72 20 7d 0a 0a 20 20 23 20 45 78 69 73 20 73  ir }..  # Exis s
3a80: 75 63 63 65 73 73 66 75 6c 6c 79 20 69 66 20 74  uccessfully if t
3a90: 68 65 20 74 65 73 74 20 70 61 73 73 65 64 2c 20  he test passed, 
3aa0: 6f 72 20 77 69 74 68 20 61 20 6e 6f 6e 2d 7a 65  or with a non-ze
3ab0: 72 6f 20 65 72 72 6f 72 20 63 6f 64 65 0a 20 20  ro error code.  
3ac0: 23 20 6f 74 68 65 72 77 69 73 65 2e 0a 20 20 65  # otherwise..  e
3ad0: 78 69 74 20 24 72 63 0a 7d 0a 0a 23 20 54 68 69  xit $rc.}..# Thi
3ae0: 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76  s command is inv
3af0: 6f 6b 65 64 20 69 6e 20 74 68 65 20 6d 61 73 74  oked in the mast
3b00: 65 72 20 70 72 6f 63 65 73 73 20 65 61 63 68 20  er process each 
3b10: 74 69 6d 65 20 61 20 73 6c 61 76 65 0a 23 20 66  time a slave.# f
3b20: 69 6c 65 2d 64 65 73 63 72 69 70 74 6f 72 20 69  ile-descriptor i
3b30: 73 20 72 65 61 64 61 62 6c 65 2e 0a 23 0a 70 72  s readable..#.pr
3b40: 6f 63 20 73 6c 61 76 65 5f 66 69 6c 65 65 76 65  oc slave_fileeve
3b50: 6e 74 20 7b 66 64 20 54 20 74 6d 31 7d 20 7b 0a  nt {fd T tm1} {.
3b60: 20 20 67 6c 6f 62 61 6c 20 47 0a 20 20 66 6f 72    global G.  for
3b70: 65 61 63 68 20 7b 74 69 74 6c 65 20 64 69 72 20  each {title dir 
3b80: 63 6f 6e 66 69 67 4f 70 74 73 20 74 65 73 74 74  configOpts testt
3b90: 61 72 67 65 74 20 6d 61 6b 65 4f 70 74 73 20 63  arget makeOpts c
3ba0: 66 6c 61 67 73 20 6f 70 74 73 7d 20 24 54 20 7b  flags opts} $T {
3bb0: 7d 0a 0a 20 20 69 66 20 7b 5b 65 6f 66 20 24 66  }..  if {[eof $f
3bc0: 64 5d 7d 20 7b 0a 20 20 20 20 66 63 6f 6e 66 69  d]} {.    fconfi
3bd0: 67 75 72 65 20 24 66 64 20 2d 62 6c 6f 63 6b 69  gure $fd -blocki
3be0: 6e 67 20 31 0a 20 20 20 20 73 65 74 20 72 63 20  ng 1.    set rc 
3bf0: 5b 63 61 74 63 68 20 7b 20 63 6c 6f 73 65 20 24  [catch { close $
3c00: 66 64 20 7d 5d 0a 0a 20 20 20 20 73 65 74 20 65  fd }]..    set e
3c10: 72 72 6d 73 67 20 7b 7d 0a 20 20 20 20 73 65 74  rrmsg {}.    set
3c20: 20 6c 6f 67 66 69 6c 65 20 5b 66 69 6c 65 20 6a   logfile [file j
3c30: 6f 69 6e 20 24 64 69 72 20 74 65 73 74 2e 6c 6f  oin $dir test.lo
3c40: 67 5d 0a 20 20 20 20 69 66 20 7b 5b 66 69 6c 65  g].    if {[file
3c50: 20 65 78 69 73 74 73 20 24 6c 6f 67 66 69 6c 65   exists $logfile
3c60: 5d 7d 20 7b 0a 20 20 20 20 20 20 63 6f 75 6e 74  ]} {.      count
3c70: 5f 74 65 73 74 73 5f 61 6e 64 5f 65 72 72 6f 72  _tests_and_error
3c80: 73 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69  s [file join $di
3c90: 72 20 74 65 73 74 2e 6c 6f 67 5d 20 72 63 20 65  r test.log] rc e
3ca0: 72 72 6d 73 67 0a 20 20 20 20 7d 20 65 6c 73 65  rrmsg.    } else
3cb0: 69 66 20 7b 24 72 63 3d 3d 30 20 26 26 20 21 24  if {$rc==0 && !$
3cc0: 3a 3a 44 52 59 52 55 4e 7d 20 7b 0a 20 20 20 20  ::DRYRUN} {.    
3cd0: 20 20 73 65 74 20 72 63 20 31 0a 20 20 20 20 20    set rc 1.     
3ce0: 20 73 65 74 20 65 72 72 6d 73 67 20 22 6e 6f 20   set errmsg "no 
3cf0: 74 65 73 74 2e 6c 6f 67 20 66 69 6c 65 2e 2e 2e  test.log file...
3d00: 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20  ".    }..    if 
3d10: 7b 21 24 3a 3a 54 52 41 43 45 7d 20 7b 0a 20 20  {!$::TRACE} {.  
3d20: 20 20 20 20 73 65 74 20 74 6d 32 20 5b 63 6c 6f      set tm2 [clo
3d30: 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 20 20 20 20  ck seconds].    
3d40: 20 20 73 65 74 20 68 6f 75 72 73 20 5b 65 78 70    set hours [exp
3d50: 72 20 7b 28 24 74 6d 32 2d 24 74 6d 31 29 2f 33  r {($tm2-$tm1)/3
3d60: 36 30 30 7d 5d 0a 20 20 20 20 20 20 73 65 74 20  600}].      set 
3d70: 6d 69 6e 75 74 65 73 20 5b 65 78 70 72 20 7b 28  minutes [expr {(
3d80: 28 24 74 6d 32 2d 24 74 6d 31 29 2f 36 30 29 25  ($tm2-$tm1)/60)%
3d90: 36 30 7d 5d 0a 20 20 20 20 20 20 73 65 74 20 73  60}].      set s
3da0: 65 63 6f 6e 64 73 20 5b 65 78 70 72 20 7b 28 24  econds [expr {($
3db0: 74 6d 32 2d 24 74 6d 31 29 25 36 30 7d 5d 0a 20  tm2-$tm1)%60}]. 
3dc0: 20 20 20 20 20 73 65 74 20 74 6d 20 5b 66 6f 72       set tm [for
3dd0: 6d 61 74 20 28 25 30 32 64 3a 25 30 32 64 3a 25  mat (%02d:%02d:%
3de0: 30 32 64 29 20 24 68 6f 75 72 73 20 24 6d 69 6e  02d) $hours $min
3df0: 75 74 65 73 20 24 73 65 63 6f 6e 64 73 5d 0a 0a  utes $seconds]..
3e00: 20 20 20 20 20 20 69 66 20 7b 24 72 63 7d 20 7b        if {$rc} {
3e10: 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 74 61  .        set sta
3e20: 74 75 73 20 46 41 49 4c 0a 20 20 20 20 20 20 20  tus FAIL.       
3e30: 20 69 6e 63 72 20 3a 3a 4e 45 52 52 0a 20 20 20   incr ::NERR.   
3e40: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
3e50: 20 20 20 20 73 65 74 20 73 74 61 74 75 73 20 4f      set status O
3e60: 6b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  k.      }..     
3e70: 20 73 65 74 20 6e 20 5b 73 74 72 69 6e 67 20 6c   set n [string l
3e80: 65 6e 67 74 68 20 24 74 69 74 6c 65 5d 0a 20 20  ength $title].  
3e90: 20 20 20 20 69 66 20 7b 24 3a 3a 50 52 4f 47 52      if {$::PROGR
3ea0: 45 53 53 5f 4d 53 47 53 7d 20 7b 0a 20 20 20 20  ESS_MSGS} {.    
3eb0: 20 20 20 20 50 55 54 53 20 22 66 69 6e 69 73 68      PUTS "finish
3ec0: 65 64 3a 20 24 7b 74 69 74 6c 65 7d 5b 73 74 72  ed: ${title}[str
3ed0: 69 6e 67 20 72 65 70 65 61 74 20 2e 20 5b 65 78  ing repeat . [ex
3ee0: 70 72 20 7b 35 33 2d 24 6e 7d 5d 5d 20 24 73 74  pr {53-$n}]] $st
3ef0: 61 74 75 73 20 24 74 6d 22 0a 20 20 20 20 20 20  atus $tm".      
3f00: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
3f10: 20 50 55 54 53 20 22 24 7b 74 69 74 6c 65 7d 5b   PUTS "${title}[
3f20: 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 2e 20  string repeat . 
3f30: 5b 65 78 70 72 20 7b 36 33 2d 24 6e 7d 5d 5d 20  [expr {63-$n}]] 
3f40: 24 73 74 61 74 75 73 20 24 74 6d 22 0a 20 20 20  $status $tm".   
3f50: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 20 7b 24     }.      if {$
3f60: 65 72 72 6d 73 67 21 3d 22 22 7d 20 7b 50 55 54  errmsg!=""} {PUT
3f70: 53 20 22 20 20 20 20 20 24 65 72 72 6d 73 67 22  S "     $errmsg"
3f80: 7d 0a 20 20 20 20 20 20 66 6c 75 73 68 20 73 74  }.      flush st
3f90: 64 6f 75 74 0a 20 20 20 20 7d 0a 0a 20 20 20 20  dout.    }..    
3fa0: 69 6e 63 72 20 47 28 6e 4a 6f 62 29 20 2d 31 0a  incr G(nJob) -1.
3fb0: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73    } else {.    s
3fc0: 65 74 20 6c 69 6e 65 20 5b 67 65 74 73 20 24 66  et line [gets $f
3fd0: 64 5d 0a 20 20 20 20 69 66 20 7b 5b 73 74 72 69  d].    if {[stri
3fe0: 6e 67 20 74 72 69 6d 20 24 6c 69 6e 65 5d 20 21  ng trim $line] !
3ff0: 3d 20 22 22 7d 20 7b 0a 20 20 20 20 20 20 70 75  = ""} {.      pu
4000: 74 73 20 22 54 72 61 63 65 20 20 20 3a 20 24 74  ts "Trace   : $t
4010: 69 74 6c 65 20 2d 20 5c 22 24 6c 69 6e 65 5c 22  itle - \"$line\"
4020: 22 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23  ".    }.  }.}..#
4030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65  ----------.# The
4080: 20 6f 6e 6c 79 20 61 72 67 75 6d 65 6e 74 20 70   only argument p
4090: 61 73 73 65 64 20 74 6f 20 74 68 69 73 20 66 75  assed to this fu
40a0: 6e 63 74 69 6f 6e 20 69 73 20 61 20 6c 69 73 74  nction is a list
40b0: 20 6f 66 20 74 65 73 74 2d 73 75 69 74 65 73 20   of test-suites 
40c0: 74 6f 0a 23 20 72 75 6e 2e 20 45 61 63 68 20 22  to.# run. Each "
40d0: 74 65 73 74 2d 73 75 69 74 65 22 20 69 73 20 69  test-suite" is i
40e0: 74 73 65 6c 66 20 61 20 6c 69 73 74 20 63 6f 6e  tself a list con
40f0: 73 69 73 74 69 6e 67 20 6f 66 20 74 68 65 20 66  sisting of the f
4100: 6f 6c 6c 6f 77 69 6e 67 0a 23 20 65 6c 65 6d 65  ollowing.# eleme
4110: 6e 74 73 3a 0a 23 0a 23 20 20 20 2a 20 54 65 73  nts:.#.#   * Tes
4120: 74 20 74 69 74 6c 65 20 28 66 6f 72 20 64 69 73  t title (for dis
4130: 70 6c 61 79 29 2e 0a 23 20 20 20 2a 20 54 68 65  play)..#   * The
4140: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 69 72   name of the dir
4150: 65 63 74 6f 72 79 20 74 6f 20 72 75 6e 20 74 68  ectory to run th
4160: 65 20 74 65 73 74 20 69 6e 2e 0a 23 20 20 20 2a  e test in..#   *
4170: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 66 6f   The argument fo
4180: 72 20 5b 63 6f 6e 66 69 67 75 72 65 43 6f 6d 6d  r [configureComm
4190: 61 6e 64 5d 0a 23 20 20 20 2a 20 54 68 65 20 66  and].#   * The f
41a0: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 66 6f  irst argument fo
41b0: 72 20 5b 6d 61 6b 65 43 6f 6d 6d 61 6e 64 5d 0a  r [makeCommand].
41c0: 23 20 20 20 2a 20 54 68 65 20 73 65 63 6f 6e 64  #   * The second
41d0: 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 5b 6d   argument for [m
41e0: 61 6b 65 43 6f 6d 6d 61 6e 64 5d 0a 23 20 20 20  akeCommand].#   
41f0: 2a 20 54 68 65 20 74 68 69 72 64 20 61 72 67 75  * The third argu
4200: 6d 65 6e 74 20 66 6f 72 20 5b 6d 61 6b 65 43 6f  ment for [makeCo
4210: 6d 6d 61 6e 64 5d 0a 23 0a 70 72 6f 63 20 72 75  mmand].#.proc ru
4220: 6e 5f 61 6c 6c 5f 74 65 73 74 5f 73 75 69 74 65  n_all_test_suite
4230: 73 20 7b 61 6c 6c 74 65 73 74 73 7d 20 7b 0a 20  s {alltests} {. 
4240: 20 67 6c 6f 62 61 6c 20 47 0a 20 20 73 65 74 20   global G.  set 
4250: 74 65 73 74 73 20 24 61 6c 6c 74 65 73 74 73 0a  tests $alltests.
4260: 0a 20 20 73 65 74 20 47 28 6e 4a 6f 62 29 20 30  .  set G(nJob) 0
4270: 0a 0a 20 20 77 68 69 6c 65 20 7b 5b 6c 6c 65 6e  ..  while {[llen
4280: 67 74 68 20 24 74 65 73 74 73 5d 3e 30 20 7c 7c  gth $tests]>0 ||
4290: 20 24 47 28 6e 4a 6f 62 29 3e 30 7d 20 7b 0a 20   $G(nJob)>0} {. 
42a0: 20 20 20 69 66 20 7b 24 47 28 6e 4a 6f 62 29 3e     if {$G(nJob)>
42b0: 3d 24 3a 3a 4a 4f 42 53 20 7c 7c 20 5b 6c 6c 65  =$::JOBS || [lle
42c0: 6e 67 74 68 20 24 74 65 73 74 73 5d 3d 3d 30 7d  ngth $tests]==0}
42d0: 20 7b 0a 20 20 20 20 20 20 76 77 61 69 74 20 47   {.      vwait G
42e0: 28 6e 4a 6f 62 29 0a 20 20 20 20 7d 0a 0a 20 20  (nJob).    }..  
42f0: 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $
4300: 74 65 73 74 73 5d 3e 30 7d 20 7b 0a 20 20 20 20  tests]>0} {.    
4310: 20 20 73 65 74 20 54 20 5b 6c 69 6e 64 65 78 20    set T [lindex 
4320: 24 74 65 73 74 73 20 30 5d 0a 20 20 20 20 20 20  $tests 0].      
4330: 73 65 74 20 74 65 73 74 73 20 5b 6c 72 61 6e 67  set tests [lrang
4340: 65 20 24 74 65 73 74 73 20 31 20 65 6e 64 5d 0a  e $tests 1 end].
4350: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 7b 74        foreach {t
4360: 69 74 6c 65 20 64 69 72 20 63 6f 6e 66 69 67 4f  itle dir configO
4370: 70 74 73 20 74 65 73 74 74 61 72 67 65 74 20 6d  pts testtarget m
4380: 61 6b 65 4f 70 74 73 20 63 66 6c 61 67 73 20 6f  akeOpts cflags o
4390: 70 74 73 7d 20 24 54 20 7b 7d 0a 20 20 20 20 20  pts} $T {}.     
43a0: 20 69 66 20 7b 24 3a 3a 50 52 4f 47 52 45 53 53   if {$::PROGRESS
43b0: 5f 4d 53 47 53 20 26 26 20 21 24 3a 3a 54 52 41  _MSGS && !$::TRA
43c0: 43 45 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  CE} {.        se
43d0: 74 20 6e 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67  t n [string leng
43e0: 74 68 20 24 74 69 74 6c 65 5d 0a 20 20 20 20 20  th $title].     
43f0: 20 20 20 50 55 54 53 20 22 73 74 61 72 74 69 6e     PUTS "startin
4400: 67 3a 20 24 7b 74 69 74 6c 65 7d 20 61 74 20 5b  g: ${title} at [
4410: 6e 6f 77 5d 22 0a 20 20 20 20 20 20 20 20 66 6c  now]".        fl
4420: 75 73 68 20 73 74 64 6f 75 74 0a 20 20 20 20 20  ush stdout.     
4430: 20 7d 0a 0a 20 20 20 20 20 20 23 20 52 75 6e 20   }..      # Run 
4440: 74 68 65 20 6a 6f 62 2e 0a 20 20 20 20 20 20 23  the job..      #
4450: 0a 20 20 20 20 20 20 73 65 74 20 74 6d 31 20 5b  .      set tm1 [
4460: 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 20  clock seconds]. 
4470: 20 20 20 20 20 69 6e 63 72 20 47 28 6e 4a 6f 62       incr G(nJob
4480: 29 0a 20 20 20 20 20 20 73 65 74 20 73 63 72 69  ).      set scri
4490: 70 74 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69  pt [file normali
44a0: 7a 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d  ze [info script]
44b0: 5d 0a 20 20 20 20 20 20 73 65 74 20 66 64 20 5b  ].      set fd [
44c0: 6f 70 65 6e 20 22 7c 5b 69 6e 66 6f 20 6e 61 6d  open "|[info nam
44d0: 65 6f 66 65 78 65 63 75 74 61 62 6c 65 5d 20 24  eofexecutable] $
44e0: 73 63 72 69 70 74 20 2d 2d 73 6c 61 76 65 22 20  script --slave" 
44f0: 72 2b 5d 0a 20 20 20 20 20 20 66 63 6f 6e 66 69  r+].      fconfi
4500: 67 75 72 65 20 24 66 64 20 2d 62 6c 6f 63 6b 69  gure $fd -blocki
4510: 6e 67 20 30 0a 20 20 20 20 20 20 66 69 6c 65 65  ng 0.      filee
4520: 76 65 6e 74 20 24 66 64 20 72 65 61 64 61 62 6c  vent $fd readabl
4530: 65 20 5b 6c 69 73 74 20 73 6c 61 76 65 5f 66 69  e [list slave_fi
4540: 6c 65 65 76 65 6e 74 20 24 66 64 20 24 54 20 24  leevent $fd $T $
4550: 74 6d 31 5d 0a 20 20 20 20 20 20 70 75 74 73 20  tm1].      puts 
4560: 24 66 64 20 5b 6c 69 73 74 20 24 3a 3a 54 52 41  $fd [list $::TRA
4570: 43 45 20 24 3a 3a 4d 53 56 43 20 24 3a 3a 44 52  CE $::MSVC $::DR
4580: 59 52 55 4e 20 24 3a 3a 4b 45 45 50 46 49 4c 45  YRUN $::KEEPFILE
4590: 53 5d 0a 20 20 20 20 20 20 70 75 74 73 20 24 66  S].      puts $f
45a0: 64 20 5b 6c 69 73 74 20 7b 2a 7d 24 54 5d 0a 20  d [list {*}$T]. 
45b0: 20 20 20 20 20 66 6c 75 73 68 20 24 66 64 0a 20       flush $fd. 
45c0: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 70 72 6f 63     }.  }.}..proc
45d0: 20 61 64 64 5f 74 65 73 74 5f 73 75 69 74 65 20   add_test_suite 
45e0: 7b 6c 69 73 74 76 61 72 20 6e 61 6d 65 20 74 65  {listvar name te
45f0: 73 74 74 61 72 67 65 74 20 63 6f 6e 66 69 67 7d  sttarget config}
4600: 20 7b 0a 20 20 75 70 76 61 72 20 24 6c 69 73 74   {.  upvar $list
4610: 76 61 72 20 61 6c 6c 74 65 73 74 73 0a 0a 20 20  var alltests..  
4620: 23 20 54 63 6c 20 76 61 72 69 61 62 6c 65 20 24  # Tcl variable $
4630: 6f 70 74 73 20 69 73 20 75 73 65 64 20 74 6f 20  opts is used to 
4640: 62 75 69 6c 64 20 75 70 20 74 68 65 20 76 61 6c  build up the val
4650: 75 65 20 75 73 65 64 20 74 6f 20 73 65 74 20 74  ue used to set t
4660: 68 65 0a 20 20 23 20 4f 50 54 53 20 4d 61 6b 65  he.  # OPTS Make
4670: 66 69 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 56  file variable. V
4680: 61 72 69 61 62 6c 65 20 24 63 66 6c 61 67 73 20  ariable $cflags 
4690: 68 6f 6c 64 73 20 74 68 65 20 76 61 6c 75 65 20  holds the value 
46a0: 66 6f 72 0a 20 20 23 20 43 46 4c 41 47 53 2e 20  for.  # CFLAGS. 
46b0: 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 77 69 6c  The makefile wil
46c0: 6c 20 70 61 73 73 20 4f 50 54 53 20 74 6f 20 62  l pass OPTS to b
46d0: 6f 74 68 20 67 63 63 20 61 6e 64 20 6c 65 6d 6f  oth gcc and lemo
46e0: 6e 2c 20 62 75 74 0a 20 20 23 20 43 46 4c 41 47  n, but.  # CFLAG
46f0: 53 20 69 73 20 6f 6e 6c 79 20 70 61 73 73 65 64  S is only passed
4700: 20 74 6f 20 67 63 63 2e 0a 20 20 23 0a 20 20 73   to gcc..  #.  s
4710: 65 74 20 6d 61 6b 65 4f 70 74 73 20 22 22 0a 20  et makeOpts "". 
4720: 20 73 65 74 20 63 66 6c 61 67 73 20 5b 65 78 70   set cflags [exp
4730: 72 20 7b 24 3a 3a 4d 53 56 43 20 3f 20 22 2d 5a  r {$::MSVC ? "-Z
4740: 69 22 20 3a 20 22 2d 67 22 7d 5d 0a 20 20 73 65  i" : "-g"}].  se
4750: 74 20 6f 70 74 73 20 22 22 0a 20 20 73 65 74 20  t opts "".  set 
4760: 74 69 74 6c 65 20 24 7b 6e 61 6d 65 7d 28 24 74  title ${name}($t
4770: 65 73 74 74 61 72 67 65 74 29 0a 20 20 73 65 74  esttarget).  set
4780: 20 63 6f 6e 66 69 67 4f 70 74 73 20 24 3a 3a 57   configOpts $::W
4790: 49 54 48 54 43 4c 0a 20 20 73 65 74 20 73 6b 69  ITHTCL.  set ski
47a0: 70 20 30 0a 0a 20 20 72 65 67 73 75 62 20 2d 61  p 0..  regsub -a
47b0: 6c 6c 20 7b 23 5b 5e 5c 6e 5d 2a 5c 6e 7d 20 24  ll {#[^\n]*\n} $
47c0: 63 6f 6e 66 69 67 20 5c 6e 20 63 6f 6e 66 69 67  config \n config
47d0: 0a 20 20 66 6f 72 65 61 63 68 20 61 72 67 20 24  .  foreach arg $
47e0: 63 6f 6e 66 69 67 20 7b 0a 20 20 20 20 69 66 20  config {.    if 
47f0: 7b 24 73 6b 69 70 7d 20 7b 0a 20 20 20 20 20 20  {$skip} {.      
4800: 73 65 74 20 73 6b 69 70 20 30 0a 20 20 20 20 20  set skip 0.     
4810: 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 7d 0a   continue.    }.
4820: 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20      if {[regexp 
4830: 7b 5e 2d 5b 55 44 5d 7d 20 24 61 72 67 5d 7d 20  {^-[UD]} $arg]} 
4840: 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20  {.      lappend 
4850: 6f 70 74 73 20 24 61 72 67 0a 20 20 20 20 7d 20  opts $arg.    } 
4860: 65 6c 73 65 69 66 20 7b 5b 72 65 67 65 78 70 20  elseif {[regexp 
4870: 7b 5e 5b 41 2d 5a 5d 2b 3d 7d 20 24 61 72 67 5d  {^[A-Z]+=} $arg]
4880: 7d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e  } {.      lappen
4890: 64 20 74 65 73 74 74 61 72 67 65 74 20 24 61 72  d testtarget $ar
48a0: 67 0a 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b  g.    } elseif {
48b0: 5b 72 65 67 65 78 70 20 7b 5e 69 66 3a 28 5b 61  [regexp {^if:([a
48c0: 2d 7a 5d 2b 29 28 2e 2a 29 7d 20 24 61 72 67 20  -z]+)(.*)} $arg 
48d0: 61 6c 6c 20 6b 65 79 20 74 61 69 6c 5d 7d 20 7b  all key tail]} {
48e0: 0a 20 20 20 20 20 20 23 20 41 72 67 75 6d 65 6e  .      # Argumen
48f0: 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 27  ts of the form '
4900: 69 66 3a 6f 73 3d 3d 22 4c 69 6e 75 78 22 27 20  if:os=="Linux"' 
4910: 77 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20 73  will cause the s
4920: 75 62 73 65 71 75 65 6e 74 0a 20 20 20 20 20 20  ubsequent.      
4930: 23 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 62 65  # argument to be
4940: 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 65 20   skipped if the 
4950: 24 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6f 73  $tcl_platform(os
4960: 29 20 69 73 20 6e 6f 74 20 22 4c 69 6e 75 78 22  ) is not "Linux"
4970: 2c 20 66 6f 72 0a 20 20 20 20 20 20 23 20 65 78  , for.      # ex
4980: 61 6d 70 6c 65 2e 2e 2e 0a 20 20 20 20 20 20 73  ample....      s
4990: 65 74 20 73 6b 69 70 20 5b 65 78 70 72 20 21 28  et skip [expr !(
49a0: 5c 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d  \$::tcl_platform
49b0: 28 24 6b 65 79 29 24 74 61 69 6c 29 5d 0a 20 20  ($key)$tail)].  
49c0: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 72 65 67    } elseif {[reg
49d0: 65 78 70 20 7b 5e 2d 2d 28 65 6e 61 62 6c 65 7c  exp {^--(enable|
49e0: 64 69 73 61 62 6c 65 29 2d 7d 20 24 61 72 67 5d  disable)-} $arg]
49f0: 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24 3a  } {.      if {$:
4a00: 3a 4d 53 56 43 7d 20 7b 0a 20 20 20 20 20 20 20  :MSVC} {.       
4a10: 20 69 66 20 7b 24 61 72 67 20 65 71 20 22 2d 2d   if {$arg eq "--
4a20: 64 69 73 61 62 6c 65 2d 61 6d 61 6c 67 61 6d 61  disable-amalgama
4a30: 74 69 6f 6e 22 7d 20 7b 0a 20 20 20 20 20 20 20  tion"} {.       
4a40: 20 20 20 6c 61 70 70 65 6e 64 20 6d 61 6b 65 4f     lappend makeO
4a50: 70 74 73 20 55 53 45 5f 41 4d 41 4c 47 41 4d 41  pts USE_AMALGAMA
4a60: 54 49 4f 4e 3d 30 0a 20 20 20 20 20 20 20 20 20  TION=0.         
4a70: 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20   continue.      
4a80: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b    }.        if {
4a90: 24 61 72 67 20 65 71 20 22 2d 2d 64 69 73 61 62  $arg eq "--disab
4aa0: 6c 65 2d 73 68 61 72 65 64 22 7d 20 7b 0a 20 20  le-shared"} {.  
4ab0: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
4ac0: 6d 61 6b 65 4f 70 74 73 20 55 53 45 5f 43 52 54  makeOpts USE_CRT
4ad0: 5f 44 4c 4c 3d 30 20 44 59 4e 41 4d 49 43 5f 53  _DLL=0 DYNAMIC_S
4ae0: 48 45 4c 4c 3d 30 0a 20 20 20 20 20 20 20 20 20  HELL=0.         
4af0: 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20   continue.      
4b00: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b    }.        if {
4b10: 24 61 72 67 20 65 71 20 22 2d 2d 65 6e 61 62 6c  $arg eq "--enabl
4b20: 65 2d 66 74 73 35 22 7d 20 7b 0a 20 20 20 20 20  e-fts5"} {.     
4b30: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 70 74       lappend opt
4b40: 73 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c  s -DSQLITE_ENABL
4b50: 45 5f 46 54 53 35 0a 20 20 20 20 20 20 20 20 20  E_FTS5.         
4b60: 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20   continue.      
4b70: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b    }.        if {
4b80: 24 61 72 67 20 65 71 20 22 2d 2d 65 6e 61 62 6c  $arg eq "--enabl
4b90: 65 2d 6a 73 6f 6e 31 22 7d 20 7b 0a 20 20 20 20  e-json1"} {.    
4ba0: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 70        lappend op
4bb0: 74 73 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42  ts -DSQLITE_ENAB
4bc0: 4c 45 5f 4a 53 4f 4e 31 0a 20 20 20 20 20 20 20  LE_JSON1.       
4bd0: 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20     continue.    
4be0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
4bf0: 20 7b 24 61 72 67 20 65 71 20 22 2d 2d 65 6e 61   {$arg eq "--ena
4c00: 62 6c 65 2d 73 68 61 72 65 64 22 7d 20 7b 0a 20  ble-shared"} {. 
4c10: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
4c20: 20 6d 61 6b 65 4f 70 74 73 20 55 53 45 5f 43 52   makeOpts USE_CR
4c30: 54 5f 44 4c 4c 3d 31 20 44 59 4e 41 4d 49 43 5f  T_DLL=1 DYNAMIC_
4c40: 53 48 45 4c 4c 3d 31 0a 20 20 20 20 20 20 20 20  SHELL=1.        
4c50: 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20    continue.     
4c60: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
4c70: 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6e 66 69     lappend confi
4c80: 67 4f 70 74 73 20 24 61 72 67 0a 20 20 20 20 7d  gOpts $arg.    }
4c90: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 69 66   else {.      if
4ca0: 20 7b 24 3a 3a 4d 53 56 43 7d 20 7b 0a 20 20 20   {$::MSVC} {.   
4cb0: 20 20 20 20 20 69 66 20 7b 24 61 72 67 20 65 71       if {$arg eq
4cc0: 20 22 2d 67 22 7d 20 7b 0a 20 20 20 20 20 20 20   "-g"} {.       
4cd0: 20 20 20 6c 61 70 70 65 6e 64 20 63 66 6c 61 67     lappend cflag
4ce0: 73 20 2d 5a 69 0a 20 20 20 20 20 20 20 20 20 20  s -Zi.          
4cf0: 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20 20  continue.       
4d00: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b   }.        if {[
4d10: 72 65 67 65 78 70 20 2d 2d 20 7b 5e 2d 4f 28 5c  regexp -- {^-O(\
4d20: 64 2b 29 24 7d 20 24 61 72 67 20 61 6c 6c 20 6c  d+)$} $arg all l
4d30: 65 76 65 6c 5d 7d 20 74 68 65 6e 20 7b 0a 20 20  evel]} then {.  
4d40: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
4d50: 6d 61 6b 65 4f 70 74 73 20 4f 50 54 49 4d 49 5a  makeOpts OPTIMIZ
4d60: 41 54 49 4f 4e 53 3d 24 6c 65 76 65 6c 0a 20 20  ATIONS=$level.  
4d70: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
4d80: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4d90: 20 7d 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64   }.      lappend
4da0: 20 63 66 6c 61 67 73 20 24 61 72 67 0a 20 20 20   cflags $arg.   
4db0: 20 7d 0a 20 20 7d 0a 0a 20 20 23 20 44 69 73 61   }.  }..  # Disa
4dc0: 62 6c 65 20 73 79 6e 63 20 74 6f 20 6d 61 6b 65  ble sync to make
4dd0: 20 74 65 73 74 69 6e 67 20 66 61 73 74 65 72 2e   testing faster.
4de0: 0a 20 20 23 0a 20 20 6c 61 70 70 65 6e 64 20 6f  .  #.  lappend o
4df0: 70 74 73 20 2d 44 53 51 4c 49 54 45 5f 4e 4f 5f  pts -DSQLITE_NO_
4e00: 53 59 4e 43 3d 31 0a 0a 20 20 23 20 53 6f 6d 65  SYNC=1..  # Some
4e10: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20   configurations 
4e20: 61 6c 72 65 61 64 79 20 73 65 74 20 48 41 56 45  already set HAVE
4e30: 5f 55 53 4c 45 45 50 3b 20 69 6e 20 74 68 61 74  _USLEEP; in that
4e40: 20 63 61 73 65 2c 20 73 6b 69 70 20 69 74 2e 0a   case, skip it..
4e50: 20 20 23 0a 20 20 69 66 20 7b 5b 6c 73 65 61 72    #.  if {[lsear
4e60: 63 68 20 2d 72 65 67 65 78 70 20 24 6f 70 74 73  ch -regexp $opts
4e70: 20 7b 5e 2d 44 48 41 56 45 5f 55 53 4c 45 45 50   {^-DHAVE_USLEEP
4e80: 28 3f 3a 3d 7c 24 29 7d 5d 3d 3d 2d 31 7d 20 7b  (?:=|$)}]==-1} {
4e90: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 70 74  .    lappend opt
4ea0: 73 20 2d 44 48 41 56 45 5f 55 53 4c 45 45 50 3d  s -DHAVE_USLEEP=
4eb0: 31 0a 20 20 7d 0a 0a 20 20 23 20 41 64 64 20 74  1.  }..  # Add t
4ec0: 68 65 20 64 65 66 69 6e 65 20 66 6f 72 20 74 68  he define for th
4ed0: 69 73 20 70 6c 61 74 66 6f 72 6d 2e 0a 20 20 23  is platform..  #
4ee0: 0a 20 20 69 66 20 7b 24 3a 3a 74 63 6c 5f 70 6c  .  if {$::tcl_pl
4ef0: 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29  atform(platform)
4f00: 3d 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 20  =="windows"} {. 
4f10: 20 20 20 6c 61 70 70 65 6e 64 20 6f 70 74 73 20     lappend opts 
4f20: 2d 44 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 3d  -DSQLITE_OS_WIN=
4f30: 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  1.  } else {.   
4f40: 20 6c 61 70 70 65 6e 64 20 6f 70 74 73 20 2d 44   lappend opts -D
4f50: 53 51 4c 49 54 45 5f 4f 53 5f 55 4e 49 58 3d 31  SQLITE_OS_UNIX=1
4f60: 0a 20 20 7d 0a 0a 20 20 23 20 53 65 74 20 74 68  .  }..  # Set th
4f70: 65 20 73 75 62 2d 64 69 72 65 63 74 6f 72 79 20  e sub-directory 
4f80: 74 6f 20 75 73 65 2e 0a 20 20 23 0a 20 20 73 65  to use..  #.  se
4f90: 74 20 64 69 72 20 5b 73 74 72 69 6e 67 20 74 6f  t dir [string to
4fa0: 6c 6f 77 65 72 20 5b 73 74 72 69 6e 67 20 6d 61  lower [string ma
4fb0: 70 20 7b 2d 20 5f 20 22 20 22 20 5f 7d 20 24 6e  p {- _ " " _} $n
4fc0: 61 6d 65 5d 5d 0a 0a 20 20 23 20 4a 6f 69 6e 20  ame]]..  # Join 
4fd0: 6f 70 74 69 6f 6e 20 6c 69 73 74 73 20 69 6e 74  option lists int
4fe0: 6f 20 73 74 72 69 6e 67 73 2c 20 75 73 69 6e 67  o strings, using
4ff0: 20 73 70 61 63 65 20 61 73 20 64 65 6c 69 6d 69   space as delimi
5000: 74 65 72 2e 0a 20 20 23 0a 20 20 73 65 74 20 6d  ter..  #.  set m
5010: 61 6b 65 4f 70 74 73 20 5b 6a 6f 69 6e 20 24 6d  akeOpts [join $m
5020: 61 6b 65 4f 70 74 73 20 22 20 22 5d 0a 20 20 73  akeOpts " "].  s
5030: 65 74 20 63 66 6c 61 67 73 20 20 20 5b 6a 6f 69  et cflags   [joi
5040: 6e 20 24 63 66 6c 61 67 73 20 22 20 22 5d 0a 20  n $cflags " "]. 
5050: 20 73 65 74 20 6f 70 74 73 20 20 20 20 20 5b 6a   set opts     [j
5060: 6f 69 6e 20 24 6f 70 74 73 20 22 20 22 5d 0a 0a  oin $opts " "]..
5070: 20 20 6c 61 70 70 65 6e 64 20 61 6c 6c 74 65 73    lappend alltes
5080: 74 73 20 5b 6c 69 73 74 20 5c 0a 20 20 20 20 20  ts [list \.     
5090: 20 24 74 69 74 6c 65 20 24 64 69 72 20 24 63 6f   $title $dir $co
50a0: 6e 66 69 67 4f 70 74 73 20 24 74 65 73 74 74 61  nfigOpts $testta
50b0: 72 67 65 74 20 24 6d 61 6b 65 4f 70 74 73 20 24  rget $makeOpts $
50c0: 63 66 6c 61 67 73 20 24 6f 70 74 73 5d 0a 7d 0a  cflags $opts].}.
50d0: 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .# The following
50e0: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72   procedure retur
50f0: 6e 73 20 74 68 65 20 22 63 6f 6e 66 69 67 75 72  ns the "configur
5100: 65 22 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 62 65  e" command to be
5110: 20 65 78 65 63 74 75 65 64 20 66 6f 72 0a 23 20   exectued for.# 
5120: 74 68 65 20 63 75 72 72 65 6e 74 20 70 6c 61 74  the current plat
5130: 66 6f 72 6d 2c 20 77 68 69 63 68 20 6d 61 79 20  form, which may 
5140: 62 65 20 57 69 6e 64 6f 77 73 20 28 76 69 61 20  be Windows (via 
5150: 4d 69 6e 47 57 2c 20 65 74 63 29 2e 0a 23 0a 70  MinGW, etc)..#.p
5160: 72 6f 63 20 63 6f 6e 66 69 67 75 72 65 43 6f 6d  roc configureCom
5170: 6d 61 6e 64 20 7b 6f 70 74 73 7d 20 7b 0a 20 20  mand {opts} {.  
5180: 69 66 20 7b 24 3a 3a 4d 53 56 43 7d 20 72 65 74  if {$::MSVC} ret
5190: 75 72 6e 20 5b 6c 69 73 74 5d 3b 20 23 20 54 68  urn [list]; # Th
51a0: 69 73 20 69 73 20 6e 6f 74 20 6e 65 65 64 65 64  is is not needed
51b0: 20 66 6f 72 20 4d 53 56 43 2e 0a 20 20 73 65 74   for MSVC..  set
51c0: 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 74 72   result [list tr
51d0: 61 63 65 5f 63 6d 64 20 65 78 65 63 5d 0a 20 20  ace_cmd exec].  
51e0: 69 66 20 7b 24 3a 3a 74 63 6c 5f 70 6c 61 74 66  if {$::tcl_platf
51f0: 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d 22  orm(platform)=="
5200: 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 20 20 20 20  windows"} {.    
5210: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 73  lappend result s
5220: 68 0a 20 20 7d 0a 20 20 6c 61 70 70 65 6e 64 20  h.  }.  lappend 
5230: 72 65 73 75 6c 74 20 24 3a 3a 53 52 43 44 49 52  result $::SRCDIR
5240: 2f 63 6f 6e 66 69 67 75 72 65 20 2d 2d 65 6e 61  /configure --ena
5250: 62 6c 65 2d 6c 6f 61 64 2d 65 78 74 65 6e 73 69  ble-load-extensi
5260: 6f 6e 0a 20 20 66 6f 72 65 61 63 68 20 78 20 24  on.  foreach x $
5270: 6f 70 74 73 20 7b 6c 61 70 70 65 6e 64 20 72 65  opts {lappend re
5280: 73 75 6c 74 20 24 78 7d 0a 20 20 6c 61 70 70 65  sult $x}.  lappe
5290: 6e 64 20 72 65 73 75 6c 74 20 3e 26 20 74 65 73  nd result >& tes
52a0: 74 2e 6c 6f 67 0a 7d 0a 0a 23 20 54 68 65 20 66  t.log.}..# The f
52b0: 6f 6c 6c 6f 77 69 6e 67 20 70 72 6f 63 65 64 75  ollowing procedu
52c0: 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 22  re returns the "
52d0: 6d 61 6b 65 22 20 63 6f 6d 6d 61 6e 64 20 74 6f  make" command to
52e0: 20 62 65 20 65 78 65 63 75 74 65 64 20 66 6f 72   be executed for
52f0: 20 74 68 65 0a 23 20 73 70 65 63 69 66 69 65 64   the.# specified
5300: 20 74 61 72 67 65 74 73 2c 20 63 6f 6d 70 69 6c   targets, compil
5310: 65 72 20 66 6c 61 67 73 2c 20 61 6e 64 20 6f 70  er flags, and op
5320: 74 69 6f 6e 73 2e 0a 23 0a 70 72 6f 63 20 6d 61  tions..#.proc ma
5330: 6b 65 43 6f 6d 6d 61 6e 64 20 7b 20 74 61 72 67  keCommand { targ
5340: 65 74 73 20 6d 61 6b 65 4f 70 74 73 20 63 66 6c  ets makeOpts cfl
5350: 61 67 73 20 6f 70 74 73 20 7d 20 7b 0a 20 20 73  ags opts } {.  s
5360: 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20  et result [list 
5370: 74 72 61 63 65 5f 63 6d 64 20 65 78 65 63 5d 0a  trace_cmd exec].
5380: 20 20 69 66 20 7b 24 3a 3a 4d 53 56 43 7d 20 7b    if {$::MSVC} {
5390: 0a 20 20 20 20 73 65 74 20 6e 6d 61 6b 65 44 69  .    set nmakeDi
53a0: 72 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  r [file nativena
53b0: 6d 65 20 24 3a 3a 53 52 43 44 49 52 5d 0a 20 20  me $::SRCDIR].  
53c0: 20 20 73 65 74 20 6e 6d 61 6b 65 46 69 6c 65 20    set nmakeFile 
53d0: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
53e0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6e 6d 61   [file join $nma
53f0: 6b 65 44 69 72 20 4d 61 6b 65 66 69 6c 65 2e 6d  keDir Makefile.m
5400: 73 63 5d 5d 0a 20 20 20 20 6c 61 70 70 65 6e 64  sc]].    lappend
5410: 20 72 65 73 75 6c 74 20 6e 6d 61 6b 65 20 2f 66   result nmake /f
5420: 20 24 6e 6d 61 6b 65 46 69 6c 65 20 54 4f 50 3d   $nmakeFile TOP=
5430: 24 6e 6d 61 6b 65 44 69 72 0a 20 20 20 20 73 65  $nmakeDir.    se
5440: 74 20 74 63 6c 44 69 72 20 5b 66 69 6c 65 20 6e  t tclDir [file n
5450: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file 
5460: 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0a 20 20 20 20  normalize \.    
5470: 20 20 20 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d      [file dirnam
5480: 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  e [file dirname 
5490: 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66 65 78 65 63  [info nameofexec
54a0: 75 74 61 62 6c 65 5d 5d 5d 5d 5d 0a 20 20 20 20  utable]]]]].    
54b0: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 22  lappend result "
54c0: 54 43 4c 44 49 52 3d 24 74 63 6c 44 69 72 22 0a  TCLDIR=$tclDir".
54d0: 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20      if {[regexp 
54e0: 7b 55 53 45 5f 53 54 44 43 41 4c 4c 3d 31 7d 20  {USE_STDCALL=1} 
54f0: 24 63 66 6c 61 67 73 5d 7d 20 7b 0a 20 20 20 20  $cflags]} {.    
5500: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
5510: 20 55 53 45 5f 53 54 44 43 41 4c 4c 3d 31 0a 20   USE_STDCALL=1. 
5520: 20 20 20 7d 0a 20 20 7d 20 65 6c 73 65 20 7b 0a     }.  } else {.
5530: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
5540: 6c 74 20 6d 61 6b 65 0a 20 20 7d 0a 20 20 66 6f  lt make.  }.  fo
5550: 72 65 61 63 68 20 6d 61 6b 65 4f 70 74 20 24 6d  reach makeOpt $m
5560: 61 6b 65 4f 70 74 73 20 7b 0a 20 20 20 20 6c 61  akeOpts {.    la
5570: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 6d 61  ppend result $ma
5580: 6b 65 4f 70 74 0a 20 20 7d 0a 20 20 6c 61 70 70  keOpt.  }.  lapp
5590: 65 6e 64 20 72 65 73 75 6c 74 20 63 6c 65 61 6e  end result clean
55a0: 0a 20 20 66 6f 72 65 61 63 68 20 74 61 72 67 65  .  foreach targe
55b0: 74 20 24 74 61 72 67 65 74 73 20 7b 0a 20 20 20  t $targets {.   
55c0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
55d0: 24 74 61 72 67 65 74 0a 20 20 7d 0a 20 20 6c 61  $target.  }.  la
55e0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 43 46 4c  ppend result CFL
55f0: 41 47 53 3d 24 63 66 6c 61 67 73 20 4f 50 54 53  AGS=$cflags OPTS
5600: 3d 24 6f 70 74 73 20 3e 3e 26 20 74 65 73 74 2e  =$opts >>& test.
5610: 6c 6f 67 0a 7d 0a 0a 23 20 54 68 65 20 66 6f 6c  log.}..# The fol
5620: 6c 6f 77 69 6e 67 20 70 72 6f 63 65 64 75 72 65  lowing procedure
5630: 20 70 72 69 6e 74 73 20 69 74 73 20 61 72 67 75   prints its argu
5640: 6d 65 6e 74 73 20 69 66 20 3a 3a 54 52 41 43 45  ments if ::TRACE
5650: 20 69 73 20 74 72 75 65 2e 0a 23 20 41 6e 64 20   is true..# And 
5660: 69 74 20 65 78 65 63 75 74 65 73 20 74 68 65 20  it executes the 
5670: 63 6f 6d 6d 61 6e 64 20 6f 66 20 69 74 73 20 61  command of its a
5680: 72 67 75 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  rguments in the 
5690: 63 61 6c 6c 69 6e 67 20 63 6f 6e 74 65 78 74 0a  calling context.
56a0: 23 20 69 66 20 3a 3a 44 52 59 52 55 4e 20 69 73  # if ::DRYRUN is
56b0: 20 66 61 6c 73 65 2e 0a 23 0a 70 72 6f 63 20 74   false..#.proc t
56c0: 72 61 63 65 5f 63 6d 64 20 7b 61 72 67 73 7d 20  race_cmd {args} 
56d0: 7b 0a 20 20 69 66 20 7b 24 3a 3a 54 52 41 43 45  {.  if {$::TRACE
56e0: 7d 20 7b 0a 20 20 20 20 50 55 54 53 20 24 61 72  } {.    PUTS $ar
56f0: 67 73 0a 20 20 7d 0a 20 20 73 65 74 20 72 65 73  gs.  }.  set res
5700: 20 22 22 0a 20 20 69 66 20 7b 21 24 3a 3a 44 52   "".  if {!$::DR
5710: 59 52 55 4e 7d 20 7b 0a 20 20 20 20 73 65 74 20  YRUN} {.    set 
5720: 72 65 73 20 5b 75 70 6c 65 76 65 6c 20 31 20 24  res [uplevel 1 $
5730: 61 72 67 73 5d 0a 20 20 7d 0a 20 20 72 65 74 75  args].  }.  retu
5740: 72 6e 20 24 72 65 73 0a 7d 0a 0a 0a 23 20 54 68  rn $res.}...# Th
5750: 69 73 20 70 72 6f 63 20 70 72 6f 63 65 73 73 65  is proc processe
5760: 73 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  s the command li
5770: 6e 65 20 6f 70 74 69 6f 6e 73 20 70 61 73 73 65  ne options passe
5780: 64 20 74 6f 20 74 68 69 73 20 73 63 72 69 70 74  d to this script
5790: 2e 0a 23 20 43 75 72 72 65 6e 74 6c 79 20 74 68  ..# Currently th
57a0: 65 20 6f 6e 6c 79 20 6f 70 74 69 6f 6e 20 73 75  e only option su
57b0: 70 70 6f 72 74 65 64 20 69 73 20 22 2d 6d 61 6b  pported is "-mak
57c0: 65 66 69 6c 65 22 2c 20 64 65 66 61 75 6c 74 0a  efile", default.
57d0: 23 20 22 72 65 6c 65 61 73 65 74 65 73 74 2e 6d  # "releasetest.m
57e0: 6b 22 2e 20 53 65 74 20 74 68 65 20 3a 3a 4d 41  k". Set the ::MA
57f0: 4b 45 46 49 4c 45 20 76 61 72 69 61 62 6c 65 20  KEFILE variable 
5800: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
5810: 74 68 69 73 0a 23 20 6f 70 74 69 6f 6e 2e 0a 23  this.# option..#
5820: 0a 70 72 6f 63 20 70 72 6f 63 65 73 73 5f 6f 70  .proc process_op
5830: 74 69 6f 6e 73 20 7b 61 72 67 76 7d 20 7b 0a 20  tions {argv} {. 
5840: 20 73 65 74 20 3a 3a 53 52 43 44 49 52 20 20 20   set ::SRCDIR   
5850: 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65   [file normalize
5860: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b   [file dirname [
5870: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a  file dirname $::
5880: 61 72 67 76 30 5d 5d 5d 0a 20 20 73 65 74 20 3a  argv0]]].  set :
5890: 3a 51 55 49 43 4b 20 20 20 20 20 20 20 20 20 20  :QUICK          
58a0: 30 0a 20 20 73 65 74 20 3a 3a 4d 53 56 43 20 20  0.  set ::MSVC  
58b0: 20 20 20 20 20 20 20 20 20 30 0a 20 20 73 65 74           0.  set
58c0: 20 3a 3a 42 55 49 4c 44 4f 4e 4c 59 20 20 20 20   ::BUILDONLY    
58d0: 20 20 30 0a 20 20 73 65 74 20 3a 3a 44 52 59 52    0.  set ::DRYR
58e0: 55 4e 20 20 20 20 20 20 20 20 20 30 0a 20 20 73  UN         0.  s
58f0: 65 74 20 3a 3a 54 52 41 43 45 20 20 20 20 20 20  et ::TRACE      
5900: 20 20 20 20 30 0a 20 20 73 65 74 20 3a 3a 4a 4f      0.  set ::JO
5910: 42 53 20 20 20 20 20 20 20 20 20 20 20 31 0a 20  BS           1. 
5920: 20 73 65 74 20 3a 3a 50 52 4f 47 52 45 53 53 5f   set ::PROGRESS_
5930: 4d 53 47 53 20 20 30 0a 20 20 73 65 74 20 3a 3a  MSGS  0.  set ::
5940: 57 49 54 48 54 43 4c 20 20 20 20 20 20 20 20 7b  WITHTCL        {
5950: 7d 0a 20 20 73 65 74 20 3a 3a 46 4f 52 43 45 20  }.  set ::FORCE 
5960: 20 20 20 20 20 20 20 20 20 30 0a 20 20 73 65 74           0.  set
5970: 20 3a 3a 4b 45 45 50 46 49 4c 45 53 20 20 20 20   ::KEEPFILES    
5980: 20 20 30 20 20 20 20 20 20 20 20 20 20 3b 23 20    0          ;# 
5990: 4b 65 65 70 20 65 78 74 72 61 20 66 69 6c 65 73  Keep extra files
59a0: 20 61 66 74 65 72 20 74 65 73 74 20 72 75 6e 0a   after test run.
59b0: 20 20 73 65 74 20 63 6f 6e 66 69 67 20 7b 7d 0a    set config {}.
59c0: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 24    set platform $
59d0: 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6f  ::tcl_platform(o
59e0: 73 29 2d 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f  s)-$::tcl_platfo
59f0: 72 6d 28 6d 61 63 68 69 6e 65 29 0a 0a 20 20 66  rm(machine)..  f
5a00: 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69  or {set i 0} {$i
5a10: 20 3c 20 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67   < [llength $arg
5a20: 76 5d 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20  v]} {incr i} {. 
5a30: 20 20 20 73 65 74 20 78 20 5b 6c 69 6e 64 65 78     set x [lindex
5a40: 20 24 61 72 67 76 20 24 69 5d 0a 20 20 20 20 69   $argv $i].    i
5a50: 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 2d 2d 5b  f {[regexp {^--[
5a60: 61 2d 7a 5d 7d 20 24 78 5d 7d 20 7b 73 65 74 20  a-z]} $x]} {set 
5a70: 78 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20  x [string range 
5a80: 24 78 20 31 20 65 6e 64 5d 7d 0a 20 20 20 20 73  $x 1 end]}.    s
5a90: 77 69 74 63 68 20 2d 67 6c 6f 62 20 2d 2d 20 24  witch -glob -- $
5aa0: 78 20 7b 0a 20 20 20 20 20 20 2d 73 6c 61 76 65  x {.      -slave
5ab0: 20 7b 0a 20 20 20 20 20 20 20 20 72 75 6e 5f 73   {.        run_s
5ac0: 6c 61 76 65 5f 74 65 73 74 0a 20 20 20 20 20 20  lave_test.      
5ad0: 20 20 65 78 69 74 0a 20 20 20 20 20 20 7d 0a 0a    exit.      }..
5ae0: 20 20 20 20 20 20 23 20 55 6e 64 6f 63 75 6d 65        # Undocume
5af0: 6e 74 65 64 20 6c 65 67 61 63 79 20 6f 70 74 69  nted legacy opti
5b00: 6f 6e 3a 20 2d 2d 73 72 63 64 69 72 20 44 49 52  on: --srcdir DIR
5b10: 45 43 54 4f 52 59 0a 20 20 20 20 20 20 23 0a 20  ECTORY.      #. 
5b20: 20 20 20 20 20 23 20 44 49 52 45 43 54 4f 52 59       # DIRECTORY
5b30: 20 69 73 20 74 68 65 20 72 6f 6f 74 20 6f 66 20   is the root of 
5b40: 74 68 65 20 53 51 4c 69 74 65 20 63 68 65 63 6b  the SQLite check
5b50: 6f 75 74 2e 20 20 54 68 69 73 20 73 65 74 73 20  out.  This sets 
5b60: 74 68 65 0a 20 20 20 20 20 20 23 20 53 52 43 44  the.      # SRCD
5b70: 49 52 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  IR global variab
5b80: 6c 65 2e 20 20 42 75 74 20 74 68 61 74 20 76 61  le.  But that va
5b90: 72 69 61 62 6c 65 20 69 73 20 61 6c 72 65 61 64  riable is alread
5ba0: 79 20 73 65 74 0a 20 20 20 20 20 20 23 20 61 75  y set.      # au
5bb0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 6f 20 74  tomatically so t
5bc0: 68 65 72 65 20 72 65 61 6c 6c 79 20 69 73 20 6e  here really is n
5bd0: 6f 20 72 65 61 73 6f 6e 20 74 6f 20 68 61 76 65  o reason to have
5be0: 20 74 68 69 73 20 6f 70 74 69 6f 6e 2e 0a 20 20   this option..  
5bf0: 20 20 20 20 23 0a 20 20 20 20 20 20 2d 73 72 63      #.      -src
5c00: 64 69 72 20 7b 0a 20 20 20 20 20 20 20 20 69 6e  dir {.        in
5c10: 63 72 20 69 0a 20 20 20 20 20 20 20 20 73 65 74  cr i.        set
5c20: 20 3a 3a 53 52 43 44 49 52 20 5b 66 69 6c 65 20   ::SRCDIR [file 
5c30: 6e 6f 72 6d 61 6c 69 7a 65 20 5b 6c 69 6e 64 65  normalize [linde
5c40: 78 20 24 61 72 67 76 20 24 69 5d 5d 0a 20 20 20  x $argv $i]].   
5c50: 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d 70 6c 61     }..      -pla
5c60: 74 66 6f 72 6d 20 7b 0a 20 20 20 20 20 20 20 20  tform {.        
5c70: 69 6e 63 72 20 69 0a 20 20 20 20 20 20 20 20 73  incr i.        s
5c80: 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 6c 69 6e  et platform [lin
5c90: 64 65 78 20 24 61 72 67 76 20 24 69 5d 0a 20 20  dex $argv $i].  
5ca0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d 6a 6f      }..      -jo
5cb0: 62 73 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 63  bs {.        inc
5cc0: 72 20 69 0a 20 20 20 20 20 20 20 20 73 65 74 20  r i.        set 
5cd0: 3a 3a 4a 4f 42 53 20 5b 6c 69 6e 64 65 78 20 24  ::JOBS [lindex $
5ce0: 61 72 67 76 20 24 69 5d 0a 20 20 20 20 20 20 7d  argv $i].      }
5cf0: 0a 0a 20 20 20 20 20 20 2d 70 72 6f 67 72 65 73  ..      -progres
5d00: 73 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  s {.        set 
5d10: 3a 3a 50 52 4f 47 52 45 53 53 5f 4d 53 47 53 20  ::PROGRESS_MSGS 
5d20: 31 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  1.      }..     
5d30: 20 2d 71 75 69 63 6b 20 7b 0a 20 20 20 20 20 20   -quick {.      
5d40: 20 20 73 65 74 20 3a 3a 51 55 49 43 4b 20 31 0a    set ::QUICK 1.
5d50: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2d 76        }.      -v
5d60: 65 72 79 71 75 69 63 6b 20 7b 0a 20 20 20 20 20  eryquick {.     
5d70: 20 20 20 73 65 74 20 3a 3a 51 55 49 43 4b 20 32     set ::QUICK 2
5d80: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
5d90: 2d 63 6f 6e 66 69 67 20 7b 0a 20 20 20 20 20 20  -config {.      
5da0: 20 20 69 6e 63 72 20 69 0a 20 20 20 20 20 20 20    incr i.       
5db0: 20 73 65 74 20 63 6f 6e 66 69 67 20 5b 6c 69 6e   set config [lin
5dc0: 64 65 78 20 24 61 72 67 76 20 24 69 5d 0a 20 20  dex $argv $i].  
5dd0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d 6d 73      }..      -ms
5de0: 76 63 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  vc {.        set
5df0: 20 3a 3a 4d 53 56 43 20 31 0a 20 20 20 20 20 20   ::MSVC 1.      
5e00: 7d 0a 0a 20 20 20 20 20 20 2d 62 75 69 6c 64 6f  }..      -buildo
5e10: 6e 6c 79 20 7b 0a 20 20 20 20 20 20 20 20 73 65  nly {.        se
5e20: 74 20 3a 3a 42 55 49 4c 44 4f 4e 4c 59 20 31 0a  t ::BUILDONLY 1.
5e30: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d        }..      -
5e40: 64 72 79 72 75 6e 20 7b 0a 20 20 20 20 20 20 20  dryrun {.       
5e50: 20 73 65 74 20 3a 3a 44 52 59 52 55 4e 20 31 0a   set ::DRYRUN 1.
5e60: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d        }..      -
5e70: 66 6f 72 63 65 20 2d 0a 20 20 20 20 20 20 2d 66  force -.      -f
5e80: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a   {.        set :
5e90: 3a 46 4f 52 43 45 20 31 0a 20 20 20 20 20 20 7d  :FORCE 1.      }
5ea0: 0a 0a 20 20 20 20 20 20 2d 74 72 61 63 65 20 7b  ..      -trace {
5eb0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 54  .        set ::T
5ec0: 52 41 43 45 20 31 0a 20 20 20 20 20 20 7d 0a 0a  RACE 1.      }..
5ed0: 20 20 20 20 20 20 2d 69 6e 66 6f 20 7b 0a 20 20        -info {.  
5ee0: 20 20 20 20 20 20 50 55 54 53 20 22 43 6f 6d 6d        PUTS "Comm
5ef0: 61 6e 64 2d 6c 69 6e 65 20 4f 70 74 69 6f 6e 73  and-line Options
5f00: 3a 22 0a 20 20 20 20 20 20 20 20 50 55 54 53 20  :".        PUTS 
5f10: 22 20 20 20 2d 2d 73 72 63 64 69 72 20 24 3a 3a  "   --srcdir $::
5f20: 53 52 43 44 49 52 22 0a 20 20 20 20 20 20 20 20  SRCDIR".        
5f30: 50 55 54 53 20 22 20 20 20 2d 2d 70 6c 61 74 66  PUTS "   --platf
5f40: 6f 72 6d 20 5b 6c 69 73 74 20 24 70 6c 61 74 66  orm [list $platf
5f50: 6f 72 6d 5d 22 0a 20 20 20 20 20 20 20 20 50 55  orm]".        PU
5f60: 54 53 20 22 20 20 20 2d 2d 63 6f 6e 66 69 67 20  TS "   --config 
5f70: 5b 6c 69 73 74 20 24 63 6f 6e 66 69 67 5d 22 0a  [list $config]".
5f80: 20 20 20 20 20 20 20 20 69 66 20 7b 24 3a 3a 51          if {$::Q
5f90: 55 49 43 4b 7d 20 7b 0a 20 20 20 20 20 20 20 20  UICK} {.        
5fa0: 20 20 69 66 20 7b 24 3a 3a 51 55 49 43 4b 3d 3d    if {$::QUICK==
5fb0: 31 7d 20 7b 50 55 54 53 20 22 20 20 20 2d 2d 71  1} {PUTS "   --q
5fc0: 75 69 63 6b 22 7d 0a 20 20 20 20 20 20 20 20 20  uick"}.         
5fd0: 20 69 66 20 7b 24 3a 3a 51 55 49 43 4b 3d 3d 32   if {$::QUICK==2
5fe0: 7d 20 7b 50 55 54 53 20 22 20 20 20 2d 2d 76 65  } {PUTS "   --ve
5ff0: 72 79 71 75 69 63 6b 22 7d 0a 20 20 20 20 20 20  ryquick"}.      
6000: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b    }.        if {
6010: 24 3a 3a 4d 53 56 43 7d 20 20 20 20 20 20 7b 50  $::MSVC}      {P
6020: 55 54 53 20 22 20 20 20 2d 2d 6d 73 76 63 22 7d  UTS "   --msvc"}
6030: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 3a 3a  .        if {$::
6040: 42 55 49 4c 44 4f 4e 4c 59 7d 20 7b 50 55 54 53  BUILDONLY} {PUTS
6050: 20 22 20 20 20 2d 2d 62 75 69 6c 64 6f 6e 6c 79   "   --buildonly
6060: 22 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24  "}.        if {$
6070: 3a 3a 44 52 59 52 55 4e 7d 20 20 20 20 7b 50 55  ::DRYRUN}    {PU
6080: 54 53 20 22 20 20 20 2d 2d 64 72 79 72 75 6e 22  TS "   --dryrun"
6090: 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 3a  }.        if {$:
60a0: 3a 54 52 41 43 45 7d 20 20 20 20 20 7b 50 55 54  :TRACE}     {PUT
60b0: 53 20 22 20 20 20 2d 2d 74 72 61 63 65 22 7d 0a  S "   --trace"}.
60c0: 20 20 20 20 20 20 20 20 50 55 54 53 20 22 5c 6e          PUTS "\n
60d0: 41 76 61 69 6c 61 62 6c 65 20 2d 2d 70 6c 61 74  Available --plat
60e0: 66 6f 72 6d 20 6f 70 74 69 6f 6e 73 3a 22 0a 20  form options:". 
60f0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 79         foreach y
6100: 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20 6e   [lsort [array n
6110: 61 6d 65 73 20 3a 3a 50 6c 61 74 66 6f 72 6d 73  ames ::Platforms
6120: 5d 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 50  ]] {.          P
6130: 55 54 53 20 22 20 20 20 5b 6c 69 73 74 20 24 79  UTS "   [list $y
6140: 5d 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ]".        }.   
6150: 20 20 20 20 20 50 55 54 53 20 22 5c 6e 41 76 61       PUTS "\nAva
6160: 69 6c 61 62 6c 65 20 2d 2d 63 6f 6e 66 69 67 20  ilable --config 
6170: 6f 70 74 69 6f 6e 73 3a 22 0a 20 20 20 20 20 20  options:".      
6180: 20 20 66 6f 72 65 61 63 68 20 79 20 5b 6c 73 6f    foreach y [lso
6190: 72 74 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20  rt [array names 
61a0: 3a 3a 43 6f 6e 66 69 67 73 5d 5d 20 7b 0a 20 20  ::Configs]] {.  
61b0: 20 20 20 20 20 20 20 20 50 55 54 53 20 22 20 20          PUTS "  
61c0: 20 5b 6c 69 73 74 20 24 79 5d 22 0a 20 20 20 20   [list $y]".    
61d0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 65 78      }.        ex
61e0: 69 74 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  it.      }..    
61f0: 20 20 2d 67 20 7b 0a 20 20 20 20 20 20 20 20 6c    -g {.        l
6200: 61 70 70 65 6e 64 20 3a 3a 45 58 54 52 41 43 4f  append ::EXTRACO
6210: 4e 46 49 47 20 5b 6c 69 6e 64 65 78 20 24 61 72  NFIG [lindex $ar
6220: 67 76 20 24 69 5d 0a 20 20 20 20 20 20 7d 0a 0a  gv $i].      }..
6230: 20 20 20 20 20 20 2d 6b 65 65 70 20 7b 0a 20 20        -keep {.  
6240: 20 20 20 20 20 20 73 65 74 20 3a 3a 4b 45 45 50        set ::KEEP
6250: 46 49 4c 45 53 20 31 0a 20 20 20 20 20 20 7d 0a  FILES 1.      }.
6260: 0a 20 20 20 20 20 20 2d 77 69 74 68 2d 74 63 6c  .      -with-tcl
6270: 3d 2a 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  =* {.        set
6280: 20 3a 3a 57 49 54 48 54 43 4c 20 2d 24 78 0a 20   ::WITHTCL -$x. 
6290: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d 44       }..      -D
62a0: 2a 20 2d 0a 20 20 20 20 20 20 2d 4f 2a 20 2d 0a  * -.      -O* -.
62b0: 20 20 20 20 20 20 2d 65 6e 61 62 6c 65 2d 2a 20        -enable-* 
62c0: 2d 0a 20 20 20 20 20 20 2d 64 69 73 61 62 6c 65  -.      -disable
62d0: 2d 2a 20 2d 0a 20 20 20 20 20 20 2a 3d 2a 20 7b  -* -.      *=* {
62e0: 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64  .        lappend
62f0: 20 3a 3a 45 58 54 52 41 43 4f 4e 46 49 47 20 5b   ::EXTRACONFIG [
6300: 6c 69 6e 64 65 78 20 24 61 72 67 76 20 24 69 5d  lindex $argv $i]
6310: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
6320: 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20 20  default {.      
6330: 20 20 50 55 54 53 45 52 52 20 22 22 0a 20 20 20    PUTSERR "".   
6340: 20 20 20 20 20 50 55 54 53 45 52 52 20 5b 73 74       PUTSERR [st
6350: 72 69 6e 67 20 74 72 69 6d 20 24 3a 3a 55 53 41  ring trim $::USA
6360: 47 45 5f 4d 45 53 53 41 47 45 5d 0a 20 20 20 20  GE_MESSAGE].    
6370: 20 20 20 20 65 78 69 74 20 2d 31 0a 20 20 20 20      exit -1.    
6380: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20    }.    }.  }.. 
6390: 20 69 66 20 7b 30 3d 3d 5b 69 6e 66 6f 20 65 78   if {0==[info ex
63a0: 69 73 74 73 20 3a 3a 50 6c 61 74 66 6f 72 6d 73  ists ::Platforms
63b0: 28 24 70 6c 61 74 66 6f 72 6d 29 5d 7d 20 7b 0a  ($platform)]} {.
63c0: 20 20 20 20 50 55 54 53 20 22 55 6e 6b 6e 6f 77      PUTS "Unknow
63d0: 6e 20 70 6c 61 74 66 6f 72 6d 3a 20 24 70 6c 61  n platform: $pla
63e0: 74 66 6f 72 6d 22 0a 20 20 20 20 50 55 54 53 4e  tform".    PUTSN
63f0: 4e 4c 20 22 53 65 74 20 74 68 65 20 2d 70 6c 61  NL "Set the -pla
6400: 74 66 6f 72 6d 20 6f 70 74 69 6f 6e 20 74 6f 20  tform option to 
6410: 22 0a 20 20 20 20 73 65 74 20 70 72 69 6e 74 20  ".    set print 
6420: 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61  [list].    forea
6430: 63 68 20 70 20 5b 61 72 72 61 79 20 6e 61 6d 65  ch p [array name
6440: 73 20 3a 3a 50 6c 61 74 66 6f 72 6d 73 5d 20 7b  s ::Platforms] {
6450: 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70  .      lappend p
6460: 72 69 6e 74 20 22 5c 22 24 70 5c 22 22 0a 20 20  rint "\"$p\"".  
6470: 20 20 7d 0a 20 20 20 20 6c 73 65 74 20 70 72 69    }.    lset pri
6480: 6e 74 20 65 6e 64 20 22 6f 72 20 5b 6c 69 6e 64  nt end "or [lind
6490: 65 78 20 24 70 72 69 6e 74 20 65 6e 64 5d 22 0a  ex $print end]".
64a0: 20 20 20 20 50 55 54 53 20 22 5b 6a 6f 69 6e 20      PUTS "[join 
64b0: 24 70 72 69 6e 74 20 7b 2c 20 7d 5d 2e 22 0a 20  $print {, }].". 
64c0: 20 20 20 65 78 69 74 0a 20 20 7d 0a 0a 20 20 69     exit.  }..  i
64d0: 66 20 7b 24 63 6f 6e 66 69 67 21 3d 22 22 7d 20  f {$config!=""} 
64e0: 7b 0a 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67  {.    if {[lleng
64f0: 74 68 20 24 63 6f 6e 66 69 67 5d 3d 3d 31 7d 20  th $config]==1} 
6500: 7b 6c 61 70 70 65 6e 64 20 63 6f 6e 66 69 67 20  {lappend config 
6510: 66 75 6c 6c 74 65 73 74 7d 0a 20 20 20 20 73 65  fulltest}.    se
6520: 74 20 3a 3a 43 4f 4e 46 49 47 4c 49 53 54 20 24  t ::CONFIGLIST $
6530: 63 6f 6e 66 69 67 0a 20 20 7d 20 65 6c 73 65 20  config.  } else 
6540: 7b 0a 20 20 20 20 69 66 20 7b 24 3a 3a 4a 4f 42  {.    if {$::JOB
6550: 53 3e 31 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  S>1} {.      set
6560: 20 3a 3a 43 4f 4e 46 49 47 4c 49 53 54 20 7b 7d   ::CONFIGLIST {}
6570: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 7b  .      foreach {
6580: 74 61 72 67 65 74 20 7a 43 6f 6e 66 69 67 7d 20  target zConfig} 
6590: 5b 6c 72 65 76 65 72 73 65 20 24 3a 3a 50 6c 61  [lreverse $::Pla
65a0: 74 66 6f 72 6d 73 28 24 70 6c 61 74 66 6f 72 6d  tforms($platform
65b0: 29 5d 20 7b 0a 20 20 20 20 20 20 20 20 61 70 70  )] {.        app
65c0: 65 6e 64 20 3a 3a 43 4f 4e 46 49 47 4c 49 53 54  end ::CONFIGLIST
65d0: 20 5b 66 6f 72 6d 61 74 20 22 20 20 20 20 25 2d   [format "    %-
65e0: 32 35 73 20 25 73 5c 6e 22 20 5c 0a 20 20 20 20  25s %s\n" \.    
65f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6600: 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74             [list
6610: 20 24 7a 43 6f 6e 66 69 67 5d 20 5b 6c 69 73 74   $zConfig] [list
6620: 20 24 74 61 72 67 65 74 5d 5d 0a 20 20 20 20 20   $target]].     
6630: 20 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a   }.    } else {.
6640: 20 20 20 20 20 20 73 65 74 20 3a 3a 43 4f 4e 46        set ::CONF
6650: 49 47 4c 49 53 54 20 24 3a 3a 50 6c 61 74 66 6f  IGLIST $::Platfo
6660: 72 6d 73 28 24 70 6c 61 74 66 6f 72 6d 29 0a 20  rms($platform). 
6670: 20 20 20 7d 0a 20 20 7d 0a 20 20 50 55 54 53 20     }.  }.  PUTS 
6680: 22 52 75 6e 6e 69 6e 67 20 74 68 65 20 66 6f 6c  "Running the fol
6690: 6c 6f 77 69 6e 67 20 74 65 73 74 20 63 6f 6e 66  lowing test conf
66a0: 69 67 75 72 61 74 69 6f 6e 73 20 66 6f 72 20 24  igurations for $
66b0: 70 6c 61 74 66 6f 72 6d 3a 22 0a 20 20 50 55 54  platform:".  PUT
66c0: 53 20 22 20 20 20 20 5b 73 74 72 69 6e 67 20 74  S "    [string t
66d0: 72 69 6d 20 24 3a 3a 43 4f 4e 46 49 47 4c 49 53  rim $::CONFIGLIS
66e0: 54 5d 22 0a 20 20 50 55 54 53 4e 4e 4c 20 22 46  T]".  PUTSNNL "F
66f0: 6c 61 67 73 3a 22 0a 20 20 69 66 20 7b 24 3a 3a  lags:".  if {$::
6700: 50 52 4f 47 52 45 53 53 5f 4d 53 47 53 7d 20 7b  PROGRESS_MSGS} {
6710: 50 55 54 53 4e 4e 4c 20 22 20 2d 2d 70 72 6f 67  PUTSNNL " --prog
6720: 72 65 73 73 22 7d 0a 20 20 69 66 20 7b 24 3a 3a  ress"}.  if {$::
6730: 44 52 59 52 55 4e 7d 20 7b 50 55 54 53 4e 4e 4c  DRYRUN} {PUTSNNL
6740: 20 22 20 2d 2d 64 72 79 72 75 6e 22 7d 0a 20 20   " --dryrun"}.  
6750: 69 66 20 7b 24 3a 3a 42 55 49 4c 44 4f 4e 4c 59  if {$::BUILDONLY
6760: 7d 20 7b 50 55 54 53 4e 4e 4c 20 22 20 2d 2d 62  } {PUTSNNL " --b
6770: 75 69 6c 64 6f 6e 6c 79 22 7d 0a 20 20 69 66 20  uildonly"}.  if 
6780: 7b 24 3a 3a 4d 53 56 43 7d 20 7b 50 55 54 53 4e  {$::MSVC} {PUTSN
6790: 4e 4c 20 22 20 2d 2d 6d 73 76 63 22 7d 0a 20 20  NL " --msvc"}.  
67a0: 73 77 69 74 63 68 20 2d 2d 20 24 3a 3a 51 55 49  switch -- $::QUI
67b0: 43 4b 20 7b 0a 20 20 20 20 20 31 20 7b 50 55 54  CK {.     1 {PUT
67c0: 53 4e 4e 4c 20 22 20 2d 2d 71 75 69 63 6b 22 7d  SNNL " --quick"}
67d0: 0a 20 20 20 20 20 32 20 7b 50 55 54 53 4e 4e 4c  .     2 {PUTSNNL
67e0: 20 22 20 2d 2d 76 65 72 79 71 75 69 63 6b 22 7d   " --veryquick"}
67f0: 0a 20 20 7d 0a 20 20 69 66 20 7b 24 3a 3a 4a 4f  .  }.  if {$::JO
6800: 42 53 3e 31 7d 20 7b 50 55 54 53 4e 4e 4c 20 22  BS>1} {PUTSNNL "
6810: 20 2d 2d 6a 6f 62 73 20 24 3a 3a 4a 4f 42 53 22   --jobs $::JOBS"
6820: 7d 0a 20 20 50 55 54 53 20 22 22 0a 7d 0a 0a 23  }.  PUTS "".}..#
6830: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
6840: 20 74 68 65 72 65 20 61 72 65 20 75 6e 63 6f 6d   there are uncom
6850: 6d 69 74 74 65 64 20 63 68 61 6e 67 65 73 20 69  mitted changes i
6860: 6e 20 74 68 65 20 53 51 4c 69 74 65 20 73 6f 75  n the SQLite sou
6870: 72 63 65 0a 23 20 63 68 65 63 6b 6f 75 74 2e 20  rce.# checkout. 
6880: 20 45 78 69 74 20 69 66 20 74 68 65 72 65 20 61   Exit if there a
6890: 72 65 2e 20 20 45 78 63 65 70 74 3a 20 20 44 6f  re.  Except:  Do
68a0: 20 6e 6f 74 68 69 6e 67 20 69 66 20 74 68 65 20   nothing if the 
68b0: 2d 2d 66 6f 72 63 65 0a 23 20 66 6c 61 67 20 69  --force.# flag i
68c0: 73 20 75 73 65 64 2e 20 20 41 6c 73 6f 2c 20 69  s used.  Also, i
68d0: 67 6e 6f 72 65 20 74 68 69 73 20 74 65 73 74 20  gnore this test 
68e0: 69 66 20 74 68 65 20 66 6f 73 73 69 6c 20 62 69  if the fossil bi
68f0: 6e 61 72 79 20 69 73 0a 23 20 75 6e 61 76 61 69  nary is.# unavai
6900: 6c 61 62 6c 65 2c 20 6f 72 20 69 66 20 74 68 65  lable, or if the
6910: 20 73 6f 75 72 63 65 20 74 72 65 65 20 69 73 20   source tree is 
6920: 6e 6f 74 20 61 20 76 61 6c 69 64 20 66 6f 73 73  not a valid foss
6930: 69 6c 20 63 68 65 63 6b 6f 75 74 2e 0a 23 0a 70  il checkout..#.p
6940: 72 6f 63 20 63 68 65 63 6b 5f 75 6e 63 6f 6d 6d  roc check_uncomm
6950: 69 74 74 65 64 20 7b 7d 20 7b 0a 20 20 69 66 20  itted {} {.  if 
6960: 7b 24 3a 3a 46 4f 52 43 45 7d 20 72 65 74 75 72  {$::FORCE} retur
6970: 6e 0a 20 20 73 65 74 20 70 77 64 20 5b 70 77 64  n.  set pwd [pwd
6980: 5d 0a 20 20 63 64 20 24 3a 3a 53 52 43 44 49 52  ].  cd $::SRCDIR
6990: 0a 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65  .  if {[catch {e
69a0: 78 65 63 20 66 6f 73 73 69 6c 20 63 68 61 6e 67  xec fossil chang
69b0: 65 73 7d 20 72 65 73 5d 3d 3d 30 20 26 26 20 5b  es} res]==0 && [
69c0: 73 74 72 69 6e 67 20 74 72 69 6d 20 24 72 65 73  string trim $res
69d0: 5d 21 3d 22 22 7d 20 7b 0a 20 20 20 20 70 75 74  ]!=""} {.    put
69e0: 73 20 22 45 52 52 4f 52 3a 20 54 68 65 20 63 68  s "ERROR: The ch
69f0: 65 63 6b 2d 6f 75 74 20 63 6f 6e 74 61 69 6e 73  eck-out contains
6a00: 20 75 6e 63 6f 6d 6d 69 74 74 65 64 20 63 68 61   uncommitted cha
6a10: 6e 67 65 73 3a 22 0a 20 20 20 20 70 75 74 73 20  nges:".    puts 
6a20: 24 72 65 73 0a 20 20 20 20 70 75 74 73 20 22 55  $res.    puts "U
6a30: 73 65 20 74 68 65 20 2d 66 20 6f 72 20 2d 2d 66  se the -f or --f
6a40: 6f 72 63 65 20 6f 70 74 69 6f 6e 73 20 74 6f 20  orce options to 
6a50: 6f 76 65 72 72 69 64 65 22 0a 20 20 20 20 65 78  override".    ex
6a60: 69 74 20 31 0a 20 20 7d 0a 20 20 63 64 20 24 70  it 1.  }.  cd $p
6a70: 77 64 0a 7d 0a 0a 23 20 41 20 74 65 73 74 20 72  wd.}..# A test r
6a80: 75 6e 20 68 61 73 20 6a 75 73 74 20 66 69 6e 69  un has just fini
6a90: 73 68 65 64 20 69 6e 20 64 69 72 65 63 74 6f 72  shed in director
6aa0: 79 20 24 64 69 72 2e 20 54 68 69 73 20 63 6f 6d  y $dir. This com
6ab0: 6d 61 6e 64 20 64 65 6c 65 74 65 73 20 61 6c 6c  mand deletes all
6ac0: 0a 23 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c  .# non-essential
6ad0: 20 66 69 6c 65 73 20 66 72 6f 6d 20 74 68 65 20   files from the 
6ae0: 64 69 72 65 63 74 6f 72 79 2e 20 53 70 65 63 69  directory. Speci
6af0: 66 69 63 61 6c 6c 79 2c 20 65 76 65 72 79 74 68  fically, everyth
6b00: 69 6e 67 20 65 78 63 65 70 74 0a 23 0a 23 20 20  ing except.#.#  
6b10: 20 2a 20 54 68 65 20 22 74 65 73 74 66 69 78 74   * The "testfixt
6b20: 75 72 65 22 20 61 6e 64 20 22 73 71 6c 69 74 65  ure" and "sqlite
6b30: 33 22 20 62 69 6e 61 72 69 65 73 2c 0a 23 20 20  3" binaries,.#  
6b40: 20 2a 20 54 68 65 20 22 74 65 73 74 2d 6f 75 74   * The "test-out
6b50: 2e 6c 6f 67 22 20 61 6e 64 20 22 74 65 73 74 2e  .log" and "test.
6b60: 6c 6f 67 22 20 6c 6f 67 20 66 69 6c 65 73 2e 0a  log" log files..
6b70: 23 0a 70 72 6f 63 20 63 6c 65 61 6e 75 70 20 7b  #.proc cleanup {
6b80: 64 69 72 7d 20 7b 0a 20 20 73 65 74 20 4b 28 74  dir} {.  set K(t
6b90: 65 73 74 66 69 78 74 75 72 65 29 20 31 0a 20 20  estfixture) 1.  
6ba0: 73 65 74 20 4b 28 74 65 73 74 66 69 78 74 75 72  set K(testfixtur
6bb0: 65 2e 65 78 65 29 20 31 0a 20 20 73 65 74 20 4b  e.exe) 1.  set K
6bc0: 28 73 71 6c 69 74 65 33 29 20 31 0a 20 20 73 65  (sqlite3) 1.  se
6bd0: 74 20 4b 28 73 71 6c 69 74 65 33 2e 65 78 65 29  t K(sqlite3.exe)
6be0: 20 31 0a 20 20 73 65 74 20 4b 28 74 65 73 74 2d   1.  set K(test-
6bf0: 6f 75 74 2e 74 78 74 29 20 31 0a 20 20 73 65 74  out.txt) 1.  set
6c00: 20 4b 28 74 65 73 74 2e 6c 6f 67 29 20 31 0a 0a   K(test.log) 1..
6c10: 20 20 66 6f 72 65 61 63 68 20 66 20 5b 67 6c 6f    foreach f [glo
6c20: 62 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5b 66  b -nocomplain [f
6c30: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20 2a 5d  ile join $dir *]
6c40: 5d 20 7b 0a 20 20 20 20 73 65 74 20 74 61 69 6c  ] {.    set tail
6c50: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 5d 0a   [file tail $f].
6c60: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
6c70: 69 73 74 73 20 4b 28 24 74 61 69 6c 29 5d 3d 3d  ists K($tail)]==
6c80: 30 7d 20 7b 20 0a 20 20 20 20 20 20 66 69 6c 65  0} { .      file
6c90: 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 24   delete -force $
6ca0: 66 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 0a  f.    }.  }.}...
6cb0: 23 20 4d 61 69 6e 20 72 6f 75 74 69 6e 65 2e 0a  # Main routine..
6cc0: 23 0a 70 72 6f 63 20 6d 61 69 6e 20 7b 61 72 67  #.proc main {arg
6cd0: 76 7d 20 7b 0a 0a 20 20 23 20 50 72 6f 63 65 73  v} {..  # Proces
6ce0: 73 20 61 6e 79 20 63 6f 6d 6d 61 6e 64 20 6c 69  s any command li
6cf0: 6e 65 20 6f 70 74 69 6f 6e 73 2e 0a 20 20 73 65  ne options..  se
6d00: 74 20 3a 3a 45 58 54 52 41 43 4f 4e 46 49 47 20  t ::EXTRACONFIG 
6d10: 7b 7d 0a 20 20 70 72 6f 63 65 73 73 5f 6f 70 74  {}.  process_opt
6d20: 69 6f 6e 73 20 24 61 72 67 76 0a 20 20 69 66 20  ions $argv.  if 
6d30: 7b 21 24 3a 3a 44 52 59 52 55 4e 7d 20 63 68 65  {!$::DRYRUN} che
6d40: 63 6b 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 0a 20  ck_uncommitted. 
6d50: 20 50 55 54 53 20 5b 73 74 72 69 6e 67 20 72 65   PUTS [string re
6d60: 70 65 61 74 20 2a 20 37 39 5d 0a 0a 20 20 73 65  peat * 79]..  se
6d70: 74 20 3a 3a 4e 45 52 52 20 30 0a 20 20 73 65 74  t ::NERR 0.  set
6d80: 20 3a 3a 4e 54 45 53 54 20 30 0a 20 20 73 65 74   ::NTEST 0.  set
6d90: 20 3a 3a 4e 54 45 53 54 43 41 53 45 20 30 0a 20   ::NTESTCASE 0. 
6da0: 20 73 65 74 20 3a 3a 4e 45 52 52 43 41 53 45 20   set ::NERRCASE 
6db0: 30 0a 20 20 73 65 74 20 3a 3a 53 51 4c 49 54 45  0.  set ::SQLITE
6dc0: 5f 56 45 52 53 49 4f 4e 20 7b 7d 0a 20 20 73 65  _VERSION {}.  se
6dd0: 74 20 53 54 41 52 54 54 49 4d 45 20 5b 63 6c 6f  t STARTTIME [clo
6de0: 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 20 20 66 6f  ck seconds].  fo
6df0: 72 65 61 63 68 20 7b 7a 43 6f 6e 66 69 67 20 74  reach {zConfig t
6e00: 61 72 67 65 74 7d 20 24 3a 3a 43 4f 4e 46 49 47  arget} $::CONFIG
6e10: 4c 49 53 54 20 7b 0a 20 20 20 20 69 66 20 7b 24  LIST {.    if {$
6e20: 3a 3a 4d 53 56 43 20 26 26 20 28 24 7a 43 6f 6e  ::MSVC && ($zCon
6e30: 66 69 67 20 65 71 20 22 53 61 6e 69 74 69 7a 65  fig eq "Sanitize
6e40: 22 20 7c 7c 20 22 63 68 65 63 6b 73 79 6d 62 6f  " || "checksymbo
6e50: 6c 73 22 20 69 6e 20 24 74 61 72 67 65 74 0a 20  ls" in $target. 
6e60: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 22 76 61            || "va
6e70: 6c 67 72 69 6e 64 74 65 73 74 22 20 69 6e 20 24  lgrindtest" in $
6e80: 74 61 72 67 65 74 29 7d 20 7b 0a 20 20 20 20 20  target)} {.     
6e90: 20 50 55 54 53 20 22 53 6b 69 70 70 69 6e 67 20   PUTS "Skipping 
6ea0: 24 7a 43 6f 6e 66 69 67 20 2f 20 24 74 61 72 67  $zConfig / $targ
6eb0: 65 74 20 66 6f 72 20 4d 53 56 43 2e 2e 2e 22 0a  et for MSVC...".
6ec0: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20        continue. 
6ed0: 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 24 74 61     }.    if {$ta
6ee0: 72 67 65 74 20 6e 65 20 22 63 68 65 63 6b 73 79  rget ne "checksy
6ef0: 6d 62 6f 6c 73 22 7d 20 7b 0a 20 20 20 20 20 20  mbols"} {.      
6f00: 73 77 69 74 63 68 20 2d 2d 20 24 3a 3a 51 55 49  switch -- $::QUI
6f10: 43 4b 20 7b 0a 20 20 20 20 20 20 20 20 20 31 20  CK {.         1 
6f20: 7b 73 65 74 20 74 61 72 67 65 74 20 71 75 69 63  {set target quic
6f30: 6b 74 65 73 74 7d 0a 20 20 20 20 20 20 20 20 20  ktest}.         
6f40: 32 20 7b 73 65 74 20 74 61 72 67 65 74 20 73 6d  2 {set target sm
6f50: 6f 6b 65 74 65 73 74 7d 0a 20 20 20 20 20 20 7d  oketest}.      }
6f60: 0a 20 20 20 20 20 20 69 66 20 7b 24 3a 3a 42 55  .      if {$::BU
6f70: 49 4c 44 4f 4e 4c 59 7d 20 7b 0a 20 20 20 20 20  ILDONLY} {.     
6f80: 20 20 20 73 65 74 20 74 61 72 67 65 74 20 74 65     set target te
6f90: 73 74 66 69 78 74 75 72 65 0a 20 20 20 20 20 20  stfixture.      
6fa0: 20 20 69 66 20 7b 24 3a 3a 74 63 6c 5f 70 6c 61    if {$::tcl_pla
6fb0: 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29 3d  tform(platform)=
6fc0: 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 20 20  ="windows"} {.  
6fd0: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 74          append t
6fe0: 61 72 67 65 74 20 2e 65 78 65 0a 20 20 20 20 20  arget .exe.     
6ff0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
7000: 20 7d 0a 20 20 20 20 73 65 74 20 63 6f 6e 66 69   }.    set confi
7010: 67 5f 6f 70 74 69 6f 6e 73 20 5b 63 6f 6e 63 61  g_options [conca
7020: 74 20 24 3a 3a 43 6f 6e 66 69 67 73 28 24 7a 43  t $::Configs($zC
7030: 6f 6e 66 69 67 29 20 24 3a 3a 45 58 54 52 41 43  onfig) $::EXTRAC
7040: 4f 4e 46 49 47 5d 0a 0a 20 20 20 20 69 6e 63 72  ONFIG]..    incr
7050: 20 4e 54 45 53 54 0a 20 20 20 20 61 64 64 5f 74   NTEST.    add_t
7060: 65 73 74 5f 73 75 69 74 65 20 61 6c 6c 20 24 7a  est_suite all $z
7070: 43 6f 6e 66 69 67 20 24 74 61 72 67 65 74 20 24  Config $target $
7080: 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 0a 0a  config_options..
7090: 20 20 20 20 23 20 49 66 20 74 68 65 20 63 6f 6e      # If the con
70a0: 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 63 6c 75  figuration inclu
70b0: 64 65 64 20 74 68 65 20 53 51 4c 49 54 45 5f 44  ded the SQLITE_D
70c0: 45 42 55 47 20 6f 70 74 69 6f 6e 2c 20 74 68 65  EBUG option, the
70d0: 6e 20 72 65 6d 6f 76 65 0a 20 20 20 20 23 20 69  n remove.    # i
70e0: 74 20 61 6e 64 20 72 75 6e 20 76 65 72 79 71 75  t and run veryqu
70f0: 69 63 6b 2e 74 65 73 74 2e 20 49 66 20 69 74 20  ick.test. If it 
7100: 64 69 64 20 6e 6f 74 20 69 6e 63 6c 75 64 65 20  did not include 
7110: 74 68 65 20 53 51 4c 49 54 45 5f 44 45 42 55 47  the SQLITE_DEBUG
7120: 20 6f 70 74 69 6f 6e 0a 20 20 20 20 23 20 61 64   option.    # ad
7130: 64 20 69 74 20 61 6e 64 20 72 75 6e 20 76 65 72  d it and run ver
7140: 79 71 75 69 63 6b 2e 74 65 73 74 2e 0a 20 20 20  yquick.test..   
7150: 20 69 66 20 7b 24 74 61 72 67 65 74 21 3d 22 63   if {$target!="c
7160: 68 65 63 6b 73 79 6d 62 6f 6c 73 22 20 26 26 20  hecksymbols" && 
7170: 24 74 61 72 67 65 74 21 3d 22 76 61 6c 67 72 69  $target!="valgri
7180: 6e 64 74 65 73 74 22 0a 20 20 20 20 20 20 20 20  ndtest".        
7190: 20 20 20 26 26 20 24 74 61 72 67 65 74 21 3d 22     && $target!="
71a0: 66 75 7a 7a 6f 6f 6d 74 65 73 74 22 20 26 26 20  fuzzoomtest" && 
71b0: 21 24 3a 3a 42 55 49 4c 44 4f 4e 4c 59 20 26 26  !$::BUILDONLY &&
71c0: 20 24 3a 3a 51 55 49 43 4b 3c 32 7d 20 7b 0a 20   $::QUICK<2} {. 
71d0: 20 20 20 20 20 73 65 74 20 64 65 62 75 67 5f 69       set debug_i
71e0: 64 78 20 5b 6c 73 65 61 72 63 68 20 2d 67 6c 6f  dx [lsearch -glo
71f0: 62 20 24 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e  b $config_option
7200: 73 20 2d 44 53 51 4c 49 54 45 5f 44 45 42 55 47  s -DSQLITE_DEBUG
7210: 2a 5d 0a 20 20 20 20 20 20 73 65 74 20 78 74 61  *].      set xta
7220: 72 67 65 74 20 24 74 61 72 67 65 74 0a 20 20 20  rget $target.   
7230: 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b     regsub -all {
7240: 66 75 6c 6c 74 65 73 74 5b 61 2d 7a 5d 2a 7d 20  fulltest[a-z]*} 
7250: 24 78 74 61 72 67 65 74 20 74 65 73 74 20 78 74  $xtarget test xt
7260: 61 72 67 65 74 0a 20 20 20 20 20 20 72 65 67 73  arget.      regs
7270: 75 62 20 2d 61 6c 6c 20 7b 66 75 7a 7a 6f 6f 6d  ub -all {fuzzoom
7280: 74 65 73 74 7d 20 24 78 74 61 72 67 65 74 20 66  test} $xtarget f
7290: 75 7a 7a 74 65 73 74 20 78 74 61 72 67 65 74 0a  uzztest xtarget.
72a0: 20 20 20 20 20 20 69 66 20 7b 24 64 65 62 75 67        if {$debug
72b0: 5f 69 64 78 20 3c 20 30 7d 20 7b 0a 20 20 20 20  _idx < 0} {.    
72c0: 20 20 20 20 69 6e 63 72 20 4e 54 45 53 54 0a 20      incr NTEST. 
72d0: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f         append co
72e0: 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 20 22 20 2d  nfig_options " -
72f0: 44 53 51 4c 49 54 45 5f 44 45 42 55 47 3d 31 20  DSQLITE_DEBUG=1 
7300: 2d 44 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 49  -DSQLITE_EXTRA_I
7310: 46 4e 55 4c 4c 52 4f 57 3d 31 22 0a 20 20 20 20  FNULLROW=1".    
7320: 20 20 20 20 61 64 64 5f 74 65 73 74 5f 73 75 69      add_test_sui
7330: 74 65 20 61 6c 6c 20 22 24 7b 7a 43 6f 6e 66 69  te all "${zConfi
7340: 67 7d 5f 64 65 62 75 67 22 20 24 78 74 61 72 67  g}_debug" $xtarg
7350: 65 74 20 24 63 6f 6e 66 69 67 5f 6f 70 74 69 6f  et $config_optio
7360: 6e 73 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ns.      } else 
7370: 7b 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20 4e  {.        incr N
7380: 54 45 53 54 0a 20 20 20 20 20 20 20 20 72 65 67  TEST.        reg
7390: 73 75 62 20 7b 20 2a 2d 44 53 51 4c 49 54 45 5f  sub { *-DSQLITE_
73a0: 4d 45 4d 44 45 42 55 47 5b 5e 20 5d 2a 20 2a 7d  MEMDEBUG[^ ]* *}
73b0: 20 24 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73   $config_options
73c0: 20 7b 20 7d 20 63 6f 6e 66 69 67 5f 6f 70 74 69   { } config_opti
73d0: 6f 6e 73 0a 20 20 20 20 20 20 20 20 72 65 67 73  ons.        regs
73e0: 75 62 20 7b 20 2a 2d 44 53 51 4c 49 54 45 5f 44  ub { *-DSQLITE_D
73f0: 45 42 55 47 5b 5e 20 5d 2a 20 2a 7d 20 24 63 6f  EBUG[^ ]* *} $co
7400: 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 20 7b 20 7d  nfig_options { }
7410: 20 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 0a   config_options.
7420: 20 20 20 20 20 20 20 20 61 64 64 5f 74 65 73 74          add_test
7430: 5f 73 75 69 74 65 20 61 6c 6c 20 22 24 7b 7a 43  _suite all "${zC
7440: 6f 6e 66 69 67 7d 5f 6e 64 65 62 75 67 22 20 24  onfig}_ndebug" $
7450: 78 74 61 72 67 65 74 20 24 63 6f 6e 66 69 67 5f  xtarget $config_
7460: 6f 70 74 69 6f 6e 73 0a 20 20 20 20 20 20 7d 0a  options.      }.
7470: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 72 75 6e      }.  }..  run
7480: 5f 61 6c 6c 5f 74 65 73 74 5f 73 75 69 74 65 73  _all_test_suites
7490: 20 24 61 6c 6c 0a 0a 20 20 73 65 74 20 65 6c 61   $all..  set ela
74a0: 70 73 65 74 69 6d 65 20 5b 65 78 70 72 20 7b 5b  psetime [expr {[
74b0: 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 2d 24  clock seconds]-$
74c0: 53 54 41 52 54 54 49 4d 45 7d 5d 0a 20 20 73 65  STARTTIME}].  se
74d0: 74 20 68 72 20 5b 65 78 70 72 20 7b 24 65 6c 61  t hr [expr {$ela
74e0: 70 73 65 74 69 6d 65 2f 33 36 30 30 7d 5d 0a 20  psetime/3600}]. 
74f0: 20 73 65 74 20 6d 69 6e 20 5b 65 78 70 72 20 7b   set min [expr {
7500: 28 24 65 6c 61 70 73 65 74 69 6d 65 2f 36 30 29  ($elapsetime/60)
7510: 25 36 30 7d 5d 0a 20 20 73 65 74 20 73 65 63 20  %60}].  set sec 
7520: 5b 65 78 70 72 20 7b 24 65 6c 61 70 73 65 74 69  [expr {$elapseti
7530: 6d 65 25 36 30 7d 5d 0a 20 20 73 65 74 20 65 74  me%60}].  set et
7540: 69 6d 65 20 5b 66 6f 72 6d 61 74 20 28 25 30 32  ime [format (%02
7550: 64 3a 25 30 32 64 3a 25 30 32 64 29 20 24 68 72  d:%02d:%02d) $hr
7560: 20 24 6d 69 6e 20 24 73 65 63 5d 0a 20 20 69 66   $min $sec].  if
7570: 20 7b 24 3a 3a 4a 4f 42 53 3e 31 7d 20 7b 61 70   {$::JOBS>1} {ap
7580: 70 65 6e 64 20 65 74 69 6d 65 20 22 20 24 3a 3a  pend etime " $::
7590: 4a 4f 42 53 20 63 6f 72 65 73 22 7d 0a 20 20 69  JOBS cores"}.  i
75a0: 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 20  f {[catch {exec 
75b0: 68 6f 73 74 6e 61 6d 65 7d 20 48 4e 41 4d 45 5d  hostname} HNAME]
75c0: 3d 3d 30 7d 20 7b 61 70 70 65 6e 64 20 65 74 69  ==0} {append eti
75d0: 6d 65 20 22 20 6f 6e 20 24 48 4e 41 4d 45 22 7d  me " on $HNAME"}
75e0: 0a 20 20 50 55 54 53 20 5b 73 74 72 69 6e 67 20  .  PUTS [string 
75f0: 72 65 70 65 61 74 20 2a 20 37 39 5d 0a 20 20 69  repeat * 79].  i
7600: 6e 63 72 20 3a 3a 4e 45 52 52 43 41 53 45 20 24  ncr ::NERRCASE $
7610: 3a 3a 4e 45 52 52 0a 20 20 50 55 54 53 20 22 24  ::NERR.  PUTS "$
7620: 3a 3a 4e 45 52 52 43 41 53 45 20 66 61 69 6c 75  ::NERRCASE failu
7630: 72 65 73 20 6f 75 74 20 6f 66 20 24 3a 3a 4e 54  res out of $::NT
7640: 45 53 54 43 41 53 45 20 74 65 73 74 73 20 69 6e  ESTCASE tests in
7650: 20 24 65 74 69 6d 65 22 0a 20 20 69 66 20 7b 24   $etime".  if {$
7660: 3a 3a 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e  ::SQLITE_VERSION
7670: 20 6e 65 20 22 22 7d 20 7b 0a 20 20 20 20 50 55   ne ""} {.    PU
7680: 54 53 20 22 53 51 4c 69 74 65 20 24 3a 3a 53 51  TS "SQLite $::SQ
7690: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 22 0a 20 20  LITE_VERSION".  
76a0: 7d 0a 7d 0a 0a 6d 61 69 6e 20 24 61 72 67 76 0a  }.}..main $argv.