/ Hex Artifact Content
Login

Artifact 5f15ab8056799e9a6e26a310d49236d2e774d6a30d0ec74601e18d4ce146b79c:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 74 63 6c 73 68  #!/usr/bin/tclsh
0010: 0a 23 0a 23 20 44 6f 63 75 6d 65 6e 74 61 74 69  .#.# Documentati
0020: 6f 6e 20 66 6f 72 20 74 68 69 73 20 73 63 72 69  on for this scri
0030: 70 74 2e 20 54 68 69 73 20 6d 61 79 20 62 65 20  pt. This may be 
0040: 6f 75 74 70 75 74 20 74 6f 20 73 74 64 65 72 72  output to stderr
0050: 0a 23 20 69 66 20 74 68 65 20 73 63 72 69 70 74  .# if the script
0060: 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 6e 63 6f   is invoked inco
0070: 72 72 65 63 74 6c 79 2e 20 53 65 65 20 74 68 65  rrectly. See the
0080: 20 5b 70 72 6f 63 65 73 73 5f 6f 70 74 69 6f 6e   [process_option
0090: 73 5d 0a 23 20 70 72 6f 63 20 62 65 6c 6f 77 2e  s].# proc below.
00a0: 0a 23 0a 73 65 74 20 3a 3a 55 53 41 47 45 5f 4d  .#.set ::USAGE_M
00b0: 45 53 53 41 47 45 20 7b 0a 54 68 69 73 20 54 63  ESSAGE {.This Tc
00c0: 6c 20 73 63 72 69 70 74 20 69 73 20 75 73 65 64  l script is used
00d0: 20 74 6f 20 74 65 73 74 20 74 68 65 20 76 61 72   to test the var
00e0: 69 6f 75 73 20 63 6f 6e 66 69 67 75 72 61 74 69  ious configurati
00f0: 6f 6e 73 20 72 65 71 75 69 72 65 64 0a 62 65 66  ons required.bef
0100: 6f 72 65 20 72 65 6c 65 61 73 69 6e 67 20 61 20  ore releasing a 
0110: 6e 65 77 20 76 65 72 73 69 6f 6e 2e 20 53 75 70  new version. Sup
0120: 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
0130: 69 6e 65 20 6f 70 74 69 6f 6e 73 20 28 61 6c 6c  ine options (all
0140: 0a 6f 70 74 69 6f 6e 61 6c 29 20 61 72 65 3a 0a  .optional) are:.
0150: 0a 20 20 20 20 2d 2d 62 75 69 6c 64 6f 6e 6c 79  .    --buildonly
0160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0170: 20 20 20 20 20 20 20 20 28 4a 75 73 74 20 62 75          (Just bu
0180: 69 6c 64 20 74 65 73 74 66 69 78 74 75 72 65 20  ild testfixture 
0190: 2d 20 64 6f 20 6e 6f 74 20 72 75 6e 29 0a 20 20  - do not run).  
01a0: 20 20 2d 2d 63 6f 6e 66 69 67 20 20 20 43 4f 4e    --config   CON
01b0: 46 49 47 4e 41 4d 45 20 20 20 20 20 20 20 20 20  FIGNAME         
01c0: 20 20 20 20 20 28 52 75 6e 20 6f 6e 6c 79 20 43       (Run only C
01d0: 4f 4e 46 49 47 4e 41 4d 45 29 0a 20 20 20 20 2d  ONFIGNAME).    -
01e0: 2d 64 72 79 72 75 6e 20 20 20 20 20 20 20 20 20  -dryrun         
01f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0200: 20 20 28 50 72 69 6e 74 20 77 68 61 74 20 77 6f    (Print what wo
0210: 75 6c 64 20 68 61 76 65 20 68 61 70 70 65 6e 65  uld have happene
0220: 64 29 0a 20 20 20 20 2d 66 7c 2d 2d 66 6f 72 63  d).    -f|--forc
0230: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
0240: 20 20 20 20 20 20 20 20 20 20 28 52 75 6e 20 65            (Run e
0250: 76 65 6e 20 69 66 20 75 6e 63 6f 6d 6d 69 74 74  ven if uncommitt
0260: 65 64 20 63 68 61 6e 67 65 73 29 0a 20 20 20 20  ed changes).    
0270: 2d 2d 69 6e 66 6f 20 20 20 20 20 20 20 20 20 20  --info          
0280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0290: 20 20 20 28 53 68 6f 77 20 64 69 61 67 6e 6f 73     (Show diagnos
02a0: 74 69 63 20 69 6e 66 6f 29 0a 20 20 20 20 2d 2d  tic info).    --
02b0: 6a 6f 62 73 20 20 20 20 20 4e 20 20 20 20 20 20  jobs     N      
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02d0: 20 28 55 73 65 20 4e 20 70 72 6f 63 65 73 73 65   (Use N processe
02e0: 73 20 2d 20 64 65 66 61 75 6c 74 20 31 29 0a 20  s - default 1). 
02f0: 20 20 20 2d 2d 6b 65 65 70 20 20 20 20 20 20 20     --keep       
0300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0310: 20 20 20 20 20 20 28 44 65 6c 65 74 65 20 6e 6f        (Delete no
0320: 20 66 69 6c 65 73 20 61 66 74 65 72 20 65 61 63   files after eac
0330: 68 20 74 65 73 74 20 72 75 6e 29 0a 20 20 20 20  h test run).    
0340: 2d 2d 6d 73 76 63 20 20 20 20 20 20 20 20 20 20  --msvc          
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0360: 20 20 20 28 55 73 65 20 4d 53 56 43 20 61 73 20     (Use MSVC as 
0370: 74 68 65 20 63 6f 6d 70 69 6c 65 72 29 0a 20 20  the compiler).  
0380: 20 20 2d 2d 70 6c 61 74 66 6f 72 6d 20 50 4c 41    --platform PLA
0390: 54 46 4f 52 4d 20 20 20 20 20 20 20 20 20 20 20  TFORM           
03a0: 20 20 20 20 20 28 73 65 65 20 62 65 6c 6f 77 29       (see below)
03b0: 0a 20 20 20 20 2d 2d 70 72 6f 67 72 65 73 73 20  .    --progress 
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 20 20 28 53 68 6f 77 20 70 72          (Show pr
03e0: 6f 67 72 65 73 73 20 6d 65 73 73 61 67 65 73 29  ogress messages)
03f0: 0a 20 20 20 20 2d 2d 71 75 69 63 6b 20 20 20 20  .    --quick    
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0410: 20 20 20 20 20 20 20 20 28 52 75 6e 20 22 76 65          (Run "ve
0420: 72 79 71 75 69 63 6b 2e 74 65 73 74 22 20 6f 6e  ryquick.test" on
0430: 6c 79 29 0a 20 20 20 20 2d 2d 76 65 72 79 71 75  ly).    --veryqu
0440: 69 63 6b 20 20 20 20 20 20 20 20 20 20 20 20 20  ick             
0450: 20 20 20 20 20 20 20 20 20 20 20 28 52 75 6e 20             (Run 
0460: 22 6d 61 6b 65 20 73 6d 6f 6b 65 74 65 73 74 22  "make smoketest"
0470: 20 6f 6e 6c 79 29 0a 20 20 20 20 2d 2d 77 69 74   only).    --wit
0480: 68 2d 74 63 6c 3d 44 49 52 20 20 20 20 20 20 20  h-tcl=DIR       
0490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 55                (U
04a0: 73 65 20 54 43 4c 20 62 75 69 6c 64 20 61 74 20  se TCL build at 
04b0: 44 49 52 29 0a 0a 54 68 65 20 73 63 72 69 70 74  DIR)..The script
04c0: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
04d0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
04e0: 72 20 2d 2d 70 6c 61 74 66 6f 72 6d 20 75 73 69  r --platform usi
04f0: 6e 67 20 74 68 65 0a 24 74 63 6c 5f 70 6c 61 74  ng the.$tcl_plat
0500: 66 6f 72 6d 28 6f 73 29 20 61 6e 64 20 24 74 63  form(os) and $tc
0510: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69  l_platform(machi
0520: 6e 65 29 20 76 61 72 69 61 62 6c 65 73 2e 20 20  ne) variables.  
0530: 53 75 70 70 6f 72 74 65 64 0a 70 6c 61 74 66 6f  Supported.platfo
0540: 72 6d 73 20 61 72 65 20 22 4c 69 6e 75 78 2d 78  rms are "Linux-x
0550: 38 36 22 2c 20 22 4c 69 6e 75 78 2d 78 38 36 5f  86", "Linux-x86_
0560: 36 34 22 2c 20 22 44 61 72 77 69 6e 2d 69 33 38  64", "Darwin-i38
0570: 36 22 2c 0a 22 44 61 72 77 69 6e 2d 78 38 36 5f  6",."Darwin-x86_
0580: 36 34 22 2c 20 22 57 69 6e 64 6f 77 73 20 4e 54  64", "Windows NT
0590: 2d 69 6e 74 65 6c 22 2c 20 61 6e 64 20 22 57 69  -intel", and "Wi
05a0: 6e 64 6f 77 73 20 4e 54 2d 61 6d 64 36 34 22 2e  ndows NT-amd64".
05b0: 0a 0a 45 76 65 72 79 20 74 65 73 74 20 62 65 67  ..Every test beg
05c0: 69 6e 73 20 77 69 74 68 20 61 20 66 72 65 73 68  ins with a fresh
05d0: 20 72 75 6e 20 6f 66 20 74 68 65 20 63 6f 6e 66   run of the conf
05e0: 69 67 75 72 65 20 73 63 72 69 70 74 20 61 74 20  igure script at 
05f0: 74 68 65 20 74 6f 70 0a 6f 66 20 74 68 65 20 53  the top.of the S
0600: 51 4c 69 74 65 20 73 6f 75 72 63 65 20 74 72 65  QLite source tre
0610: 65 2e 0a 7d 0a 0a 23 20 52 65 74 75 72 6e 20 61  e..}..# Return a
0620: 20 74 69 6d 65 73 74 61 6d 70 20 6f 66 20 74 68   timestamp of th
0630: 65 20 66 6f 72 6d 20 48 48 3a 4d 4d 3a 53 53 0a  e form HH:MM:SS.
0640: 23 0a 70 72 6f 63 20 6e 6f 77 20 7b 7d 20 7b 0a  #.proc now {} {.
0650: 20 20 72 65 74 75 72 6e 20 5b 63 6c 6f 63 6b 20    return [clock 
0660: 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65  format [clock se
0670: 63 6f 6e 64 73 5d 20 2d 66 6f 72 6d 61 74 20 25  conds] -format %
0680: 48 3a 25 4d 3a 25 53 5d 0a 7d 0a 0a 23 20 4f 6d  H:%M:%S].}..# Om
0690: 69 74 20 63 6f 6d 6d 65 6e 74 73 20 28 74 65 78  it comments (tex
06a0: 74 20 62 65 74 77 65 65 6e 20 23 20 61 6e 64 20  t between # and 
06b0: 5c 6e 29 20 69 6e 20 61 20 6c 6f 6e 67 20 6d 75  \n) in a long mu
06c0: 6c 74 69 2d 6c 69 6e 65 20 73 74 72 69 6e 67 2e  lti-line string.
06d0: 0a 23 0a 70 72 6f 63 20 73 74 72 69 70 5f 63 6f  .#.proc strip_co
06e0: 6d 6d 65 6e 74 73 20 7b 69 6e 7d 20 7b 0a 20 20  mments {in} {.  
06f0: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 23 5b 5e  regsub -all {#[^
0700: 5c 6e 5d 2a 5c 6e 7d 20 24 69 6e 20 7b 7d 20 6f  \n]*\n} $in {} o
0710: 75 74 0a 20 20 72 65 74 75 72 6e 20 24 6f 75 74  ut.  return $out
0720: 0a 7d 0a 0a 61 72 72 61 79 20 73 65 74 20 3a 3a  .}..array set ::
0730: 43 6f 6e 66 69 67 73 20 5b 73 74 72 69 70 5f 63  Configs [strip_c
0740: 6f 6d 6d 65 6e 74 73 20 7b 0a 20 20 22 44 65 66  omments {.  "Def
0750: 61 75 6c 74 22 20 7b 0a 20 20 20 20 2d 4f 32 0a  ault" {.    -O2.
0760: 20 20 20 20 2d 2d 64 69 73 61 62 6c 65 2d 61 6d      --disable-am
0770: 61 6c 67 61 6d 61 74 69 6f 6e 20 2d 2d 64 69 73  algamation --dis
0780: 61 62 6c 65 2d 73 68 61 72 65 64 0a 20 20 20 20  able-shared.    
0790: 2d 2d 65 6e 61 62 6c 65 2d 73 65 73 73 69 6f 6e  --enable-session
07a0: 0a 20 20 7d 0a 20 20 22 53 61 6e 69 74 69 7a 65  .  }.  "Sanitize
07b0: 22 20 7b 0a 20 20 20 20 43 43 3d 63 6c 61 6e 67  " {.    CC=clang
07c0: 20 2d 66 73 61 6e 69 74 69 7a 65 3d 75 6e 64 65   -fsanitize=unde
07d0: 66 69 6e 65 64 0a 20 20 20 20 2d 44 53 51 4c 49  fined.    -DSQLI
07e0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
07f0: 20 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 73 65 73      --enable-ses
0800: 73 69 6f 6e 0a 20 20 7d 0a 20 20 22 53 74 64 63  sion.  }.  "Stdc
0810: 61 6c 6c 22 20 7b 0a 20 20 20 20 2d 44 55 53 45  all" {.    -DUSE
0820: 5f 53 54 44 43 41 4c 4c 3d 31 0a 20 20 20 20 2d  _STDCALL=1.    -
0830: 4f 32 0a 20 20 7d 0a 20 20 22 48 61 76 65 2d 4e  O2.  }.  "Have-N
0840: 6f 74 22 20 7b 0a 20 20 20 20 23 20 54 68 65 20  ot" {.    # The 
0850: 22 48 61 76 65 2d 4e 6f 74 22 20 63 6f 6e 66 69  "Have-Not" confi
0860: 67 75 72 61 74 69 6f 6e 20 73 65 74 73 20 61 6c  guration sets al
0870: 6c 20 70 6f 73 73 69 62 6c 65 20 2d 55 48 41 56  l possible -UHAV
0880: 45 5f 66 65 61 74 75 72 65 20 6f 70 74 69 6f 6e  E_feature option
0890: 73 0a 20 20 20 20 23 20 69 6e 20 6f 72 64 65 72  s.    # in order
08a0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
08b0: 74 68 65 20 63 6f 64 65 20 77 6f 72 6b 73 20 65  the code works e
08c0: 76 65 6e 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  ven on platforms
08d0: 20 74 68 61 74 20 6c 61 63 6b 0a 20 20 20 20 23   that lack.    #
08e0: 20 74 68 65 73 65 20 73 75 70 70 6f 72 74 20 73   these support s
08f0: 65 72 76 69 63 65 73 2e 0a 20 20 20 20 2d 44 48  ervices..    -DH
0900: 41 56 45 5f 46 44 41 54 41 53 59 4e 43 3d 30 0a  AVE_FDATASYNC=0.
0910: 20 20 20 20 2d 44 48 41 56 45 5f 47 4d 54 49 4d      -DHAVE_GMTIM
0920: 45 5f 52 3d 30 0a 20 20 20 20 2d 44 48 41 56 45  E_R=0.    -DHAVE
0930: 5f 49 53 4e 41 4e 3d 30 0a 20 20 20 20 2d 44 48  _ISNAN=0.    -DH
0940: 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f 52 3d  AVE_LOCALTIME_R=
0950: 30 0a 20 20 20 20 2d 44 48 41 56 45 5f 4c 4f 43  0.    -DHAVE_LOC
0960: 41 4c 54 49 4d 45 5f 53 3d 30 0a 20 20 20 20 2d  ALTIME_S=0.    -
0970: 44 48 41 56 45 5f 4d 41 4c 4c 4f 43 5f 55 53 41  DHAVE_MALLOC_USA
0980: 42 4c 45 5f 53 49 5a 45 3d 30 0a 20 20 20 20 2d  BLE_SIZE=0.    -
0990: 44 48 41 56 45 5f 53 54 52 43 48 52 4e 55 4c 3d  DHAVE_STRCHRNUL=
09a0: 30 0a 20 20 20 20 2d 44 48 41 56 45 5f 55 53 4c  0.    -DHAVE_USL
09b0: 45 45 50 3d 30 0a 20 20 20 20 2d 44 48 41 56 45  EEP=0.    -DHAVE
09c0: 5f 55 54 49 4d 45 3d 30 0a 20 20 7d 0a 20 20 22  _UTIME=0.  }.  "
09d0: 55 6e 6c 6f 63 6b 2d 4e 6f 74 69 66 79 22 20 7b  Unlock-Notify" {
09e0: 0a 20 20 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53  .    -O2.    -DS
09f0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
0a00: 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 20 20 2d  OCK_NOTIFY.    -
0a10: 44 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41  DSQLITE_THREADSA
0a20: 46 45 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  FE.    -DSQLITE_
0a30: 54 43 4c 5f 44 45 46 41 55 4c 54 5f 46 55 4c 4c  TCL_DEFAULT_FULL
0a40: 4d 55 54 45 58 3d 31 0a 20 20 7d 0a 20 20 22 53  MUTEX=1.  }.  "S
0a50: 65 63 75 72 65 2d 44 65 6c 65 74 65 22 20 7b 0a  ecure-Delete" {.
0a60: 20 20 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53 51      -O2.    -DSQ
0a70: 4c 49 54 45 5f 53 45 43 55 52 45 5f 44 45 4c 45  LITE_SECURE_DELE
0a80: 54 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  TE=1.    -DSQLIT
0a90: 45 5f 53 4f 55 4e 44 45 58 3d 31 0a 20 20 7d 0a  E_SOUNDEX=1.  }.
0aa0: 20 20 22 55 70 64 61 74 65 2d 44 65 6c 65 74 65    "Update-Delete
0ab0: 2d 4c 69 6d 69 74 22 20 7b 0a 20 20 20 20 2d 4f  -Limit" {.    -O
0ac0: 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44  2.    -DSQLITE_D
0ad0: 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d  EFAULT_FILE_FORM
0ae0: 41 54 3d 34 0a 20 20 20 20 2d 44 53 51 4c 49 54  AT=4.    -DSQLIT
0af0: 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
0b00: 44 45 4c 45 54 45 5f 4c 49 4d 49 54 3d 31 0a 20  DELETE_LIMIT=1. 
0b10: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
0b20: 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
0b30: 55 53 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  US.    -DSQLITE_
0b40: 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54 43  LIKE_DOESNT_MATC
0b50: 48 5f 42 4c 4f 42 53 0a 20 20 20 20 2d 44 53 51  H_BLOBS.    -DSQ
0b60: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
0b70: 4f 52 5f 48 49 4e 54 53 0a 20 20 20 20 2d 2d 65  OR_HINTS.    --e
0b80: 6e 61 62 6c 65 2d 6a 73 6f 6e 31 0a 20 20 7d 0a  nable-json1.  }.
0b90: 20 20 22 43 68 65 63 6b 2d 53 79 6d 62 6f 6c 73    "Check-Symbols
0ba0: 22 20 7b 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  " {.    -DSQLITE
0bb0: 5f 4d 45 4d 44 45 42 55 47 3d 31 0a 20 20 20 20  _MEMDEBUG=1.    
0bc0: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
0bd0: 46 54 53 33 5f 50 41 52 45 4e 54 48 45 53 49 53  FTS3_PARENTHESIS
0be0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
0bf0: 45 4e 41 42 4c 45 5f 46 54 53 33 3d 31 0a 20 20  ENABLE_FTS3=1.  
0c00: 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c    -DSQLITE_ENABL
0c10: 45 5f 52 54 52 45 45 3d 31 0a 20 20 20 20 2d 44  E_RTREE=1.    -D
0c20: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
0c30: 4d 53 59 53 35 3d 31 0a 20 20 20 20 2d 44 53 51  MSYS5=1.    -DSQ
0c40: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
0c50: 59 53 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  YS3=1.    -DSQLI
0c60: 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
0c70: 5f 4d 45 54 41 44 41 54 41 3d 31 0a 20 20 20 20  _METADATA=1.    
0c80: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
0c90: 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
0ca0: 4d 49 54 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  MIT=1.    -DSQLI
0cb0: 54 45 5f 53 45 43 55 52 45 5f 44 45 4c 45 54 45  TE_SECURE_DELETE
0cc0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
0cd0: 53 4f 55 4e 44 45 58 3d 31 0a 20 20 20 20 2d 44  SOUNDEX=1.    -D
0ce0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54  SQLITE_ENABLE_AT
0cf0: 4f 4d 49 43 5f 57 52 49 54 45 3d 31 0a 20 20 20  OMIC_WRITE=1.   
0d00: 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
0d10: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
0d20: 4e 54 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  NT=1.    -DSQLIT
0d30: 45 5f 45 4e 41 42 4c 45 5f 4f 56 45 52 53 49 5a  E_ENABLE_OVERSIZ
0d40: 45 5f 43 45 4c 4c 5f 43 48 45 43 4b 3d 31 0a 20  E_CELL_CHECK=1. 
0d50: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
0d60: 4c 45 5f 53 54 41 54 34 0a 20 20 20 20 2d 44 53  LE_STAT4.    -DS
0d70: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
0d80: 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20  T_SCANSTATUS.   
0d90: 20 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 20   --enable-json1 
0da0: 2d 2d 65 6e 61 62 6c 65 2d 66 74 73 35 20 2d 2d  --enable-fts5 --
0db0: 65 6e 61 62 6c 65 2d 73 65 73 73 69 6f 6e 0a 20  enable-session. 
0dc0: 20 7d 0a 20 20 22 44 65 62 75 67 2d 4f 6e 65 22   }.  "Debug-One"
0dd0: 20 7b 0a 20 20 20 20 2d 2d 64 69 73 61 62 6c 65   {.    --disable
0de0: 2d 73 68 61 72 65 64 0a 20 20 20 20 2d 4f 32 20  -shared.    -O2 
0df0: 2d 66 75 6e 73 69 67 6e 65 64 2d 63 68 61 72 0a  -funsigned-char.
0e00: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 42      -DSQLITE_DEB
0e10: 55 47 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  UG=1.    -DSQLIT
0e20: 45 5f 4d 45 4d 44 45 42 55 47 3d 31 0a 20 20 20  E_MEMDEBUG=1.   
0e30: 20 2d 44 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f   -DSQLITE_MUTEX_
0e40: 4e 4f 4f 50 3d 31 0a 20 20 20 20 2d 44 53 51 4c  NOOP=1.    -DSQL
0e50: 49 54 45 5f 54 43 4c 5f 44 45 46 41 55 4c 54 5f  ITE_TCL_DEFAULT_
0e60: 46 55 4c 4c 4d 55 54 45 58 3d 31 0a 20 20 20 20  FULLMUTEX=1.    
0e70: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
0e80: 46 54 53 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c  FTS3=1.    -DSQL
0e90: 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45  ITE_ENABLE_RTREE
0ea0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
0eb0: 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 3d 31  ENABLE_MEMSYS5=1
0ec0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e  .    -DSQLITE_EN
0ed0: 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41  ABLE_COLUMN_META
0ee0: 44 41 54 41 3d 31 0a 20 20 20 20 2d 44 53 51 4c  DATA=1.    -DSQL
0ef0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
0f00: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e  .    -DSQLITE_EN
0f10: 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55  ABLE_HIDDEN_COLU
0f20: 4d 4e 53 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  MNS.    -DSQLITE
0f30: 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3d 31 32  _MAX_ATTACHED=12
0f40: 35 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4d  5.    -DSQLITE_M
0f50: 55 54 41 54 49 4f 4e 5f 54 45 53 54 0a 20 20 7d  UTATION_TEST.  }
0f60: 0a 20 20 22 46 61 73 74 2d 4f 6e 65 22 20 7b 0a  .  "Fast-One" {.
0f70: 20 20 20 20 2d 4f 36 0a 20 20 20 20 2d 44 53 51      -O6.    -DSQ
0f80: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
0f90: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
0fa0: 45 4e 41 42 4c 45 5f 52 54 52 45 45 3d 31 0a 20  ENABLE_RTREE=1. 
0fb0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
0fc0: 4c 45 5f 53 54 41 54 34 0a 20 20 20 20 2d 44 53  LE_STAT4.    -DS
0fd0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 42 55  QLITE_ENABLE_RBU
0fe0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4d 41  .    -DSQLITE_MA
0ff0: 58 5f 41 54 54 41 43 48 45 44 3d 31 32 35 0a 20  X_ATTACHED=125. 
1000: 20 20 20 2d 44 4c 4f 4e 47 44 4f 55 42 4c 45 5f     -DLONGDOUBLE_
1010: 54 59 50 45 3d 64 6f 75 62 6c 65 0a 20 20 20 20  TYPE=double.    
1020: 2d 2d 65 6e 61 62 6c 65 2d 73 65 73 73 69 6f 6e  --enable-session
1030: 0a 20 20 7d 0a 20 20 22 44 65 76 69 63 65 2d 4f  .  }.  "Device-O
1040: 6e 65 22 20 7b 0a 20 20 20 20 2d 4f 32 0a 20 20  ne" {.    -O2.  
1050: 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 42 55 47    -DSQLITE_DEBUG
1060: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
1070: 44 45 46 41 55 4c 54 5f 41 55 54 4f 56 41 43 55  DEFAULT_AUTOVACU
1080: 55 4d 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  UM=1.    -DSQLIT
1090: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
10a0: 53 49 5a 45 3d 36 34 0a 20 20 20 20 2d 44 53 51  SIZE=64.    -DSQ
10b0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 41 47  LITE_DEFAULT_PAG
10c0: 45 5f 53 49 5a 45 3d 31 30 32 34 0a 20 20 20 20  E_SIZE=1024.    
10d0: 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  -DSQLITE_DEFAULT
10e0: 5f 54 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a 45  _TEMP_CACHE_SIZE
10f0: 3d 33 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  =32.    -DSQLITE
1100: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 3d 31 0a 20  _DISABLE_LFS=1. 
1110: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
1120: 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 3d  LE_ATOMIC_WRITE=
1130: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  1.    -DSQLITE_E
1140: 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 3d 31 0a  NABLE_IOTRACE=1.
1150: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
1160: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
1170: 45 4d 45 4e 54 3d 31 0a 20 20 20 20 2d 44 53 51  EMENT=1.    -DSQ
1180: 4c 49 54 45 5f 4d 41 58 5f 50 41 47 45 5f 53 49  LITE_MAX_PAGE_SI
1190: 5a 45 3d 34 30 39 36 0a 20 20 20 20 2d 44 53 51  ZE=4096.    -DSQ
11a0: 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
11b0: 58 54 45 4e 53 49 4f 4e 3d 31 0a 20 20 20 20 2d  XTENSION=1.    -
11c0: 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f  DSQLITE_OMIT_PRO
11d0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 3d 31  GRESS_CALLBACK=1
11e0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4f 4d  .    -DSQLITE_OM
11f0: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 3d  IT_VIRTUALTABLE=
1200: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  1.    -DSQLITE_E
1210: 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
1220: 55 4d 4e 53 0a 20 20 20 20 2d 44 53 51 4c 49 54  UMNS.    -DSQLIT
1230: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 33 0a 20  E_TEMP_STORE=3. 
1240: 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e     --enable-json
1250: 31 0a 20 20 7d 0a 20 20 22 44 65 76 69 63 65 2d  1.  }.  "Device-
1260: 54 77 6f 22 20 7b 0a 20 20 20 20 2d 44 53 51 4c  Two" {.    -DSQL
1270: 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e  ITE_4_BYTE_ALIGN
1280: 45 44 5f 4d 41 4c 4c 4f 43 3d 31 0a 20 20 20 20  ED_MALLOC=1.    
1290: 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  -DSQLITE_DEFAULT
12a0: 5f 41 55 54 4f 56 41 43 55 55 4d 3d 31 0a 20 20  _AUTOVACUUM=1.  
12b0: 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55    -DSQLITE_DEFAU
12c0: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3d 31 30  LT_CACHE_SIZE=10
12d0: 30 30 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  00.    -DSQLITE_
12e0: 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f  DEFAULT_LOCKING_
12f0: 4d 4f 44 45 3d 30 0a 20 20 20 20 2d 44 53 51 4c  MODE=0.    -DSQL
1300: 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 41 47 45  ITE_DEFAULT_PAGE
1310: 5f 53 49 5a 45 3d 31 30 32 34 0a 20 20 20 20 2d  _SIZE=1024.    -
1320: 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  DSQLITE_DEFAULT_
1330: 54 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a 45 3d  TEMP_CACHE_SIZE=
1340: 31 30 30 30 0a 20 20 20 20 2d 44 53 51 4c 49 54  1000.    -DSQLIT
1350: 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 3d 31 0a  E_DISABLE_LFS=1.
1360: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
1370: 42 4c 45 5f 46 54 53 33 3d 31 0a 20 20 20 20 2d  BLE_FTS3=1.    -
1380: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  DSQLITE_ENABLE_M
1390: 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54  EMORY_MANAGEMENT
13a0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
13b0: 45 4e 41 42 4c 45 5f 52 54 52 45 45 3d 31 0a 20  ENABLE_RTREE=1. 
13c0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 4d 41 58 5f     -DSQLITE_MAX_
13d0: 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 3d  COMPOUND_SELECT=
13e0: 35 30 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  50.    -DSQLITE_
13f0: 4d 41 58 5f 50 41 47 45 5f 53 49 5a 45 3d 33 32  MAX_PAGE_SIZE=32
1400: 37 36 38 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  768.    -DSQLITE
1410: 5f 4f 4d 49 54 5f 54 52 41 43 45 3d 31 0a 20 20  _OMIT_TRACE=1.  
1420: 20 20 2d 44 53 51 4c 49 54 45 5f 54 45 4d 50 5f    -DSQLITE_TEMP_
1430: 53 54 4f 52 45 3d 33 0a 20 20 20 20 2d 44 53 51  STORE=3.    -DSQ
1440: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d  LITE_THREADSAFE=
1450: 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  2.    -DSQLITE_E
1460: 4e 41 42 4c 45 5f 44 45 53 45 52 49 41 4c 49 5a  NABLE_DESERIALIZ
1470: 45 3d 31 0a 20 20 20 20 2d 2d 65 6e 61 62 6c 65  E=1.    --enable
1480: 2d 6a 73 6f 6e 31 20 2d 2d 65 6e 61 62 6c 65 2d  -json1 --enable-
1490: 66 74 73 35 20 2d 2d 65 6e 61 62 6c 65 2d 73 65  fts5 --enable-se
14a0: 73 73 69 6f 6e 0a 20 20 7d 0a 20 20 22 4c 6f 63  ssion.  }.  "Loc
14b0: 6b 69 6e 67 2d 53 74 79 6c 65 22 20 7b 0a 20 20  king-Style" {.  
14c0: 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53 51 4c 49    -O2.    -DSQLI
14d0: 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e  TE_ENABLE_LOCKIN
14e0: 47 5f 53 54 59 4c 45 3d 31 0a 20 20 7d 0a 20 20  G_STYLE=1.  }.  
14f0: 22 41 70 70 6c 65 22 20 7b 0a 20 20 20 20 2d 4f  "Apple" {.    -O
1500: 73 0a 20 20 20 20 2d 44 48 41 56 45 5f 47 4d 54  s.    -DHAVE_GMT
1510: 49 4d 45 5f 52 3d 31 0a 20 20 20 20 2d 44 48 41  IME_R=1.    -DHA
1520: 56 45 5f 49 53 4e 41 4e 3d 31 0a 20 20 20 20 2d  VE_ISNAN=1.    -
1530: 44 48 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f  DHAVE_LOCALTIME_
1540: 52 3d 31 0a 20 20 20 20 2d 44 48 41 56 45 5f 50  R=1.    -DHAVE_P
1550: 52 45 41 44 3d 31 0a 20 20 20 20 2d 44 48 41 56  READ=1.    -DHAV
1560: 45 5f 50 57 52 49 54 45 3d 31 0a 20 20 20 20 2d  E_PWRITE=1.    -
1570: 44 48 41 56 45 5f 55 53 4c 45 45 50 3d 31 0a 20  DHAVE_USLEEP=1. 
1580: 20 20 20 2d 44 48 41 56 45 5f 55 53 4c 45 45 50     -DHAVE_USLEEP
1590: 3d 31 0a 20 20 20 20 2d 44 48 41 56 45 5f 55 54  =1.    -DHAVE_UT
15a0: 49 4d 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  IME=1.    -DSQLI
15b0: 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  TE_DEFAULT_CACHE
15c0: 5f 53 49 5a 45 3d 31 30 30 30 0a 20 20 20 20 2d  _SIZE=1000.    -
15d0: 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  DSQLITE_DEFAULT_
15e0: 43 4b 50 54 46 55 4c 4c 46 53 59 4e 43 3d 31 0a  CKPTFULLFSYNC=1.
15f0: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 46      -DSQLITE_DEF
1600: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 31  AULT_MEMSTATUS=1
1610: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45  .    -DSQLITE_DE
1620: 46 41 55 4c 54 5f 50 41 47 45 5f 53 49 5a 45 3d  FAULT_PAGE_SIZE=
1630: 31 30 32 34 0a 20 20 20 20 2d 44 53 51 4c 49 54  1024.    -DSQLIT
1640: 45 5f 44 49 53 41 42 4c 45 5f 50 41 47 45 43 41  E_DISABLE_PAGECA
1650: 43 48 45 5f 4f 56 45 52 46 4c 4f 57 5f 53 54 41  CHE_OVERFLOW_STA
1660: 54 53 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  TS=1.    -DSQLIT
1670: 45 5f 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d  E_ENABLE_API_ARM
1680: 4f 52 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  OR=1.    -DSQLIT
1690: 45 5f 45 4e 41 42 4c 45 5f 41 55 54 4f 5f 50 52  E_ENABLE_AUTO_PR
16a0: 4f 46 49 4c 45 3d 31 0a 20 20 20 20 2d 44 53 51  OFILE=1.    -DSQ
16b0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 4c 4f 43  LITE_ENABLE_FLOC
16c0: 4b 54 49 4d 45 4f 55 54 3d 31 0a 20 20 20 20 2d  KTIMEOUT=1.    -
16d0: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  DSQLITE_ENABLE_F
16e0: 54 53 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  TS3=1.    -DSQLI
16f0: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 5f 50  TE_ENABLE_FTS3_P
1700: 41 52 45 4e 54 48 45 53 49 53 3d 31 0a 20 20 20  ARENTHESIS=1.   
1710: 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
1720: 5f 46 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 3d  _FTS3_TOKENIZER=
1730: 31 0a 20 20 20 20 69 66 3a 6f 73 3d 3d 22 44 61  1.    if:os=="Da
1740: 72 77 69 6e 22 20 2d 44 53 51 4c 49 54 45 5f 45  rwin" -DSQLITE_E
1750: 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54  NABLE_LOCKING_ST
1760: 59 4c 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  YLE=1.    -DSQLI
1770: 54 45 5f 45 4e 41 42 4c 45 5f 50 45 52 53 49 53  TE_ENABLE_PERSIS
1780: 54 5f 57 41 4c 3d 31 0a 20 20 20 20 2d 44 53 51  T_WAL=1.    -DSQ
1790: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 55 52 47  LITE_ENABLE_PURG
17a0: 45 41 42 4c 45 5f 50 43 41 43 48 45 3d 31 0a 20  EABLE_PCACHE=1. 
17b0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
17c0: 4c 45 5f 52 54 52 45 45 3d 31 0a 20 20 20 20 2d  LE_RTREE=1.    -
17d0: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  DSQLITE_ENABLE_S
17e0: 4e 41 50 53 48 4f 54 3d 31 0a 20 20 20 20 23 20  NAPSHOT=1.    # 
17f0: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
1800: 53 51 4c 4c 4f 47 3d 31 0a 20 20 20 20 2d 44 53  SQLLOG=1.    -DS
1810: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
1820: 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
1830: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
1840: 4d 41 58 5f 4c 45 4e 47 54 48 3d 32 31 34 37 34  MAX_LENGTH=21474
1850: 38 33 36 34 35 0a 20 20 20 20 2d 44 53 51 4c 49  83645.    -DSQLI
1860: 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
1870: 4e 55 4d 42 45 52 3d 35 30 30 30 30 30 0a 20 20  NUMBER=500000.  
1880: 20 20 23 20 2d 44 53 51 4c 49 54 45 5f 4d 45 4d    # -DSQLITE_MEM
1890: 44 45 42 55 47 3d 31 0a 20 20 20 20 2d 44 53 51  DEBUG=1.    -DSQ
18a0: 4c 49 54 45 5f 4e 4f 5f 53 59 4e 43 3d 31 0a 20  LITE_NO_SYNC=1. 
18b0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 4f 4d 49 54     -DSQLITE_OMIT
18c0: 5f 41 55 54 4f 52 45 53 45 54 3d 31 0a 20 20 20  _AUTORESET=1.   
18d0: 20 2d 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c   -DSQLITE_OMIT_L
18e0: 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 3d 31 0a  OAD_EXTENSION=1.
18f0: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 50 52 45      -DSQLITE_PRE
1900: 46 45 52 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e  FER_PROXY_LOCKIN
1910: 47 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  G=1.    -DSQLITE
1920: 5f 53 45 52 49 45 53 5f 43 4f 4e 53 54 52 41 49  _SERIES_CONSTRAI
1930: 4e 54 5f 56 45 52 49 46 59 3d 31 0a 20 20 20 20  NT_VERIFY=1.    
1940: 2d 44 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53  -DSQLITE_THREADS
1950: 41 46 45 3d 32 0a 20 20 20 20 2d 44 53 51 4c 49  AFE=2.    -DSQLI
1960: 54 45 5f 55 53 45 5f 55 52 49 3d 31 0a 20 20 20  TE_USE_URI=1.   
1970: 20 2d 44 53 51 4c 49 54 45 5f 57 52 49 54 45 5f   -DSQLITE_WRITE_
1980: 57 41 4c 46 52 41 4d 45 5f 50 52 45 42 55 46 46  WALFRAME_PREBUFF
1990: 45 52 45 44 3d 31 0a 20 20 20 20 2d 44 55 53 45  ERED=1.    -DUSE
19a0: 5f 47 55 41 52 44 45 44 5f 46 44 3d 31 0a 20 20  _GUARDED_FD=1.  
19b0: 20 20 2d 44 55 53 45 5f 50 52 45 41 44 3d 31 0a    -DUSE_PREAD=1.
19c0: 20 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f      --enable-jso
19d0: 6e 31 20 2d 2d 65 6e 61 62 6c 65 2d 66 74 73 35  n1 --enable-fts5
19e0: 0a 20 20 7d 0a 20 20 22 45 78 74 72 61 2d 52 6f  .  }.  "Extra-Ro
19f0: 62 75 73 74 6e 65 73 73 22 20 7b 0a 20 20 20 20  bustness" {.    
1a00: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
1a10: 4f 56 45 52 53 49 5a 45 5f 43 45 4c 4c 5f 43 48  OVERSIZE_CELL_CH
1a20: 45 43 4b 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  ECK=1.    -DSQLI
1a30: 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3d  TE_MAX_ATTACHED=
1a40: 36 32 0a 20 20 7d 0a 20 20 22 44 65 76 6b 69 74  62.  }.  "Devkit
1a50: 22 20 7b 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  " {.    -DSQLITE
1a60: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
1a70: 52 4d 41 54 3d 34 0a 20 20 20 20 2d 44 53 51 4c  RMAT=4.    -DSQL
1a80: 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1a90: 3d 33 30 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  =30.    -DSQLITE
1aa0: 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d  _ENABLE_COLUMN_M
1ab0: 45 54 41 44 41 54 41 0a 20 20 20 20 2d 44 53 51  ETADATA.    -DSQ
1ac0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
1ad0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e  .    -DSQLITE_EN
1ae0: 41 42 4c 45 5f 46 54 53 35 0a 20 20 20 20 2d 44  ABLE_FTS5.    -D
1af0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
1b00: 53 34 5f 50 41 52 45 4e 54 48 45 53 49 53 0a 20  S4_PARENTHESIS. 
1b10: 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41     -DSQLITE_DISA
1b20: 42 4c 45 5f 46 54 53 34 5f 44 45 46 45 52 52 45  BLE_FTS4_DEFERRE
1b30: 44 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  D.    -DSQLITE_E
1b40: 4e 41 42 4c 45 5f 52 54 52 45 45 0a 20 20 20 20  NABLE_RTREE.    
1b50: 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 20 2d  --enable-json1 -
1b60: 2d 65 6e 61 62 6c 65 2d 66 74 73 35 0a 20 20 7d  -enable-fts5.  }
1b70: 0a 20 20 22 4e 6f 2d 6c 6f 6f 6b 61 73 69 64 65  .  "No-lookaside
1b80: 22 20 7b 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  " {.    -DSQLITE
1b90: 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54  _TEST_REALLOC_ST
1ba0: 52 45 53 53 3d 31 0a 20 20 20 20 2d 44 53 51 4c  RESS=1.    -DSQL
1bb0: 49 54 45 5f 4f 4d 49 54 5f 4c 4f 4f 4b 41 53 49  ITE_OMIT_LOOKASI
1bc0: 44 45 3d 31 0a 20 20 20 20 2d 44 48 41 56 45 5f  DE=1.    -DHAVE_
1bd0: 55 53 4c 45 45 50 3d 31 0a 20 20 7d 0a 20 20 22  USLEEP=1.  }.  "
1be0: 56 61 6c 67 72 69 6e 64 22 20 7b 0a 20 20 20 20  Valgrind" {.    
1bf0: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
1c00: 53 54 41 54 34 0a 20 20 20 20 2d 44 53 51 4c 49  STAT4.    -DSQLI
1c10: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 20  TE_ENABLE_FTS4. 
1c20: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
1c30: 4c 45 5f 52 54 52 45 45 0a 20 20 20 20 2d 44 53  LE_RTREE.    -DS
1c40: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
1c50: 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 20 20  DEN_COLUMNS.    
1c60: 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 0a 20  --enable-json1. 
1c70: 20 7d 0a 0a 20 20 23 20 54 68 65 20 6e 65 78 74   }..  # The next
1c80: 20 67 72 6f 75 70 20 6f 66 20 63 6f 6e 66 69 67   group of config
1c90: 75 72 61 74 69 6f 6e 73 20 61 72 65 20 75 73 65  urations are use
1ca0: 64 20 6f 6e 6c 79 20 62 79 20 74 68 65 0a 20 20  d only by the.  
1cb0: 23 20 46 61 69 6c 75 72 65 2d 44 65 74 65 63 74  # Failure-Detect
1cc0: 69 6f 6e 20 70 6c 61 74 66 6f 72 6d 2e 20 20 54  ion platform.  T
1cd0: 68 65 79 20 61 72 65 20 61 6c 6c 20 74 68 65 20  hey are all the 
1ce0: 73 61 6d 65 2c 20 62 75 74 20 77 65 20 6e 65 65  same, but we nee
1cf0: 64 0a 20 20 23 20 64 69 66 66 65 72 65 6e 74 20  d.  # different 
1d00: 6e 61 6d 65 73 20 66 6f 72 20 74 68 65 6d 20 61  names for them a
1d10: 6c 6c 20 73 6f 20 74 68 61 74 20 74 68 65 79 20  ll so that they 
1d20: 72 65 73 75 6c 74 73 20 61 70 70 65 61 72 20 69  results appear i
1d30: 6e 20 73 65 70 61 72 61 74 65 0a 20 20 23 20 73  n separate.  # s
1d40: 75 62 64 69 72 65 63 74 6f 72 69 65 73 2e 0a 20  ubdirectories.. 
1d50: 20 23 0a 20 20 46 61 69 6c 30 20 7b 2d 4f 30 7d   #.  Fail0 {-O0}
1d60: 0a 20 20 46 61 69 6c 32 20 7b 2d 4f 30 7d 0a 20  .  Fail2 {-O0}. 
1d70: 20 46 61 69 6c 33 20 7b 2d 4f 30 7d 0a 20 20 46   Fail3 {-O0}.  F
1d80: 61 69 6c 34 20 7b 2d 4f 30 7d 0a 20 20 46 75 7a  ail4 {-O0}.  Fuz
1d90: 7a 46 61 69 6c 31 20 7b 2d 4f 30 7d 0a 20 20 46  zFail1 {-O0}.  F
1da0: 75 7a 7a 46 61 69 6c 32 20 7b 2d 4f 30 7d 0a 7d  uzzFail2 {-O0}.}
1db0: 5d 0a 0a 61 72 72 61 79 20 73 65 74 20 3a 3a 50  ]..array set ::P
1dc0: 6c 61 74 66 6f 72 6d 73 20 5b 73 74 72 69 70 5f  latforms [strip_
1dd0: 63 6f 6d 6d 65 6e 74 73 20 7b 0a 20 20 4c 69 6e  comments {.  Lin
1de0: 75 78 2d 78 38 36 5f 36 34 20 7b 0a 20 20 20 20  ux-x86_64 {.    
1df0: 22 43 68 65 63 6b 2d 53 79 6d 62 6f 6c 73 22 20  "Check-Symbols" 
1e00: 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 73            checks
1e10: 79 6d 62 6f 6c 73 0a 20 20 20 20 22 46 61 73 74  ymbols.    "Fast
1e20: 2d 4f 6e 65 22 20 20 20 20 20 20 20 20 20 20 20  -One"           
1e30: 20 20 20 20 20 66 75 7a 7a 74 65 73 74 0a 20 20       fuzztest.  
1e40: 20 20 22 44 65 62 75 67 2d 4f 6e 65 22 20 20 20    "Debug-One"   
1e50: 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 70 74              "mpt
1e60: 65 73 74 20 74 65 73 74 22 0a 20 20 20 20 22 48  est test".    "H
1e70: 61 76 65 2d 4e 6f 74 22 20 20 20 20 20 20 20 20  ave-Not"        
1e80: 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20 20          test.   
1e90: 20 22 53 65 63 75 72 65 2d 44 65 6c 65 74 65 22   "Secure-Delete"
1ea0: 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 0a             test.
1eb0: 20 20 20 20 22 55 6e 6c 6f 63 6b 2d 4e 6f 74 69      "Unlock-Noti
1ec0: 66 79 22 20 20 20 20 20 20 20 20 20 20 20 22 51  fy"           "Q
1ed0: 55 49 43 4b 54 45 53 54 5f 49 4e 43 4c 55 44 45  UICKTEST_INCLUDE
1ee0: 3d 6e 6f 74 69 66 79 32 2e 74 65 73 74 20 74 65  =notify2.test te
1ef0: 73 74 22 0a 20 20 20 20 22 55 70 64 61 74 65 2d  st".    "Update-
1f00: 44 65 6c 65 74 65 2d 4c 69 6d 69 74 22 20 20 20  Delete-Limit"   
1f10: 20 20 74 65 73 74 0a 20 20 20 20 22 45 78 74 72    test.    "Extr
1f20: 61 2d 52 6f 62 75 73 74 6e 65 73 73 22 20 20 20  a-Robustness"   
1f30: 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22 44       test.    "D
1f40: 65 76 69 63 65 2d 54 77 6f 22 20 20 20 20 20 20  evice-Two"      
1f50: 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20 20          test.   
1f60: 20 22 4e 6f 2d 6c 6f 6f 6b 61 73 69 64 65 22 20   "No-lookaside" 
1f70: 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 0a             test.
1f80: 20 20 20 20 22 44 65 76 6b 69 74 22 20 20 20 20      "Devkit"    
1f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65                te
1fa0: 73 74 0a 20 20 20 20 22 41 70 70 6c 65 22 20 20  st.    "Apple"  
1fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc0: 20 74 65 73 74 0a 20 20 20 20 22 53 61 6e 69 74   test.    "Sanit
1fd0: 69 7a 65 22 20 20 20 20 20 20 20 20 20 20 20 20  ize"            
1fe0: 20 20 20 20 7b 51 55 49 43 4b 54 45 53 54 5f 4f      {QUICKTEST_O
1ff0: 4d 49 54 3d 66 75 6e 63 34 2e 74 65 73 74 2c 6e  MIT=func4.test,n
2000: 61 6e 2e 74 65 73 74 20 74 65 73 74 7d 0a 20 20  an.test test}.  
2010: 20 20 22 44 65 76 69 63 65 2d 4f 6e 65 22 20 20    "Device-One"  
2020: 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6c 6c              full
2030: 74 65 73 74 0a 20 20 20 20 22 44 65 66 61 75 6c  test.    "Defaul
2040: 74 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t"              
2050: 20 20 20 22 74 68 72 65 61 64 74 65 73 74 20 66     "threadtest f
2060: 75 6c 6c 74 65 73 74 22 0a 20 20 20 20 22 56 61  ulltest".    "Va
2070: 6c 67 72 69 6e 64 22 20 20 20 20 20 20 20 20 20  lgrind"         
2080: 20 20 20 20 20 20 20 76 61 6c 67 72 69 6e 64 74         valgrindt
2090: 65 73 74 0a 20 20 7d 0a 20 20 4c 69 6e 75 78 2d  est.  }.  Linux-
20a0: 69 36 38 36 20 7b 0a 20 20 20 20 22 44 65 76 6b  i686 {.    "Devk
20b0: 69 74 22 20 20 20 20 20 20 20 20 20 20 20 20 20  it"             
20c0: 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22 48       test.    "H
20d0: 61 76 65 2d 4e 6f 74 22 20 20 20 20 20 20 20 20  ave-Not"        
20e0: 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20 20          test.   
20f0: 20 22 55 6e 6c 6f 63 6b 2d 4e 6f 74 69 66 79 22   "Unlock-Notify"
2100: 20 20 20 20 20 20 20 20 20 20 20 22 51 55 49 43             "QUIC
2110: 4b 54 45 53 54 5f 49 4e 43 4c 55 44 45 3d 6e 6f  KTEST_INCLUDE=no
2120: 74 69 66 79 32 2e 74 65 73 74 20 74 65 73 74 22  tify2.test test"
2130: 0a 20 20 20 20 22 44 65 76 69 63 65 2d 4f 6e 65  .    "Device-One
2140: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  "              t
2150: 65 73 74 0a 20 20 20 20 22 44 65 76 69 63 65 2d  est.    "Device-
2160: 54 77 6f 22 20 20 20 20 20 20 20 20 20 20 20 20  Two"            
2170: 20 20 74 65 73 74 0a 20 20 20 20 22 44 65 66 61    test.    "Defa
2180: 75 6c 74 22 20 20 20 20 20 20 20 20 20 20 20 20  ult"            
2190: 20 20 20 20 20 22 74 68 72 65 61 64 74 65 73 74       "threadtest
21a0: 20 66 75 6c 6c 74 65 73 74 22 0a 20 20 7d 0a 20   fulltest".  }. 
21b0: 20 44 61 72 77 69 6e 2d 69 33 38 36 20 7b 0a 20   Darwin-i386 {. 
21c0: 20 20 20 22 4c 6f 63 6b 69 6e 67 2d 53 74 79 6c     "Locking-Styl
21d0: 65 22 20 20 20 20 20 20 20 20 20 20 20 22 6d 70  e"           "mp
21e0: 74 65 73 74 20 74 65 73 74 22 0a 20 20 20 20 22  test test".    "
21f0: 48 61 76 65 2d 4e 6f 74 22 20 20 20 20 20 20 20  Have-Not"       
2200: 20 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20           test.  
2210: 20 20 22 41 70 70 6c 65 22 20 20 20 20 20 20 20    "Apple"       
2220: 20 20 20 20 20 20 20 20 20 20 20 20 22 74 68 72              "thr
2230: 65 61 64 74 65 73 74 20 66 75 6c 6c 74 65 73 74  eadtest fulltest
2240: 22 0a 20 20 7d 0a 20 20 44 61 72 77 69 6e 2d 78  ".  }.  Darwin-x
2250: 38 36 5f 36 34 20 7b 0a 20 20 20 20 22 4c 6f 63  86_64 {.    "Loc
2260: 6b 69 6e 67 2d 53 74 79 6c 65 22 20 20 20 20 20  king-Style"     
2270: 20 20 20 20 20 20 22 6d 70 74 65 73 74 20 74 65        "mptest te
2280: 73 74 22 0a 20 20 20 20 22 48 61 76 65 2d 4e 6f  st".    "Have-No
2290: 74 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t"              
22a0: 20 20 74 65 73 74 0a 20 20 20 20 22 41 70 70 6c    test.    "Appl
22b0: 65 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e"              
22c0: 20 20 20 20 20 22 74 68 72 65 61 64 74 65 73 74       "threadtest
22d0: 20 66 75 6c 6c 74 65 73 74 22 0a 20 20 7d 0a 20   fulltest".  }. 
22e0: 20 22 57 69 6e 64 6f 77 73 20 4e 54 2d 69 6e 74   "Windows NT-int
22f0: 65 6c 22 20 7b 0a 20 20 20 20 22 53 74 64 63 61  el" {.    "Stdca
2300: 6c 6c 22 20 20 20 20 20 20 20 20 20 20 20 20 20  ll"             
2310: 20 20 20 20 74 65 73 74 0a 20 20 20 20 22 48 61      test.    "Ha
2320: 76 65 2d 4e 6f 74 22 20 20 20 20 20 20 20 20 20  ve-Not"         
2330: 20 20 20 20 20 20 20 74 65 73 74 0a 20 20 20 20         test.    
2340: 22 44 65 66 61 75 6c 74 22 20 20 20 20 20 20 20  "Default"       
2350: 20 20 20 20 20 20 20 20 20 20 22 6d 70 74 65 73            "mptes
2360: 74 20 66 75 6c 6c 74 65 73 74 6f 6e 6c 79 22 0a  t fulltestonly".
2370: 20 20 7d 0a 20 20 22 57 69 6e 64 6f 77 73 20 4e    }.  "Windows N
2380: 54 2d 61 6d 64 36 34 22 20 7b 0a 20 20 20 20 22  T-amd64" {.    "
2390: 53 74 64 63 61 6c 6c 22 20 20 20 20 20 20 20 20  Stdcall"        
23a0: 20 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20           test.  
23b0: 20 20 22 48 61 76 65 2d 4e 6f 74 22 20 20 20 20    "Have-Not"    
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
23d0: 0a 20 20 20 20 22 44 65 66 61 75 6c 74 22 20 20  .    "Default"  
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23f0: 6d 70 74 65 73 74 20 66 75 6c 6c 74 65 73 74 6f  mptest fulltesto
2400: 6e 6c 79 22 0a 20 20 7d 0a 0a 20 20 23 20 54 68  nly".  }..  # Th
2410: 65 20 46 61 69 6c 75 72 65 2d 44 65 74 65 63 74  e Failure-Detect
2420: 69 6f 6e 20 70 6c 61 74 66 6f 72 6d 20 72 75 6e  ion platform run
2430: 73 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 20  s various tests 
2440: 74 68 61 74 20 64 65 6c 69 62 65 72 61 74 65 6c  that deliberatel
2450: 79 0a 20 20 23 20 66 61 69 6c 2e 20 20 54 68 69  y.  # fail.  Thi
2460: 73 20 69 73 20 75 73 65 64 20 61 73 20 61 20 74  s is used as a t
2470: 65 73 74 20 6f 66 20 74 68 69 73 20 73 63 72 69  est of this scri
2480: 70 74 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  pt to verify tha
2490: 74 20 74 68 69 73 20 73 63 72 69 70 74 0a 20 20  t this script.  
24a0: 23 20 63 6f 72 72 65 63 74 6c 79 20 69 64 65 6e  # correctly iden
24b0: 74 69 66 69 65 73 20 66 61 69 6c 75 72 65 73 2e  tifies failures.
24c0: 0a 20 20 23 0a 20 20 46 61 69 6c 75 72 65 2d 44  .  #.  Failure-D
24d0: 65 74 65 63 74 69 6f 6e 20 7b 0a 20 20 20 20 46  etection {.    F
24e0: 61 69 6c 30 20 20 20 20 20 22 54 45 53 54 5f 46  ail0     "TEST_F
24f0: 41 49 4c 55 52 45 3d 30 20 74 65 73 74 22 0a 20  AILURE=0 test". 
2500: 20 20 20 53 61 6e 69 74 69 7a 65 20 20 22 54 45     Sanitize  "TE
2510: 53 54 5f 46 41 49 4c 55 52 45 3d 31 20 74 65 73  ST_FAILURE=1 tes
2520: 74 22 0a 20 20 20 20 46 61 69 6c 32 20 20 20 20  t".    Fail2    
2530: 20 22 54 45 53 54 5f 46 41 49 4c 55 52 45 3d 32   "TEST_FAILURE=2
2540: 20 76 61 6c 67 72 69 6e 64 74 65 73 74 22 0a 20   valgrindtest". 
2550: 20 20 20 46 61 69 6c 33 20 20 20 20 20 22 54 45     Fail3     "TE
2560: 53 54 5f 46 41 49 4c 55 52 45 3d 33 20 76 61 6c  ST_FAILURE=3 val
2570: 67 72 69 6e 64 74 65 73 74 22 0a 20 20 20 20 46  grindtest".    F
2580: 61 69 6c 34 20 20 20 20 20 22 54 45 53 54 5f 46  ail4     "TEST_F
2590: 41 49 4c 55 52 45 3d 34 20 74 65 73 74 22 0a 20  AILURE=4 test". 
25a0: 20 20 20 46 75 7a 7a 46 61 69 6c 31 20 22 54 45     FuzzFail1 "TE
25b0: 53 54 5f 46 41 49 4c 55 52 45 3d 35 20 74 65 73  ST_FAILURE=5 tes
25c0: 74 22 0a 20 20 20 20 46 75 7a 7a 46 61 69 6c 32  t".    FuzzFail2
25d0: 20 22 54 45 53 54 5f 46 41 49 4c 55 52 45 3d 35   "TEST_FAILURE=5
25e0: 20 76 61 6c 67 72 69 6e 64 74 65 73 74 22 0a 20   valgrindtest". 
25f0: 20 7d 0a 7d 5d 0a 0a 0a 23 20 45 6e 64 20 6f 66   }.}]...# End of
2600: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73   configuration s
2610: 65 63 74 69 6f 6e 2e 0a 23 23 23 23 23 23 23 23  ection..########
2620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2650: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2660: 23 0a 23 23 23 23 23 23 23 23 23 23 23 23 23 23  #.##############
2670: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2680: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2690: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26a0: 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 20 43  ###########..# C
26b0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 76 65 72  onfiguration ver
26c0: 69 66 69 63 61 74 69 6f 6e 3a 20 43 68 65 63 6b  ification: Check
26d0: 20 74 68 61 74 20 65 61 63 68 20 65 6e 74 72 79   that each entry
26e0: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20   in the list of 
26f0: 63 6f 6e 66 69 67 73 0a 23 20 73 70 65 63 69 66  configs.# specif
2700: 69 65 64 20 66 6f 72 20 65 61 63 68 20 70 6c 61  ied for each pla
2710: 74 66 6f 72 6d 73 20 65 78 69 73 74 73 2e 0a 23  tforms exists..#
2720: 0a 66 6f 72 65 61 63 68 20 7b 6b 65 79 20 76 61  .foreach {key va
2730: 6c 75 65 7d 20 5b 61 72 72 61 79 20 67 65 74 20  lue} [array get 
2740: 3a 3a 50 6c 61 74 66 6f 72 6d 73 5d 20 7b 0a 20  ::Platforms] {. 
2750: 20 66 6f 72 65 61 63 68 20 7b 76 20 74 7d 20 24   foreach {v t} $
2760: 76 61 6c 75 65 20 7b 0a 20 20 20 20 69 66 20 7b  value {.    if {
2770: 30 3d 3d 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  0==[info exists 
2780: 3a 3a 43 6f 6e 66 69 67 73 28 24 76 29 5d 7d 20  ::Configs($v)]} 
2790: 7b 0a 20 20 20 20 20 20 70 75 74 73 20 73 74 64  {.      puts std
27a0: 65 72 72 20 22 4e 6f 20 73 75 63 68 20 63 6f 6e  err "No such con
27b0: 66 69 67 75 72 61 74 69 6f 6e 3a 20 5c 22 24 76  figuration: \"$v
27c0: 5c 22 22 0a 20 20 20 20 20 20 65 78 69 74 20 2d  \"".      exit -
27d0: 31 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23  1.    }.  }.}..#
27e0: 20 4f 75 74 70 75 74 20 6c 6f 67 2e 20 20 20 44   Output log.   D
27f0: 69 73 61 62 6c 65 64 20 66 6f 72 20 73 6c 61 76  isabled for slav
2800: 65 20 69 6e 74 65 72 70 72 65 74 65 72 73 2e 0a  e interpreters..
2810: 23 0a 69 66 20 7b 5b 6c 69 6e 64 65 78 20 24 61  #.if {[lindex $a
2820: 72 67 76 20 65 6e 64 5d 21 3d 22 2d 2d 73 6c 61  rgv end]!="--sla
2830: 76 65 22 7d 20 7b 0a 20 20 73 65 74 20 4c 4f 47  ve"} {.  set LOG
2840: 20 5b 6f 70 65 6e 20 72 65 6c 65 61 73 65 74 65   [open releasete
2850: 73 74 2d 6f 75 74 2e 74 78 74 20 77 5d 0a 20 20  st-out.txt w].  
2860: 70 72 6f 63 20 50 55 54 53 20 7b 74 78 74 7d 20  proc PUTS {txt} 
2870: 7b 0a 20 20 20 20 70 75 74 73 20 24 74 78 74 0a  {.    puts $txt.
2880: 20 20 20 20 70 75 74 73 20 24 3a 3a 4c 4f 47 20      puts $::LOG 
2890: 24 74 78 74 0a 20 20 20 20 66 6c 75 73 68 20 24  $txt.    flush $
28a0: 3a 3a 4c 4f 47 0a 20 20 7d 0a 20 20 70 72 6f 63  ::LOG.  }.  proc
28b0: 20 50 55 54 53 4e 4e 4c 20 7b 74 78 74 7d 20 7b   PUTSNNL {txt} {
28c0: 0a 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77  .    puts -nonew
28d0: 6c 69 6e 65 20 24 74 78 74 0a 20 20 20 20 70 75  line $txt.    pu
28e0: 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 3a  ts -nonewline $:
28f0: 3a 4c 4f 47 20 24 74 78 74 0a 20 20 20 20 66 6c  :LOG $txt.    fl
2900: 75 73 68 20 24 3a 3a 4c 4f 47 0a 20 20 7d 0a 20  ush $::LOG.  }. 
2910: 20 70 72 6f 63 20 50 55 54 53 45 52 52 20 7b 74   proc PUTSERR {t
2920: 78 74 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 73  xt} {.    puts s
2930: 74 64 65 72 72 20 24 74 78 74 0a 20 20 20 20 70  tderr $txt.    p
2940: 75 74 73 20 24 3a 3a 4c 4f 47 20 24 74 78 74 0a  uts $::LOG $txt.
2950: 20 20 20 20 66 6c 75 73 68 20 24 3a 3a 4c 4f 47      flush $::LOG
2960: 0a 20 20 7d 0a 20 20 70 75 74 73 20 24 4c 4f 47  .  }.  puts $LOG
2970: 20 22 24 61 72 67 76 30 20 24 61 72 67 76 22 0a   "$argv0 $argv".
2980: 20 20 73 65 74 20 74 6d 30 20 5b 63 6c 6f 63 6b    set tm0 [clock
2990: 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73   format [clock s
29a0: 65 63 6f 6e 64 73 5d 20 2d 66 6f 72 6d 61 74 20  econds] -format 
29b0: 7b 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a  {%Y-%m-%d %H:%M:
29c0: 25 53 7d 20 2d 67 6d 74 20 31 5d 0a 20 20 70 75  %S} -gmt 1].  pu
29d0: 74 73 20 24 4c 4f 47 20 22 73 74 61 72 74 2d 74  ts $LOG "start-t
29e0: 69 6d 65 3a 20 24 74 6d 30 20 55 54 43 22 0a 7d  ime: $tm0 UTC".}
29f0: 20 65 6c 73 65 20 7b 0a 20 20 70 72 6f 63 20 50   else {.  proc P
2a00: 55 54 53 20 7b 74 78 74 7d 20 7b 0a 20 20 20 20  UTS {txt} {.    
2a10: 70 75 74 73 20 24 74 78 74 0a 20 20 7d 0a 20 20  puts $txt.  }.  
2a20: 70 72 6f 63 20 50 55 54 53 4e 4e 4c 20 7b 74 78  proc PUTSNNL {tx
2a30: 74 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 2d 6e  t} {.    puts -n
2a40: 6f 6e 65 77 6c 69 6e 65 20 24 74 78 74 0a 20 20  onewline $txt.  
2a50: 7d 0a 20 20 70 72 6f 63 20 50 55 54 53 45 52 52  }.  proc PUTSERR
2a60: 20 7b 74 78 74 7d 20 7b 0a 20 20 20 20 70 75 74   {txt} {.    put
2a70: 73 20 73 74 64 65 72 72 20 24 74 78 74 0a 20 20  s stderr $txt.  
2a80: 7d 0a 7d 0a 0a 23 20 4f 70 65 6e 20 74 68 65 20  }.}..# Open the 
2a90: 66 69 6c 65 20 24 6c 6f 67 66 69 6c 65 20 61 6e  file $logfile an
2aa0: 64 20 6c 6f 6f 6b 20 66 6f 72 20 61 20 72 65 70  d look for a rep
2ab0: 6f 72 74 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65  ort on the numbe
2ac0: 72 20 6f 66 20 65 72 72 6f 72 73 0a 23 20 61 6e  r of errors.# an
2ad0: 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  d the number of 
2ae0: 74 65 73 74 20 63 61 73 65 73 20 72 75 6e 2e 20  test cases run. 
2af0: 20 41 64 64 20 74 68 65 73 65 20 76 61 6c 75 65   Add these value
2b00: 73 20 74 6f 20 74 68 65 20 67 6c 6f 62 61 6c 0a  s to the global.
2b10: 23 20 24 3a 3a 4e 45 52 52 43 41 53 45 20 61 6e  # $::NERRCASE an
2b20: 64 20 24 3a 3a 4e 54 45 53 54 43 41 53 45 20 76  d $::NTESTCASE v
2b30: 61 72 69 61 62 6c 65 73 2e 0a 23 0a 23 20 49 66  ariables..#.# If
2b40: 20 61 6e 79 20 65 72 72 6f 72 73 20 6f 63 63 75   any errors occu
2b50: 72 2c 20 74 68 65 6e 20 77 72 69 74 65 20 69 6e  r, then write in
2b60: 74 6f 20 24 65 72 72 6d 73 67 56 61 72 20 74 68  to $errmsgVar th
2b70: 65 20 74 65 78 74 20 6f 66 20 61 6e 20 61 70 70  e text of an app
2b80: 72 6f 70 72 69 61 74 65 0a 23 20 6f 6e 65 2d 6c  ropriate.# one-l
2b90: 69 6e 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ine error messag
2ba0: 65 20 74 6f 20 73 68 6f 77 20 6f 6e 20 74 68 65  e to show on the
2bb0: 20 6f 75 74 70 75 74 2e 0a 23 0a 70 72 6f 63 20   output..#.proc 
2bc0: 63 6f 75 6e 74 5f 74 65 73 74 73 5f 61 6e 64 5f  count_tests_and_
2bd0: 65 72 72 6f 72 73 20 7b 6c 6f 67 66 69 6c 65 20  errors {logfile 
2be0: 72 63 56 61 72 20 65 72 72 6d 73 67 56 61 72 7d  rcVar errmsgVar}
2bf0: 20 7b 0a 20 20 69 66 20 7b 24 3a 3a 44 52 59 52   {.  if {$::DRYR
2c00: 55 4e 7d 20 72 65 74 75 72 6e 0a 20 20 75 70 76  UN} return.  upv
2c10: 61 72 20 31 20 24 72 63 56 61 72 20 72 63 20 24  ar 1 $rcVar rc $
2c20: 65 72 72 6d 73 67 56 61 72 20 65 72 72 6d 73 67  errmsgVar errmsg
2c30: 0a 20 20 73 65 74 20 66 64 20 5b 6f 70 65 6e 20  .  set fd [open 
2c40: 24 6c 6f 67 66 69 6c 65 20 72 62 5d 0a 20 20 73  $logfile rb].  s
2c50: 65 74 20 73 65 65 6e 20 30 0a 20 20 77 68 69 6c  et seen 0.  whil
2c60: 65 20 7b 21 5b 65 6f 66 20 24 66 64 5d 7d 20 7b  e {![eof $fd]} {
2c70: 0a 20 20 20 20 73 65 74 20 6c 69 6e 65 20 5b 67  .    set line [g
2c80: 65 74 73 20 24 66 64 5d 0a 20 20 20 20 69 66 20  ets $fd].    if 
2c90: 7b 5b 72 65 67 65 78 70 20 7b 28 5c 64 2b 29 20  {[regexp {(\d+) 
2ca0: 65 72 72 6f 72 73 20 6f 75 74 20 6f 66 20 28 5c  errors out of (\
2cb0: 64 2b 29 20 74 65 73 74 73 7d 20 24 6c 69 6e 65  d+) tests} $line
2cc0: 20 61 6c 6c 20 6e 65 72 72 20 6e 74 65 73 74 5d   all nerr ntest]
2cd0: 7d 20 7b 0a 20 20 20 20 20 20 69 6e 63 72 20 3a  } {.      incr :
2ce0: 3a 4e 45 52 52 43 41 53 45 20 24 6e 65 72 72 0a  :NERRCASE $nerr.
2cf0: 20 20 20 20 20 20 69 6e 63 72 20 3a 3a 4e 54 45        incr ::NTE
2d00: 53 54 43 41 53 45 20 24 6e 74 65 73 74 0a 20 20  STCASE $ntest.  
2d10: 20 20 20 20 73 65 74 20 73 65 65 6e 20 31 0a 20      set seen 1. 
2d20: 20 20 20 20 20 69 66 20 7b 24 6e 65 72 72 3e 30       if {$nerr>0
2d30: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
2d40: 72 63 20 31 0a 20 20 20 20 20 20 20 20 73 65 74  rc 1.        set
2d50: 20 65 72 72 6d 73 67 20 24 6c 69 6e 65 0a 20 20   errmsg $line.  
2d60: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2d70: 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 72 75 6e  if {[regexp {run
2d80: 74 69 6d 65 20 65 72 72 6f 72 3a 20 2b 28 2e 2a  time error: +(.*
2d90: 29 7d 20 24 6c 69 6e 65 20 61 6c 6c 20 6d 73 67  )} $line all msg
2da0: 5d 7d 20 7b 0a 20 20 20 20 20 20 23 20 73 6b 69  ]} {.      # ski
2db0: 70 20 6f 76 65 72 20 22 76 61 6c 75 65 20 69 73  p over "value is
2dc0: 20 6f 75 74 73 69 64 65 20 72 61 6e 67 65 22 20   outside range" 
2dd0: 65 72 72 6f 72 73 0a 20 20 20 20 20 20 69 66 20  errors.      if 
2de0: 7b 5b 72 65 67 65 78 70 20 7b 76 61 6c 75 65 20  {[regexp {value 
2df0: 2e 2a 20 69 73 20 6f 75 74 73 69 64 65 20 74 68  .* is outside th
2e00: 65 20 72 61 6e 67 65 20 6f 66 20 72 65 70 72 65  e range of repre
2e10: 73 65 6e 74 61 62 6c 65 7d 20 24 6c 69 6e 65 5d  sentable} $line]
2e20: 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 23 20 6e  } {.         # n
2e30: 6f 6f 70 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  oop.      } else
2e40: 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20   {.        incr 
2e50: 3a 3a 4e 45 52 52 43 41 53 45 0a 20 20 20 20 20  ::NERRCASE.     
2e60: 20 20 20 69 66 20 7b 24 72 63 3d 3d 30 7d 20 7b     if {$rc==0} {
2e70: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 72  .          set r
2e80: 63 20 31 0a 20 20 20 20 20 20 20 20 20 20 73 65  c 1.          se
2e90: 74 20 65 72 72 6d 73 67 20 24 6d 73 67 0a 20 20  t errmsg $msg.  
2ea0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
2eb0: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 5b 72      }.    if {[r
2ec0: 65 67 65 78 70 20 7b 66 61 74 61 6c 20 65 72 72  egexp {fatal err
2ed0: 6f 72 20 2b 28 2e 2a 29 7d 20 24 6c 69 6e 65 20  or +(.*)} $line 
2ee0: 61 6c 6c 20 6d 73 67 5d 7d 20 7b 0a 20 20 20 20  all msg]} {.    
2ef0: 20 20 69 6e 63 72 20 3a 3a 4e 45 52 52 43 41 53    incr ::NERRCAS
2f00: 45 0a 20 20 20 20 20 20 69 66 20 7b 24 72 63 3d  E.      if {$rc=
2f10: 3d 30 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  =0} {.        se
2f20: 74 20 72 63 20 31 0a 20 20 20 20 20 20 20 20 73  t rc 1.        s
2f30: 65 74 20 65 72 72 6d 73 67 20 24 6d 73 67 0a 20  et errmsg $msg. 
2f40: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
2f50: 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 45 52   if {[regexp {ER
2f60: 52 4f 52 20 53 55 4d 4d 41 52 59 3a 20 28 5c 64  ROR SUMMARY: (\d
2f70: 2b 29 20 65 72 72 6f 72 73 2e 2a 7d 20 24 6c 69  +) errors.*} $li
2f80: 6e 65 20 61 6c 6c 20 63 6e 74 5d 20 26 26 20 24  ne all cnt] && $
2f90: 63 6e 74 3e 30 7d 20 7b 0a 20 20 20 20 20 20 69  cnt>0} {.      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 61 6c 6c 0a 20 20 20 20  errmsg $all.    
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 5e 56 45 52 53   {[regexp {^VERS
3010: 49 4f 4e 3a 20 33 5c 2e 5c 64 2b 2e 5c 64 2b 7d  ION: 3\.\d+.\d+}
3020: 20 24 6c 69 6e 65 5d 7d 20 7b 0a 20 20 20 20 20   $line]} {.     
3030: 20 73 65 74 20 76 20 5b 73 74 72 69 6e 67 20 72   set v [string r
3040: 61 6e 67 65 20 24 6c 69 6e 65 20 39 20 65 6e 64  ange $line 9 end
3050: 5d 0a 20 20 20 20 20 20 69 66 20 7b 24 3a 3a 53  ].      if {$::S
3060: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 20 65 71  QLITE_VERSION eq
3070: 20 22 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73   ""} {.        s
3080: 65 74 20 3a 3a 53 51 4c 49 54 45 5f 56 45 52 53  et ::SQLITE_VERS
3090: 49 4f 4e 20 24 76 0a 20 20 20 20 20 20 7d 20 65  ION $v.      } e
30a0: 6c 73 65 69 66 20 7b 24 3a 3a 53 51 4c 49 54 45  lseif {$::SQLITE
30b0: 5f 56 45 52 53 49 4f 4e 20 6e 65 20 24 76 7d 20  _VERSION ne $v} 
30c0: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 72 63  {.        set rc
30d0: 20 31 0a 20 20 20 20 20 20 20 20 73 65 74 20 65   1.        set e
30e0: 72 72 6d 73 67 20 22 76 65 72 73 69 6f 6e 20 63  rrmsg "version c
30f0: 6f 6e 66 6c 69 63 74 3a 20 7b 24 3a 3a 53 51 4c  onflict: {$::SQL
3100: 49 54 45 5f 56 45 52 53 49 4f 4e 7d 20 76 73 2e  ITE_VERSION} vs.
3110: 20 7b 24 76 7d 22 0a 20 20 20 20 20 20 7d 0a 20   {$v}".      }. 
3120: 20 20 20 7d 0a 20 20 7d 0a 20 20 63 6c 6f 73 65     }.  }.  close
3130: 20 24 66 64 0a 20 20 69 66 20 7b 24 3a 3a 42 55   $fd.  if {$::BU
3140: 49 4c 44 4f 4e 4c 59 7d 20 7b 0a 20 20 20 20 69  ILDONLY} {.    i
3150: 6e 63 72 20 3a 3a 4e 54 45 53 54 43 41 53 45 0a  ncr ::NTESTCASE.
3160: 20 20 20 20 69 66 20 7b 24 72 63 21 3d 30 7d 20      if {$rc!=0} 
3170: 7b 0a 20 20 20 20 20 20 73 65 74 20 65 72 72 6d  {.      set errm
3180: 73 67 20 22 42 75 69 6c 64 20 66 61 69 6c 65 64  sg "Build failed
3190: 22 0a 20 20 20 20 7d 0a 20 20 7d 20 65 6c 73 65  ".    }.  } else
31a0: 69 66 20 7b 21 24 73 65 65 6e 7d 20 7b 0a 20 20  if {!$seen} {.  
31b0: 20 20 73 65 74 20 72 63 20 31 0a 20 20 20 20 73    set rc 1.    s
31c0: 65 74 20 65 72 72 6d 73 67 20 22 54 65 73 74 20  et errmsg "Test 
31d0: 64 69 64 20 6e 6f 74 20 63 6f 6d 70 6c 65 74 65  did not complete
31e0: 22 0a 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20  ".    if {[file 
31f0: 72 65 61 64 61 62 6c 65 20 63 6f 72 65 5d 7d 20  readable core]} 
3200: 7b 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20 65  {.      append e
3210: 72 72 6d 73 67 20 22 20 2d 20 63 6f 72 65 20 66  rrmsg " - core f
3220: 69 6c 65 20 65 78 69 73 74 73 22 0a 20 20 20 20  ile exists".    
3230: 7d 0a 20 20 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d  }.  }.}..#------
3240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3280: 2d 2d 2d 2d 0a 23 20 54 68 69 73 20 63 6f 6d 6d  ----.# This comm
3290: 61 6e 64 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  and is invoked a
32a0: 73 20 74 68 65 20 5b 6d 61 69 6e 5d 20 72 6f 75  s the [main] rou
32b0: 74 69 6e 65 20 66 6f 72 20 73 63 72 69 70 74 73  tine for scripts
32c0: 20 72 75 6e 20 77 69 74 68 20 74 68 65 0a 23 20   run with the.# 
32d0: 22 2d 2d 73 6c 61 76 65 22 20 6f 70 74 69 6f 6e  "--slave" option
32e0: 2e 0a 23 0a 23 20 46 6f 72 20 65 61 63 68 20 74  ..#.# For each t
32f0: 65 73 74 20 28 69 2e 65 2e 20 22 63 6f 6e 66 69  est (i.e. "confi
3300: 67 75 72 65 20 26 26 20 6d 61 6b 65 20 74 65 73  gure && make tes
3310: 74 22 20 65 78 65 63 75 74 69 6f 6e 29 2c 20 74  t" execution), t
3320: 68 65 20 6d 61 73 74 65 72 0a 23 20 70 72 6f 63  he master.# proc
3330: 65 73 73 20 73 70 61 77 6e 73 20 61 20 70 72 6f  ess spawns a pro
3340: 63 65 73 73 20 77 69 74 68 20 74 68 65 20 2d 2d  cess with the --
3350: 73 6c 61 76 65 20 6f 70 74 69 6f 6e 2e 20 49 74  slave option. It
3360: 20 77 72 69 74 65 73 20 74 77 6f 20 6c 69 6e 65   writes two line
3370: 73 0a 23 20 74 6f 20 74 68 65 20 73 6c 61 76 65  s.# to the slave
3380: 73 20 73 74 64 69 6e 2e 20 54 68 65 20 66 69 72  s stdin. The fir
3390: 73 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69  st contains a si
33a0: 6e 67 6c 65 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  ngle boolean val
33b0: 75 65 20 2d 20 74 68 65 0a 23 20 76 61 6c 75 65  ue - the.# value
33c0: 20 6f 66 20 3a 3a 54 52 41 43 45 20 74 6f 20 75   of ::TRACE to u
33d0: 73 65 20 69 6e 20 74 68 65 20 73 6c 61 76 65 20  se in the slave 
33e0: 73 63 72 69 70 74 2e 20 54 68 65 20 73 65 63 6f  script. The seco
33f0: 6e 64 20 6c 69 6e 65 20 63 6f 6e 74 61 69 6e 73  nd line contains
3400: 20 61 0a 23 20 6c 69 73 74 20 69 6e 20 74 68 65   a.# list in the
3410: 20 73 61 6d 65 20 66 6f 72 6d 61 74 20 61 73 20   same format as 
3420: 65 61 63 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20  each element of 
3430: 74 68 65 20 6c 69 73 74 20 70 61 73 73 65 64 20  the list passed 
3440: 74 6f 20 74 68 65 0a 23 20 5b 72 75 6e 5f 61 6c  to the.# [run_al
3450: 6c 5f 74 65 73 74 5f 73 75 69 74 65 73 5d 20 63  l_test_suites] c
3460: 6f 6d 6d 61 6e 64 20 69 6e 20 74 68 65 20 6d 61  ommand in the ma
3470: 73 74 65 72 20 70 72 6f 63 65 73 73 2e 0a 23 0a  ster process..#.
3480: 23 20 54 68 65 20 73 6c 61 76 65 20 74 68 65 6e  # The slave then
3490: 20 72 75 6e 73 20 74 68 65 20 22 63 6f 6e 66 69   runs the "confi
34a0: 67 75 72 65 20 26 26 20 6d 61 6b 65 20 74 65 73  gure && make tes
34b0: 74 22 20 63 6f 6d 6d 61 6e 64 73 20 73 70 65 63  t" commands spec
34c0: 69 66 69 65 64 2e 20 49 74 0a 23 20 65 78 69 74  ified. It.# exit
34d0: 73 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 69  s successfully i
34e0: 66 20 74 68 65 20 74 65 73 74 73 20 70 61 73 73  f the tests pass
34f0: 65 73 2c 20 6f 72 20 77 69 74 68 20 61 20 6e 6f  es, or with a no
3500: 6e 2d 7a 65 72 6f 20 65 72 72 6f 72 20 63 6f 64  n-zero error cod
3510: 65 0a 23 20 6f 74 68 65 72 77 69 73 65 2e 0a 23  e.# otherwise..#
3520: 0a 70 72 6f 63 20 72 75 6e 5f 73 6c 61 76 65 5f  .proc run_slave_
3530: 74 65 73 74 20 7b 7d 20 7b 0a 20 20 23 20 52 65  test {} {.  # Re
3540: 61 64 20 67 6c 6f 62 61 6c 20 76 61 72 73 20 63  ad global vars c
3550: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 72 6f  onfiguration fro
3560: 6d 20 73 74 64 69 6e 2e 0a 20 20 73 65 74 20 56  m stdin..  set V
3570: 20 5b 67 65 74 73 20 73 74 64 69 6e 5d 0a 20 20   [gets stdin].  
3580: 66 6f 72 65 61 63 68 20 7b 3a 3a 54 52 41 43 45  foreach {::TRACE
3590: 20 3a 3a 4d 53 56 43 20 3a 3a 44 52 59 52 55 4e   ::MSVC ::DRYRUN
35a0: 20 3a 3a 4b 45 45 50 46 49 4c 45 53 7d 20 24 56   ::KEEPFILES} $V
35b0: 20 7b 7d 0a 0a 20 20 23 20 52 65 61 64 20 74 68   {}..  # Read th
35c0: 65 20 74 65 73 74 2d 73 75 69 74 65 20 63 6f 6e  e test-suite con
35d0: 66 69 67 75 72 61 74 69 6f 6e 20 66 72 6f 6d 20  figuration from 
35e0: 73 74 64 69 6e 2e 0a 20 20 73 65 74 20 54 20 5b  stdin..  set T [
35f0: 67 65 74 73 20 73 74 64 69 6e 5d 0a 20 20 66 6f  gets stdin].  fo
3600: 72 65 61 63 68 20 7b 74 69 74 6c 65 20 64 69 72  reach {title dir
3610: 20 63 6f 6e 66 69 67 4f 70 74 73 20 74 65 73 74   configOpts test
3620: 74 61 72 67 65 74 20 6d 61 6b 65 4f 70 74 73 20  target makeOpts 
3630: 63 66 6c 61 67 73 20 6f 70 74 73 7d 20 24 54 20  cflags opts} $T 
3640: 7b 7d 0a 0a 20 20 23 20 43 72 65 61 74 65 20 61  {}..  # Create a
3650: 6e 64 20 73 77 69 74 63 68 20 74 6f 20 74 68 65  nd switch to the
3660: 20 74 65 73 74 20 64 69 72 65 63 74 6f 72 79 2e   test directory.
3670: 0a 20 20 73 65 74 20 6e 6f 72 6d 61 6c 64 69 72  .  set normaldir
3680: 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65   [file normalize
3690: 20 24 64 69 72 5d 0a 20 20 73 65 74 20 3a 3a 65   $dir].  set ::e
36a0: 6e 76 28 53 51 4c 49 54 45 5f 54 4d 50 44 49 52  nv(SQLITE_TMPDIR
36b0: 29 20 24 6e 6f 72 6d 61 6c 64 69 72 0a 20 20 74  ) $normaldir.  t
36c0: 72 61 63 65 5f 63 6d 64 20 66 69 6c 65 20 6d 6b  race_cmd file mk
36d0: 64 69 72 20 24 64 69 72 0a 20 20 74 72 61 63 65  dir $dir.  trace
36e0: 5f 63 6d 64 20 63 64 20 24 64 69 72 0a 20 20 63  _cmd cd $dir.  c
36f0: 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74  atch {file delet
3700: 65 20 63 6f 72 65 7d 0a 20 20 63 61 74 63 68 20  e core}.  catch 
3710: 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 74 65 73  {file delete tes
3720: 74 2e 6c 6f 67 7d 0a 0a 20 20 23 20 52 75 6e 20  t.log}..  # Run 
3730: 74 68 65 20 22 2e 2f 63 6f 6e 66 69 67 75 72 65  the "./configure
3740: 20 26 26 20 6d 61 6b 65 22 20 63 6f 6d 6d 61 6e   && make" comman
3750: 64 73 2e 0a 20 20 73 65 74 20 72 63 20 30 0a 20  ds..  set rc 0. 
3760: 20 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 5b   set rc [catch [
3770: 63 6f 6e 66 69 67 75 72 65 43 6f 6d 6d 61 6e 64  configureCommand
3780: 20 24 63 6f 6e 66 69 67 4f 70 74 73 5d 5d 0a 20   $configOpts]]. 
3790: 20 69 66 20 7b 21 24 72 63 7d 20 7b 0a 20 20 20   if {!$rc} {.   
37a0: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
37b0: 73 20 3a 3a 65 6e 76 28 54 43 4c 53 48 5f 43 4d  s ::env(TCLSH_CM
37c0: 44 29 5d 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  D)]} {.      set
37d0: 20 73 61 76 65 64 45 6e 76 28 54 43 4c 53 48 5f   savedEnv(TCLSH_
37e0: 43 4d 44 29 20 24 3a 3a 65 6e 76 28 54 43 4c 53  CMD) $::env(TCLS
37f0: 48 5f 43 4d 44 29 0a 20 20 20 20 7d 20 65 6c 73  H_CMD).    } els
3800: 65 20 7b 0a 20 20 20 20 20 20 75 6e 73 65 74 20  e {.      unset 
3810: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65  -nocomplain save
3820: 64 45 6e 76 28 54 43 4c 53 48 5f 43 4d 44 29 0a  dEnv(TCLSH_CMD).
3830: 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a      }.    set ::
3840: 65 6e 76 28 54 43 4c 53 48 5f 43 4d 44 29 20 5b  env(TCLSH_CMD) [
3850: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename 
3860: 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66 65 78 65 63  [info nameofexec
3870: 75 74 61 62 6c 65 5d 5d 0a 20 20 20 20 73 65 74  utable]].    set
3880: 20 72 63 20 5b 63 61 74 63 68 20 5b 6d 61 6b 65   rc [catch [make
3890: 43 6f 6d 6d 61 6e 64 20 24 74 65 73 74 74 61 72  Command $testtar
38a0: 67 65 74 20 24 6d 61 6b 65 4f 70 74 73 20 24 63  get $makeOpts $c
38b0: 66 6c 61 67 73 20 24 6f 70 74 73 5d 5d 0a 20 20  flags $opts]].  
38c0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
38d0: 74 73 20 73 61 76 65 64 45 6e 76 28 54 43 4c 53  ts savedEnv(TCLS
38e0: 48 5f 43 4d 44 29 5d 7d 20 7b 0a 20 20 20 20 20  H_CMD)]} {.     
38f0: 20 73 65 74 20 3a 3a 65 6e 76 28 54 43 4c 53 48   set ::env(TCLSH
3900: 5f 43 4d 44 29 20 24 73 61 76 65 64 45 6e 76 28  _CMD) $savedEnv(
3910: 54 43 4c 53 48 5f 43 4d 44 29 0a 20 20 20 20 7d  TCLSH_CMD).    }
3920: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 75 6e   else {.      un
3930: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
3940: 3a 3a 65 6e 76 28 54 43 4c 53 48 5f 43 4d 44 29  ::env(TCLSH_CMD)
3950: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 23 20  .    }.  }..  # 
3960: 43 6c 65 61 6e 20 75 70 20 6c 6f 74 73 20 6f 66  Clean up lots of
3970: 20 65 78 74 72 61 20 66 69 6c 65 73 20 69 66 20   extra files if 
3980: 2d 2d 6b 65 65 70 20 77 61 73 20 6e 6f 74 20 73  --keep was not s
3990: 70 65 63 69 66 69 65 64 2e 0a 20 20 69 66 20 7b  pecified..  if {
39a0: 24 3a 3a 4b 45 45 50 46 49 4c 45 53 3d 3d 30 7d  $::KEEPFILES==0}
39b0: 20 7b 20 63 6c 65 61 6e 75 70 20 24 6e 6f 72 6d   { cleanup $norm
39c0: 61 6c 64 69 72 20 7d 0a 0a 20 20 23 20 45 78 69  aldir }..  # Exi
39d0: 73 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 69  s successfully i
39e0: 66 20 74 68 65 20 74 65 73 74 20 70 61 73 73 65  f the test passe
39f0: 64 2c 20 6f 72 20 77 69 74 68 20 61 20 6e 6f 6e  d, or with a non
3a00: 2d 7a 65 72 6f 20 65 72 72 6f 72 20 63 6f 64 65  -zero error code
3a10: 0a 20 20 23 20 6f 74 68 65 72 77 69 73 65 2e 0a  .  # otherwise..
3a20: 20 20 65 78 69 74 20 24 72 63 0a 7d 0a 0a 23 20    exit $rc.}..# 
3a30: 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20  This command is 
3a40: 69 6e 76 6f 6b 65 64 20 69 6e 20 74 68 65 20 6d  invoked in the m
3a50: 61 73 74 65 72 20 70 72 6f 63 65 73 73 20 65 61  aster process ea
3a60: 63 68 20 74 69 6d 65 20 61 20 73 6c 61 76 65 0a  ch time a slave.
3a70: 23 20 66 69 6c 65 2d 64 65 73 63 72 69 70 74 6f  # file-descripto
3a80: 72 20 69 73 20 72 65 61 64 61 62 6c 65 2e 0a 23  r is readable..#
3a90: 0a 70 72 6f 63 20 73 6c 61 76 65 5f 66 69 6c 65  .proc slave_file
3aa0: 65 76 65 6e 74 20 7b 66 64 20 54 20 74 6d 31 7d  event {fd T tm1}
3ab0: 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 47 0a 20 20   {.  global G.  
3ac0: 66 6f 72 65 61 63 68 20 7b 74 69 74 6c 65 20 64  foreach {title d
3ad0: 69 72 20 63 6f 6e 66 69 67 4f 70 74 73 20 74 65  ir configOpts te
3ae0: 73 74 74 61 72 67 65 74 20 6d 61 6b 65 4f 70 74  sttarget makeOpt
3af0: 73 20 63 66 6c 61 67 73 20 6f 70 74 73 7d 20 24  s cflags opts} $
3b00: 54 20 7b 7d 0a 0a 20 20 69 66 20 7b 5b 65 6f 66  T {}..  if {[eof
3b10: 20 24 66 64 5d 7d 20 7b 0a 20 20 20 20 66 63 6f   $fd]} {.    fco
3b20: 6e 66 69 67 75 72 65 20 24 66 64 20 2d 62 6c 6f  nfigure $fd -blo
3b30: 63 6b 69 6e 67 20 31 0a 20 20 20 20 73 65 74 20  cking 1.    set 
3b40: 72 63 20 5b 63 61 74 63 68 20 7b 20 63 6c 6f 73  rc [catch { clos
3b50: 65 20 24 66 64 20 7d 5d 0a 0a 20 20 20 20 73 65  e $fd }]..    se
3b60: 74 20 65 72 72 6d 73 67 20 7b 7d 0a 20 20 20 20  t errmsg {}.    
3b70: 73 65 74 20 6c 6f 67 66 69 6c 65 20 5b 66 69 6c  set logfile [fil
3b80: 65 20 6a 6f 69 6e 20 24 64 69 72 20 74 65 73 74  e join $dir test
3b90: 2e 6c 6f 67 5d 0a 20 20 20 20 69 66 20 7b 5b 66  .log].    if {[f
3ba0: 69 6c 65 20 65 78 69 73 74 73 20 24 6c 6f 67 66  ile exists $logf
3bb0: 69 6c 65 5d 7d 20 7b 0a 20 20 20 20 20 20 63 6f  ile]} {.      co
3bc0: 75 6e 74 5f 74 65 73 74 73 5f 61 6e 64 5f 65 72  unt_tests_and_er
3bd0: 72 6f 72 73 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  rors [file join 
3be0: 24 64 69 72 20 74 65 73 74 2e 6c 6f 67 5d 20 72  $dir test.log] r
3bf0: 63 20 65 72 72 6d 73 67 0a 20 20 20 20 7d 20 65  c errmsg.    } e
3c00: 6c 73 65 69 66 20 7b 24 72 63 3d 3d 30 20 26 26  lseif {$rc==0 &&
3c10: 20 21 24 3a 3a 44 52 59 52 55 4e 7d 20 7b 0a 20   !$::DRYRUN} {. 
3c20: 20 20 20 20 20 73 65 74 20 72 63 20 31 0a 20 20       set rc 1.  
3c30: 20 20 20 20 73 65 74 20 65 72 72 6d 73 67 20 22      set errmsg "
3c40: 6e 6f 20 74 65 73 74 2e 6c 6f 67 20 66 69 6c 65  no test.log file
3c50: 2e 2e 2e 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ...".    }..    
3c60: 69 66 20 7b 21 24 3a 3a 54 52 41 43 45 7d 20 7b  if {!$::TRACE} {
3c70: 0a 20 20 20 20 20 20 73 65 74 20 74 6d 32 20 5b  .      set tm2 [
3c80: 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 20  clock seconds]. 
3c90: 20 20 20 20 20 73 65 74 20 68 6f 75 72 73 20 5b       set hours [
3ca0: 65 78 70 72 20 7b 28 24 74 6d 32 2d 24 74 6d 31  expr {($tm2-$tm1
3cb0: 29 2f 33 36 30 30 7d 5d 0a 20 20 20 20 20 20 73  )/3600}].      s
3cc0: 65 74 20 6d 69 6e 75 74 65 73 20 5b 65 78 70 72  et minutes [expr
3cd0: 20 7b 28 28 24 74 6d 32 2d 24 74 6d 31 29 2f 36   {(($tm2-$tm1)/6
3ce0: 30 29 25 36 30 7d 5d 0a 20 20 20 20 20 20 73 65  0)%60}].      se
3cf0: 74 20 73 65 63 6f 6e 64 73 20 5b 65 78 70 72 20  t seconds [expr 
3d00: 7b 28 24 74 6d 32 2d 24 74 6d 31 29 25 36 30 7d  {($tm2-$tm1)%60}
3d10: 5d 0a 20 20 20 20 20 20 73 65 74 20 74 6d 20 5b  ].      set tm [
3d20: 66 6f 72 6d 61 74 20 28 25 30 32 64 3a 25 30 32  format (%02d:%02
3d30: 64 3a 25 30 32 64 29 20 24 68 6f 75 72 73 20 24  d:%02d) $hours $
3d40: 6d 69 6e 75 74 65 73 20 24 73 65 63 6f 6e 64 73  minutes $seconds
3d50: 5d 0a 0a 20 20 20 20 20 20 69 66 20 7b 24 72 63  ]..      if {$rc
3d60: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
3d70: 73 74 61 74 75 73 20 46 41 49 4c 0a 20 20 20 20  status FAIL.    
3d80: 20 20 20 20 69 6e 63 72 20 3a 3a 4e 45 52 52 0a      incr ::NERR.
3d90: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20        } else {. 
3da0: 20 20 20 20 20 20 20 73 65 74 20 73 74 61 74 75         set statu
3db0: 73 20 4f 6b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  s Ok.      }..  
3dc0: 20 20 20 20 73 65 74 20 6e 20 5b 73 74 72 69 6e      set n [strin
3dd0: 67 20 6c 65 6e 67 74 68 20 24 74 69 74 6c 65 5d  g length $title]
3de0: 0a 20 20 20 20 20 20 69 66 20 7b 24 3a 3a 50 52  .      if {$::PR
3df0: 4f 47 52 45 53 53 5f 4d 53 47 53 7d 20 7b 0a 20  OGRESS_MSGS} {. 
3e00: 20 20 20 20 20 20 20 50 55 54 53 20 22 66 69 6e         PUTS "fin
3e10: 69 73 68 65 64 3a 20 24 7b 74 69 74 6c 65 7d 5b  ished: ${title}[
3e20: 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 2e 20  string repeat . 
3e30: 5b 65 78 70 72 20 7b 35 33 2d 24 6e 7d 5d 5d 20  [expr {53-$n}]] 
3e40: 24 73 74 61 74 75 73 20 24 74 6d 22 0a 20 20 20  $status $tm".   
3e50: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
3e60: 20 20 20 20 50 55 54 53 20 22 24 7b 74 69 74 6c      PUTS "${titl
3e70: 65 7d 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74  e}[string repeat
3e80: 20 2e 20 5b 65 78 70 72 20 7b 36 33 2d 24 6e 7d   . [expr {63-$n}
3e90: 5d 5d 20 24 73 74 61 74 75 73 20 24 74 6d 22 0a  ]] $status $tm".
3ea0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
3eb0: 20 7b 24 65 72 72 6d 73 67 21 3d 22 22 7d 20 7b   {$errmsg!=""} {
3ec0: 50 55 54 53 20 22 20 20 20 20 20 24 65 72 72 6d  PUTS "     $errm
3ed0: 73 67 22 7d 0a 20 20 20 20 20 20 66 6c 75 73 68  sg"}.      flush
3ee0: 20 73 74 64 6f 75 74 0a 20 20 20 20 7d 0a 0a 20   stdout.    }.. 
3ef0: 20 20 20 69 6e 63 72 20 47 28 6e 4a 6f 62 29 20     incr G(nJob) 
3f00: 2d 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  -1.  } else {.  
3f10: 20 20 73 65 74 20 6c 69 6e 65 20 5b 67 65 74 73    set line [gets
3f20: 20 24 66 64 5d 0a 20 20 20 20 69 66 20 7b 5b 73   $fd].    if {[s
3f30: 74 72 69 6e 67 20 74 72 69 6d 20 24 6c 69 6e 65  tring trim $line
3f40: 5d 20 21 3d 20 22 22 7d 20 7b 0a 20 20 20 20 20  ] != ""} {.     
3f50: 20 70 75 74 73 20 22 54 72 61 63 65 20 20 20 3a   puts "Trace   :
3f60: 20 24 74 69 74 6c 65 20 2d 20 5c 22 24 6c 69 6e   $title - \"$lin
3f70: 65 5c 22 22 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  e\"".    }.  }.}
3f80: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
3f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
3fd0: 54 68 65 20 6f 6e 6c 79 20 61 72 67 75 6d 65 6e  The only argumen
3fe0: 74 20 70 61 73 73 65 64 20 74 6f 20 74 68 69 73  t passed to this
3ff0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 6c   function is a l
4000: 69 73 74 20 6f 66 20 74 65 73 74 2d 73 75 69 74  ist of test-suit
4010: 65 73 20 74 6f 0a 23 20 72 75 6e 2e 20 45 61 63  es to.# run. Eac
4020: 68 20 22 74 65 73 74 2d 73 75 69 74 65 22 20 69  h "test-suite" i
4030: 73 20 69 74 73 65 6c 66 20 61 20 6c 69 73 74 20  s itself a list 
4040: 63 6f 6e 73 69 73 74 69 6e 67 20 6f 66 20 74 68  consisting of th
4050: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 23 20 65 6c  e following.# el
4060: 65 6d 65 6e 74 73 3a 0a 23 0a 23 20 20 20 2a 20  ements:.#.#   * 
4070: 54 65 73 74 20 74 69 74 6c 65 20 28 66 6f 72 20  Test title (for 
4080: 64 69 73 70 6c 61 79 29 2e 0a 23 20 20 20 2a 20  display)..#   * 
4090: 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  The name of the 
40a0: 64 69 72 65 63 74 6f 72 79 20 74 6f 20 72 75 6e  directory to run
40b0: 20 74 68 65 20 74 65 73 74 20 69 6e 2e 0a 23 20   the test in..# 
40c0: 20 20 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74    * The argument
40d0: 20 66 6f 72 20 5b 63 6f 6e 66 69 67 75 72 65 43   for [configureC
40e0: 6f 6d 6d 61 6e 64 5d 0a 23 20 20 20 2a 20 54 68  ommand].#   * Th
40f0: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74  e first argument
4100: 20 66 6f 72 20 5b 6d 61 6b 65 43 6f 6d 6d 61 6e   for [makeComman
4110: 64 5d 0a 23 20 20 20 2a 20 54 68 65 20 73 65 63  d].#   * The sec
4120: 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20 66 6f 72  ond argument for
4130: 20 5b 6d 61 6b 65 43 6f 6d 6d 61 6e 64 5d 0a 23   [makeCommand].#
4140: 20 20 20 2a 20 54 68 65 20 74 68 69 72 64 20 61     * The third a
4150: 72 67 75 6d 65 6e 74 20 66 6f 72 20 5b 6d 61 6b  rgument for [mak
4160: 65 43 6f 6d 6d 61 6e 64 5d 0a 23 0a 70 72 6f 63  eCommand].#.proc
4170: 20 72 75 6e 5f 61 6c 6c 5f 74 65 73 74 5f 73 75   run_all_test_su
4180: 69 74 65 73 20 7b 61 6c 6c 74 65 73 74 73 7d 20  ites {alltests} 
4190: 7b 0a 20 20 67 6c 6f 62 61 6c 20 47 0a 20 20 73  {.  global G.  s
41a0: 65 74 20 74 65 73 74 73 20 24 61 6c 6c 74 65 73  et tests $alltes
41b0: 74 73 0a 0a 20 20 73 65 74 20 47 28 6e 4a 6f 62  ts..  set G(nJob
41c0: 29 20 30 0a 0a 20 20 77 68 69 6c 65 20 7b 5b 6c  ) 0..  while {[l
41d0: 6c 65 6e 67 74 68 20 24 74 65 73 74 73 5d 3e 30  length $tests]>0
41e0: 20 7c 7c 20 24 47 28 6e 4a 6f 62 29 3e 30 7d 20   || $G(nJob)>0} 
41f0: 7b 0a 20 20 20 20 69 66 20 7b 24 47 28 6e 4a 6f  {.    if {$G(nJo
4200: 62 29 3e 3d 24 3a 3a 4a 4f 42 53 20 7c 7c 20 5b  b)>=$::JOBS || [
4210: 6c 6c 65 6e 67 74 68 20 24 74 65 73 74 73 5d 3d  llength $tests]=
4220: 3d 30 7d 20 7b 0a 20 20 20 20 20 20 76 77 61 69  =0} {.      vwai
4230: 74 20 47 28 6e 4a 6f 62 29 0a 20 20 20 20 7d 0a  t G(nJob).    }.
4240: 0a 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74  .    if {[llengt
4250: 68 20 24 74 65 73 74 73 5d 3e 30 7d 20 7b 0a 20  h $tests]>0} {. 
4260: 20 20 20 20 20 73 65 74 20 54 20 5b 6c 69 6e 64       set T [lind
4270: 65 78 20 24 74 65 73 74 73 20 30 5d 0a 20 20 20  ex $tests 0].   
4280: 20 20 20 73 65 74 20 74 65 73 74 73 20 5b 6c 72     set tests [lr
4290: 61 6e 67 65 20 24 74 65 73 74 73 20 31 20 65 6e  ange $tests 1 en
42a0: 64 5d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  d].      foreach
42b0: 20 7b 74 69 74 6c 65 20 64 69 72 20 63 6f 6e 66   {title dir conf
42c0: 69 67 4f 70 74 73 20 74 65 73 74 74 61 72 67 65  igOpts testtarge
42d0: 74 20 6d 61 6b 65 4f 70 74 73 20 63 66 6c 61 67  t makeOpts cflag
42e0: 73 20 6f 70 74 73 7d 20 24 54 20 7b 7d 0a 20 20  s opts} $T {}.  
42f0: 20 20 20 20 69 66 20 7b 24 3a 3a 50 52 4f 47 52      if {$::PROGR
4300: 45 53 53 5f 4d 53 47 53 20 26 26 20 21 24 3a 3a  ESS_MSGS && !$::
4310: 54 52 41 43 45 7d 20 7b 0a 20 20 20 20 20 20 20  TRACE} {.       
4320: 20 73 65 74 20 6e 20 5b 73 74 72 69 6e 67 20 6c   set n [string l
4330: 65 6e 67 74 68 20 24 74 69 74 6c 65 5d 0a 20 20  ength $title].  
4340: 20 20 20 20 20 20 50 55 54 53 20 22 73 74 61 72        PUTS "star
4350: 74 69 6e 67 3a 20 24 7b 74 69 74 6c 65 7d 20 61  ting: ${title} a
4360: 74 20 5b 6e 6f 77 5d 22 0a 20 20 20 20 20 20 20  t [now]".       
4370: 20 66 6c 75 73 68 20 73 74 64 6f 75 74 0a 20 20   flush stdout.  
4380: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 23 20 52      }..      # R
4390: 75 6e 20 74 68 65 20 6a 6f 62 2e 0a 20 20 20 20  un the job..    
43a0: 20 20 23 0a 20 20 20 20 20 20 73 65 74 20 74 6d    #.      set tm
43b0: 31 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73  1 [clock seconds
43c0: 5d 0a 20 20 20 20 20 20 69 6e 63 72 20 47 28 6e  ].      incr G(n
43d0: 4a 6f 62 29 0a 20 20 20 20 20 20 73 65 74 20 73  Job).      set s
43e0: 63 72 69 70 74 20 5b 66 69 6c 65 20 6e 6f 72 6d  cript [file norm
43f0: 61 6c 69 7a 65 20 5b 69 6e 66 6f 20 73 63 72 69  alize [info scri
4400: 70 74 5d 5d 0a 20 20 20 20 20 20 73 65 74 20 66  pt]].      set f
4410: 64 20 5b 6f 70 65 6e 20 22 7c 5b 69 6e 66 6f 20  d [open "|[info 
4420: 6e 61 6d 65 6f 66 65 78 65 63 75 74 61 62 6c 65  nameofexecutable
4430: 5d 20 24 73 63 72 69 70 74 20 2d 2d 73 6c 61 76  ] $script --slav
4440: 65 22 20 72 2b 5d 0a 20 20 20 20 20 20 66 63 6f  e" r+].      fco
4450: 6e 66 69 67 75 72 65 20 24 66 64 20 2d 62 6c 6f  nfigure $fd -blo
4460: 63 6b 69 6e 67 20 30 0a 20 20 20 20 20 20 66 69  cking 0.      fi
4470: 6c 65 65 76 65 6e 74 20 24 66 64 20 72 65 61 64  leevent $fd read
4480: 61 62 6c 65 20 5b 6c 69 73 74 20 73 6c 61 76 65  able [list slave
4490: 5f 66 69 6c 65 65 76 65 6e 74 20 24 66 64 20 24  _fileevent $fd $
44a0: 54 20 24 74 6d 31 5d 0a 20 20 20 20 20 20 70 75  T $tm1].      pu
44b0: 74 73 20 24 66 64 20 5b 6c 69 73 74 20 24 3a 3a  ts $fd [list $::
44c0: 54 52 41 43 45 20 24 3a 3a 4d 53 56 43 20 24 3a  TRACE $::MSVC $:
44d0: 3a 44 52 59 52 55 4e 20 24 3a 3a 4b 45 45 50 46  :DRYRUN $::KEEPF
44e0: 49 4c 45 53 5d 0a 20 20 20 20 20 20 70 75 74 73  ILES].      puts
44f0: 20 24 66 64 20 5b 6c 69 73 74 20 7b 2a 7d 24 54   $fd [list {*}$T
4500: 5d 0a 20 20 20 20 20 20 66 6c 75 73 68 20 24 66  ].      flush $f
4510: 64 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 70  d.    }.  }.}..p
4520: 72 6f 63 20 61 64 64 5f 74 65 73 74 5f 73 75 69  roc add_test_sui
4530: 74 65 20 7b 6c 69 73 74 76 61 72 20 6e 61 6d 65  te {listvar name
4540: 20 74 65 73 74 74 61 72 67 65 74 20 63 6f 6e 66   testtarget conf
4550: 69 67 7d 20 7b 0a 20 20 75 70 76 61 72 20 24 6c  ig} {.  upvar $l
4560: 69 73 74 76 61 72 20 61 6c 6c 74 65 73 74 73 0a  istvar alltests.
4570: 0a 20 20 23 20 54 63 6c 20 76 61 72 69 61 62 6c  .  # Tcl variabl
4580: 65 20 24 6f 70 74 73 20 69 73 20 75 73 65 64 20  e $opts is used 
4590: 74 6f 20 62 75 69 6c 64 20 75 70 20 74 68 65 20  to build up the 
45a0: 76 61 6c 75 65 20 75 73 65 64 20 74 6f 20 73 65  value used to se
45b0: 74 20 74 68 65 0a 20 20 23 20 4f 50 54 53 20 4d  t the.  # OPTS M
45c0: 61 6b 65 66 69 6c 65 20 76 61 72 69 61 62 6c 65  akefile variable
45d0: 2e 20 56 61 72 69 61 62 6c 65 20 24 63 66 6c 61  . Variable $cfla
45e0: 67 73 20 68 6f 6c 64 73 20 74 68 65 20 76 61 6c  gs holds the val
45f0: 75 65 20 66 6f 72 0a 20 20 23 20 43 46 4c 41 47  ue for.  # CFLAG
4600: 53 2e 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20  S. The makefile 
4610: 77 69 6c 6c 20 70 61 73 73 20 4f 50 54 53 20 74  will pass OPTS t
4620: 6f 20 62 6f 74 68 20 67 63 63 20 61 6e 64 20 6c  o both gcc and l
4630: 65 6d 6f 6e 2c 20 62 75 74 0a 20 20 23 20 43 46  emon, but.  # CF
4640: 4c 41 47 53 20 69 73 20 6f 6e 6c 79 20 70 61 73  LAGS is only pas
4650: 73 65 64 20 74 6f 20 67 63 63 2e 0a 20 20 23 0a  sed to gcc..  #.
4660: 20 20 73 65 74 20 6d 61 6b 65 4f 70 74 73 20 22    set makeOpts "
4670: 22 0a 20 20 73 65 74 20 63 66 6c 61 67 73 20 5b  ".  set cflags [
4680: 65 78 70 72 20 7b 24 3a 3a 4d 53 56 43 20 3f 20  expr {$::MSVC ? 
4690: 22 2d 5a 69 22 20 3a 20 22 2d 67 22 7d 5d 0a 20  "-Zi" : "-g"}]. 
46a0: 20 73 65 74 20 6f 70 74 73 20 22 22 0a 20 20 73   set opts "".  s
46b0: 65 74 20 74 69 74 6c 65 20 24 7b 6e 61 6d 65 7d  et title ${name}
46c0: 28 24 74 65 73 74 74 61 72 67 65 74 29 0a 20 20  ($testtarget).  
46d0: 73 65 74 20 63 6f 6e 66 69 67 4f 70 74 73 20 24  set configOpts $
46e0: 3a 3a 57 49 54 48 54 43 4c 0a 20 20 73 65 74 20  ::WITHTCL.  set 
46f0: 73 6b 69 70 20 30 0a 0a 20 20 72 65 67 73 75 62  skip 0..  regsub
4700: 20 2d 61 6c 6c 20 7b 23 5b 5e 5c 6e 5d 2a 5c 6e   -all {#[^\n]*\n
4710: 7d 20 24 63 6f 6e 66 69 67 20 5c 6e 20 63 6f 6e  } $config \n con
4720: 66 69 67 0a 20 20 66 6f 72 65 61 63 68 20 61 72  fig.  foreach ar
4730: 67 20 24 63 6f 6e 66 69 67 20 7b 0a 20 20 20 20  g $config {.    
4740: 69 66 20 7b 24 73 6b 69 70 7d 20 7b 0a 20 20 20  if {$skip} {.   
4750: 20 20 20 73 65 74 20 73 6b 69 70 20 30 0a 20 20     set skip 0.  
4760: 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20      continue.   
4770: 20 7d 0a 20 20 20 20 69 66 20 7b 5b 72 65 67 65   }.    if {[rege
4780: 78 70 20 7b 5e 2d 5b 55 44 5d 7d 20 24 61 72 67  xp {^-[UD]} $arg
4790: 5d 7d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65  ]} {.      lappe
47a0: 6e 64 20 6f 70 74 73 20 24 61 72 67 0a 20 20 20  nd opts $arg.   
47b0: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 72 65 67 65   } elseif {[rege
47c0: 78 70 20 7b 5e 5b 41 2d 5a 5d 2b 3d 7d 20 24 61  xp {^[A-Z]+=} $a
47d0: 72 67 5d 7d 20 7b 0a 20 20 20 20 20 20 6c 61 70  rg]} {.      lap
47e0: 70 65 6e 64 20 74 65 73 74 74 61 72 67 65 74 20  pend testtarget 
47f0: 24 61 72 67 0a 20 20 20 20 7d 20 65 6c 73 65 69  $arg.    } elsei
4800: 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 69 66 3a  f {[regexp {^if:
4810: 28 5b 61 2d 7a 5d 2b 29 28 2e 2a 29 7d 20 24 61  ([a-z]+)(.*)} $a
4820: 72 67 20 61 6c 6c 20 6b 65 79 20 74 61 69 6c 5d  rg all key tail]
4830: 7d 20 7b 0a 20 20 20 20 20 20 23 20 41 72 67 75  } {.      # Argu
4840: 6d 65 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72  ments of the for
4850: 6d 20 27 69 66 3a 6f 73 3d 3d 22 4c 69 6e 75 78  m 'if:os=="Linux
4860: 22 27 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68  "' will cause th
4870: 65 20 73 75 62 73 65 71 75 65 6e 74 0a 20 20 20  e subsequent.   
4880: 20 20 20 23 20 61 72 67 75 6d 65 6e 74 20 74 6f     # argument to
4890: 20 62 65 20 73 6b 69 70 70 65 64 20 69 66 20 74   be skipped if t
48a0: 68 65 20 24 74 63 6c 5f 70 6c 61 74 66 6f 72 6d  he $tcl_platform
48b0: 28 6f 73 29 20 69 73 20 6e 6f 74 20 22 4c 69 6e  (os) is not "Lin
48c0: 75 78 22 2c 20 66 6f 72 0a 20 20 20 20 20 20 23  ux", for.      #
48d0: 20 65 78 61 6d 70 6c 65 2e 2e 2e 0a 20 20 20 20   example....    
48e0: 20 20 73 65 74 20 73 6b 69 70 20 5b 65 78 70 72    set skip [expr
48f0: 20 21 28 5c 24 3a 3a 74 63 6c 5f 70 6c 61 74 66   !(\$::tcl_platf
4900: 6f 72 6d 28 24 6b 65 79 29 24 74 61 69 6c 29 5d  orm($key)$tail)]
4910: 0a 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b  .    } elseif {[
4920: 72 65 67 65 78 70 20 7b 5e 2d 2d 28 65 6e 61 62  regexp {^--(enab
4930: 6c 65 7c 64 69 73 61 62 6c 65 29 2d 7d 20 24 61  le|disable)-} $a
4940: 72 67 5d 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rg]} {.      if 
4950: 7b 24 3a 3a 4d 53 56 43 7d 20 7b 0a 20 20 20 20  {$::MSVC} {.    
4960: 20 20 20 20 69 66 20 7b 24 61 72 67 20 65 71 20      if {$arg eq 
4970: 22 2d 2d 64 69 73 61 62 6c 65 2d 61 6d 61 6c 67  "--disable-amalg
4980: 61 6d 61 74 69 6f 6e 22 7d 20 7b 0a 20 20 20 20  amation"} {.    
4990: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 61        lappend ma
49a0: 6b 65 4f 70 74 73 20 55 53 45 5f 41 4d 41 4c 47  keOpts USE_AMALG
49b0: 41 4d 41 54 49 4f 4e 3d 30 0a 20 20 20 20 20 20  AMATION=0.      
49c0: 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20      continue.   
49d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
49e0: 66 20 7b 24 61 72 67 20 65 71 20 22 2d 2d 64 69  f {$arg eq "--di
49f0: 73 61 62 6c 65 2d 73 68 61 72 65 64 22 7d 20 7b  sable-shared"} {
4a00: 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65  .          lappe
4a10: 6e 64 20 6d 61 6b 65 4f 70 74 73 20 55 53 45 5f  nd makeOpts USE_
4a20: 43 52 54 5f 44 4c 4c 3d 30 20 44 59 4e 41 4d 49  CRT_DLL=0 DYNAMI
4a30: 43 5f 53 48 45 4c 4c 3d 30 0a 20 20 20 20 20 20  C_SHELL=0.      
4a40: 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20      continue.   
4a50: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
4a60: 66 20 7b 24 61 72 67 20 65 71 20 22 2d 2d 65 6e  f {$arg eq "--en
4a70: 61 62 6c 65 2d 66 74 73 35 22 7d 20 7b 0a 20 20  able-fts5"} {.  
4a80: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
4a90: 6f 70 74 73 20 2d 44 53 51 4c 49 54 45 5f 45 4e  opts -DSQLITE_EN
4aa0: 41 42 4c 45 5f 46 54 53 35 0a 20 20 20 20 20 20  ABLE_FTS5.      
4ab0: 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20      continue.   
4ac0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
4ad0: 66 20 7b 24 61 72 67 20 65 71 20 22 2d 2d 65 6e  f {$arg eq "--en
4ae0: 61 62 6c 65 2d 6a 73 6f 6e 31 22 7d 20 7b 0a 20  able-json1"} {. 
4af0: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
4b00: 20 6f 70 74 73 20 2d 44 53 51 4c 49 54 45 5f 45   opts -DSQLITE_E
4b10: 4e 41 42 4c 45 5f 4a 53 4f 4e 31 0a 20 20 20 20  NABLE_JSON1.    
4b20: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20        continue. 
4b30: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4b40: 20 69 66 20 7b 24 61 72 67 20 65 71 20 22 2d 2d   if {$arg eq "--
4b50: 65 6e 61 62 6c 65 2d 73 68 61 72 65 64 22 7d 20  enable-shared"} 
4b60: 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70  {.          lapp
4b70: 65 6e 64 20 6d 61 6b 65 4f 70 74 73 20 55 53 45  end makeOpts USE
4b80: 5f 43 52 54 5f 44 4c 4c 3d 31 20 44 59 4e 41 4d  _CRT_DLL=1 DYNAM
4b90: 49 43 5f 53 48 45 4c 4c 3d 31 0a 20 20 20 20 20  IC_SHELL=1.     
4ba0: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20       continue.  
4bb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
4bc0: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f        lappend co
4bd0: 6e 66 69 67 4f 70 74 73 20 24 61 72 67 0a 20 20  nfigOpts $arg.  
4be0: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
4bf0: 20 69 66 20 7b 24 3a 3a 4d 53 56 43 7d 20 7b 0a   if {$::MSVC} {.
4c00: 20 20 20 20 20 20 20 20 69 66 20 7b 24 61 72 67          if {$arg
4c10: 20 65 71 20 22 2d 67 22 7d 20 7b 0a 20 20 20 20   eq "-g"} {.    
4c20: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 66        lappend cf
4c30: 6c 61 67 73 20 2d 5a 69 0a 20 20 20 20 20 20 20  lags -Zi.       
4c40: 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20     continue.    
4c50: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
4c60: 20 7b 5b 72 65 67 65 78 70 20 2d 2d 20 7b 5e 2d   {[regexp -- {^-
4c70: 4f 28 5c 64 2b 29 24 7d 20 24 61 72 67 20 61 6c  O(\d+)$} $arg al
4c80: 6c 20 6c 65 76 65 6c 5d 7d 20 74 68 65 6e 20 7b  l level]} then {
4c90: 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65  .          lappe
4ca0: 6e 64 20 6d 61 6b 65 4f 70 74 73 20 4f 50 54 49  nd makeOpts OPTI
4cb0: 4d 49 5a 41 54 49 4f 4e 53 3d 24 6c 65 76 65 6c  MIZATIONS=$level
4cc0: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69  .          conti
4cd0: 6e 75 65 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  nue.        }.  
4ce0: 20 20 20 20 7d 0a 20 20 20 20 20 20 6c 61 70 70      }.      lapp
4cf0: 65 6e 64 20 63 66 6c 61 67 73 20 24 61 72 67 0a  end cflags $arg.
4d00: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 23 20 44      }.  }..  # D
4d10: 69 73 61 62 6c 65 20 73 79 6e 63 20 74 6f 20 6d  isable sync to m
4d20: 61 6b 65 20 74 65 73 74 69 6e 67 20 66 61 73 74  ake testing fast
4d30: 65 72 2e 0a 20 20 23 0a 20 20 6c 61 70 70 65 6e  er..  #.  lappen
4d40: 64 20 6f 70 74 73 20 2d 44 53 51 4c 49 54 45 5f  d opts -DSQLITE_
4d50: 4e 4f 5f 53 59 4e 43 3d 31 0a 0a 20 20 23 20 53  NO_SYNC=1..  # S
4d60: 6f 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ome configuratio
4d70: 6e 73 20 61 6c 72 65 61 64 79 20 73 65 74 20 48  ns already set H
4d80: 41 56 45 5f 55 53 4c 45 45 50 3b 20 69 6e 20 74  AVE_USLEEP; in t
4d90: 68 61 74 20 63 61 73 65 2c 20 73 6b 69 70 20 69  hat case, skip i
4da0: 74 2e 0a 20 20 23 0a 20 20 69 66 20 7b 5b 6c 73  t..  #.  if {[ls
4db0: 65 61 72 63 68 20 2d 72 65 67 65 78 70 20 24 6f  earch -regexp $o
4dc0: 70 74 73 20 7b 5e 2d 44 48 41 56 45 5f 55 53 4c  pts {^-DHAVE_USL
4dd0: 45 45 50 28 3f 3a 3d 7c 24 29 7d 5d 3d 3d 2d 31  EEP(?:=|$)}]==-1
4de0: 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  } {.    lappend 
4df0: 6f 70 74 73 20 2d 44 48 41 56 45 5f 55 53 4c 45  opts -DHAVE_USLE
4e00: 45 50 3d 31 0a 20 20 7d 0a 0a 20 20 23 20 41 64  EP=1.  }..  # Ad
4e10: 64 20 74 68 65 20 64 65 66 69 6e 65 20 66 6f 72  d the define for
4e20: 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2e 0a   this platform..
4e30: 20 20 23 0a 20 20 69 66 20 7b 24 3a 3a 74 63 6c    #.  if {$::tcl
4e40: 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f  _platform(platfo
4e50: 72 6d 29 3d 3d 22 77 69 6e 64 6f 77 73 22 7d 20  rm)=="windows"} 
4e60: 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 70  {.    lappend op
4e70: 74 73 20 2d 44 53 51 4c 49 54 45 5f 4f 53 5f 57  ts -DSQLITE_OS_W
4e80: 49 4e 3d 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a  IN=1.  } else {.
4e90: 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 70 74 73      lappend opts
4ea0: 20 2d 44 53 51 4c 49 54 45 5f 4f 53 5f 55 4e 49   -DSQLITE_OS_UNI
4eb0: 58 3d 31 0a 20 20 7d 0a 0a 20 20 23 20 53 65 74  X=1.  }..  # Set
4ec0: 20 74 68 65 20 73 75 62 2d 64 69 72 65 63 74 6f   the sub-directo
4ed0: 72 79 20 74 6f 20 75 73 65 2e 0a 20 20 23 0a 20  ry to use..  #. 
4ee0: 20 73 65 74 20 64 69 72 20 5b 73 74 72 69 6e 67   set dir [string
4ef0: 20 74 6f 6c 6f 77 65 72 20 5b 73 74 72 69 6e 67   tolower [string
4f00: 20 6d 61 70 20 7b 2d 20 5f 20 22 20 22 20 5f 7d   map {- _ " " _}
4f10: 20 24 6e 61 6d 65 5d 5d 0a 0a 20 20 23 20 4a 6f   $name]]..  # Jo
4f20: 69 6e 20 6f 70 74 69 6f 6e 20 6c 69 73 74 73 20  in option lists 
4f30: 69 6e 74 6f 20 73 74 72 69 6e 67 73 2c 20 75 73  into strings, us
4f40: 69 6e 67 20 73 70 61 63 65 20 61 73 20 64 65 6c  ing space as del
4f50: 69 6d 69 74 65 72 2e 0a 20 20 23 0a 20 20 73 65  imiter..  #.  se
4f60: 74 20 6d 61 6b 65 4f 70 74 73 20 5b 6a 6f 69 6e  t makeOpts [join
4f70: 20 24 6d 61 6b 65 4f 70 74 73 20 22 20 22 5d 0a   $makeOpts " "].
4f80: 20 20 73 65 74 20 63 66 6c 61 67 73 20 20 20 5b    set cflags   [
4f90: 6a 6f 69 6e 20 24 63 66 6c 61 67 73 20 22 20 22  join $cflags " "
4fa0: 5d 0a 20 20 73 65 74 20 6f 70 74 73 20 20 20 20  ].  set opts    
4fb0: 20 5b 6a 6f 69 6e 20 24 6f 70 74 73 20 22 20 22   [join $opts " "
4fc0: 5d 0a 0a 20 20 6c 61 70 70 65 6e 64 20 61 6c 6c  ]..  lappend all
4fd0: 74 65 73 74 73 20 5b 6c 69 73 74 20 5c 0a 20 20  tests [list \.  
4fe0: 20 20 20 20 24 74 69 74 6c 65 20 24 64 69 72 20      $title $dir 
4ff0: 24 63 6f 6e 66 69 67 4f 70 74 73 20 24 74 65 73  $configOpts $tes
5000: 74 74 61 72 67 65 74 20 24 6d 61 6b 65 4f 70 74  ttarget $makeOpt
5010: 73 20 24 63 66 6c 61 67 73 20 24 6f 70 74 73 5d  s $cflags $opts]
5020: 0a 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77  .}..# The follow
5030: 69 6e 67 20 70 72 6f 63 65 64 75 72 65 20 72 65  ing procedure re
5040: 74 75 72 6e 73 20 74 68 65 20 22 63 6f 6e 66 69  turns the "confi
5050: 67 75 72 65 22 20 63 6f 6d 6d 61 6e 64 20 74 6f  gure" command to
5060: 20 62 65 20 65 78 65 63 74 75 65 64 20 66 6f 72   be exectued for
5070: 0a 23 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  .# the current p
5080: 6c 61 74 66 6f 72 6d 2c 20 77 68 69 63 68 20 6d  latform, which m
5090: 61 79 20 62 65 20 57 69 6e 64 6f 77 73 20 28 76  ay be Windows (v
50a0: 69 61 20 4d 69 6e 47 57 2c 20 65 74 63 29 2e 0a  ia MinGW, etc)..
50b0: 23 0a 70 72 6f 63 20 63 6f 6e 66 69 67 75 72 65  #.proc configure
50c0: 43 6f 6d 6d 61 6e 64 20 7b 6f 70 74 73 7d 20 7b  Command {opts} {
50d0: 0a 20 20 69 66 20 7b 24 3a 3a 4d 53 56 43 7d 20  .  if {$::MSVC} 
50e0: 72 65 74 75 72 6e 20 5b 6c 69 73 74 5d 3b 20 23  return [list]; #
50f0: 20 54 68 69 73 20 69 73 20 6e 6f 74 20 6e 65 65   This is not nee
5100: 64 65 64 20 66 6f 72 20 4d 53 56 43 2e 0a 20 20  ded for MSVC..  
5110: 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  set result [list
5120: 20 74 72 61 63 65 5f 63 6d 64 20 65 78 65 63 5d   trace_cmd exec]
5130: 0a 20 20 69 66 20 7b 24 3a 3a 74 63 6c 5f 70 6c  .  if {$::tcl_pl
5140: 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29  atform(platform)
5150: 3d 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 20  =="windows"} {. 
5160: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
5170: 74 20 73 68 0a 20 20 7d 0a 20 20 6c 61 70 70 65  t sh.  }.  lappe
5180: 6e 64 20 72 65 73 75 6c 74 20 24 3a 3a 53 52 43  nd result $::SRC
5190: 44 49 52 2f 63 6f 6e 66 69 67 75 72 65 20 2d 2d  DIR/configure --
51a0: 65 6e 61 62 6c 65 2d 6c 6f 61 64 2d 65 78 74 65  enable-load-exte
51b0: 6e 73 69 6f 6e 0a 20 20 66 6f 72 65 61 63 68 20  nsion.  foreach 
51c0: 78 20 24 6f 70 74 73 20 7b 6c 61 70 70 65 6e 64  x $opts {lappend
51d0: 20 72 65 73 75 6c 74 20 24 78 7d 0a 20 20 6c 61   result $x}.  la
51e0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 3e 26 20  ppend result >& 
51f0: 74 65 73 74 2e 6c 6f 67 0a 7d 0a 0a 23 20 54 68  test.log.}..# Th
5200: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 72 6f 63  e following proc
5210: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68  edure returns th
5220: 65 20 22 6d 61 6b 65 22 20 63 6f 6d 6d 61 6e 64  e "make" command
5230: 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20   to be executed 
5240: 66 6f 72 20 74 68 65 0a 23 20 73 70 65 63 69 66  for the.# specif
5250: 69 65 64 20 74 61 72 67 65 74 73 2c 20 63 6f 6d  ied targets, com
5260: 70 69 6c 65 72 20 66 6c 61 67 73 2c 20 61 6e 64  piler flags, and
5270: 20 6f 70 74 69 6f 6e 73 2e 0a 23 0a 70 72 6f 63   options..#.proc
5280: 20 6d 61 6b 65 43 6f 6d 6d 61 6e 64 20 7b 20 74   makeCommand { t
5290: 61 72 67 65 74 73 20 6d 61 6b 65 4f 70 74 73 20  argets makeOpts 
52a0: 63 66 6c 61 67 73 20 6f 70 74 73 20 7d 20 7b 0a  cflags opts } {.
52b0: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69    set result [li
52c0: 73 74 20 74 72 61 63 65 5f 63 6d 64 20 65 78 65  st trace_cmd exe
52d0: 63 5d 0a 20 20 69 66 20 7b 24 3a 3a 4d 53 56 43  c].  if {$::MSVC
52e0: 7d 20 7b 0a 20 20 20 20 73 65 74 20 6e 6d 61 6b  } {.    set nmak
52f0: 65 44 69 72 20 5b 66 69 6c 65 20 6e 61 74 69 76  eDir [file nativ
5300: 65 6e 61 6d 65 20 24 3a 3a 53 52 43 44 49 52 5d  ename $::SRCDIR]
5310: 0a 20 20 20 20 73 65 74 20 6e 6d 61 6b 65 46 69  .    set nmakeFi
5320: 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
5330: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24  ame [file join $
5340: 6e 6d 61 6b 65 44 69 72 20 4d 61 6b 65 66 69 6c  nmakeDir Makefil
5350: 65 2e 6d 73 63 5d 5d 0a 20 20 20 20 6c 61 70 70  e.msc]].    lapp
5360: 65 6e 64 20 72 65 73 75 6c 74 20 6e 6d 61 6b 65  end result nmake
5370: 20 2f 66 20 24 6e 6d 61 6b 65 46 69 6c 65 20 54   /f $nmakeFile T
5380: 4f 50 3d 24 6e 6d 61 6b 65 44 69 72 0a 20 20 20  OP=$nmakeDir.   
5390: 20 73 65 74 20 74 63 6c 44 69 72 20 5b 66 69 6c   set tclDir [fil
53a0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
53b0: 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0a 20  le normalize \. 
53c0: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 64 69 72         [file dir
53d0: 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61  name [file dirna
53e0: 6d 65 20 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66 65  me [info nameofe
53f0: 78 65 63 75 74 61 62 6c 65 5d 5d 5d 5d 5d 0a 20  xecutable]]]]]. 
5400: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
5410: 74 20 22 54 43 4c 44 49 52 3d 24 74 63 6c 44 69  t "TCLDIR=$tclDi
5420: 72 22 0a 20 20 20 20 69 66 20 7b 5b 72 65 67 65  r".    if {[rege
5430: 78 70 20 7b 55 53 45 5f 53 54 44 43 41 4c 4c 3d  xp {USE_STDCALL=
5440: 31 7d 20 24 63 66 6c 61 67 73 5d 7d 20 7b 0a 20  1} $cflags]} {. 
5450: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
5460: 75 6c 74 20 55 53 45 5f 53 54 44 43 41 4c 4c 3d  ult USE_STDCALL=
5470: 31 0a 20 20 20 20 7d 0a 20 20 7d 20 65 6c 73 65  1.    }.  } else
5480: 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72   {.    lappend r
5490: 65 73 75 6c 74 20 6d 61 6b 65 0a 20 20 7d 0a 20  esult make.  }. 
54a0: 20 66 6f 72 65 61 63 68 20 6d 61 6b 65 4f 70 74   foreach makeOpt
54b0: 20 24 6d 61 6b 65 4f 70 74 73 20 7b 0a 20 20 20   $makeOpts {.   
54c0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
54d0: 24 6d 61 6b 65 4f 70 74 0a 20 20 7d 0a 20 20 6c  $makeOpt.  }.  l
54e0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 63 6c  append result cl
54f0: 65 61 6e 0a 20 20 66 6f 72 65 61 63 68 20 74 61  ean.  foreach ta
5500: 72 67 65 74 20 24 74 61 72 67 65 74 73 20 7b 0a  rget $targets {.
5510: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
5520: 6c 74 20 24 74 61 72 67 65 74 0a 20 20 7d 0a 20  lt $target.  }. 
5530: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
5540: 43 46 4c 41 47 53 3d 24 63 66 6c 61 67 73 20 4f  CFLAGS=$cflags O
5550: 50 54 53 3d 24 6f 70 74 73 20 3e 3e 26 20 74 65  PTS=$opts >>& te
5560: 73 74 2e 6c 6f 67 0a 7d 0a 0a 23 20 54 68 65 20  st.log.}..# The 
5570: 66 6f 6c 6c 6f 77 69 6e 67 20 70 72 6f 63 65 64  following proced
5580: 75 72 65 20 70 72 69 6e 74 73 20 69 74 73 20 61  ure prints its a
5590: 72 67 75 6d 65 6e 74 73 20 69 66 20 3a 3a 54 52  rguments if ::TR
55a0: 41 43 45 20 69 73 20 74 72 75 65 2e 0a 23 20 41  ACE is true..# A
55b0: 6e 64 20 69 74 20 65 78 65 63 75 74 65 73 20 74  nd it executes t
55c0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6f 66 20 69 74  he command of it
55d0: 73 20 61 72 67 75 6d 65 6e 74 73 20 69 6e 20 74  s arguments in t
55e0: 68 65 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 74 65  he calling conte
55f0: 78 74 0a 23 20 69 66 20 3a 3a 44 52 59 52 55 4e  xt.# if ::DRYRUN
5600: 20 69 73 20 66 61 6c 73 65 2e 0a 23 0a 70 72 6f   is false..#.pro
5610: 63 20 74 72 61 63 65 5f 63 6d 64 20 7b 61 72 67  c trace_cmd {arg
5620: 73 7d 20 7b 0a 20 20 69 66 20 7b 24 3a 3a 54 52  s} {.  if {$::TR
5630: 41 43 45 7d 20 7b 0a 20 20 20 20 50 55 54 53 20  ACE} {.    PUTS 
5640: 24 61 72 67 73 0a 20 20 7d 0a 20 20 73 65 74 20  $args.  }.  set 
5650: 72 65 73 20 22 22 0a 20 20 69 66 20 7b 21 24 3a  res "".  if {!$:
5660: 3a 44 52 59 52 55 4e 7d 20 7b 0a 20 20 20 20 73  :DRYRUN} {.    s
5670: 65 74 20 72 65 73 20 5b 75 70 6c 65 76 65 6c 20  et res [uplevel 
5680: 31 20 24 61 72 67 73 5d 0a 20 20 7d 0a 20 20 72  1 $args].  }.  r
5690: 65 74 75 72 6e 20 24 72 65 73 0a 7d 0a 0a 0a 23  eturn $res.}...#
56a0: 20 54 68 69 73 20 70 72 6f 63 20 70 72 6f 63 65   This proc proce
56b0: 73 73 65 73 20 74 68 65 20 63 6f 6d 6d 61 6e 64  sses the command
56c0: 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 70 61   line options pa
56d0: 73 73 65 64 20 74 6f 20 74 68 69 73 20 73 63 72  ssed to this scr
56e0: 69 70 74 2e 0a 23 20 43 75 72 72 65 6e 74 6c 79  ipt..# Currently
56f0: 20 74 68 65 20 6f 6e 6c 79 20 6f 70 74 69 6f 6e   the only option
5700: 20 73 75 70 70 6f 72 74 65 64 20 69 73 20 22 2d   supported is "-
5710: 6d 61 6b 65 66 69 6c 65 22 2c 20 64 65 66 61 75  makefile", defau
5720: 6c 74 0a 23 20 22 72 65 6c 65 61 73 65 74 65 73  lt.# "releasetes
5730: 74 2e 6d 6b 22 2e 20 53 65 74 20 74 68 65 20 3a  t.mk". Set the :
5740: 3a 4d 41 4b 45 46 49 4c 45 20 76 61 72 69 61 62  :MAKEFILE variab
5750: 6c 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  le to the value 
5760: 6f 66 20 74 68 69 73 0a 23 20 6f 70 74 69 6f 6e  of this.# option
5770: 2e 0a 23 0a 70 72 6f 63 20 70 72 6f 63 65 73 73  ..#.proc process
5780: 5f 6f 70 74 69 6f 6e 73 20 7b 61 72 67 76 7d 20  _options {argv} 
5790: 7b 0a 20 20 73 65 74 20 3a 3a 53 52 43 44 49 52  {.  set ::SRCDIR
57a0: 20 20 20 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c      [file normal
57b0: 69 7a 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  ize [file dirnam
57c0: 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  e [file dirname 
57d0: 24 3a 3a 61 72 67 76 30 5d 5d 5d 0a 20 20 73 65  $::argv0]]].  se
57e0: 74 20 3a 3a 51 55 49 43 4b 20 20 20 20 20 20 20  t ::QUICK       
57f0: 20 20 20 30 0a 20 20 73 65 74 20 3a 3a 4d 53 56     0.  set ::MSV
5800: 43 20 20 20 20 20 20 20 20 20 20 20 30 0a 20 20  C           0.  
5810: 73 65 74 20 3a 3a 42 55 49 4c 44 4f 4e 4c 59 20  set ::BUILDONLY 
5820: 20 20 20 20 20 30 0a 20 20 73 65 74 20 3a 3a 44       0.  set ::D
5830: 52 59 52 55 4e 20 20 20 20 20 20 20 20 20 30 0a  RYRUN         0.
5840: 20 20 73 65 74 20 3a 3a 54 52 41 43 45 20 20 20    set ::TRACE   
5850: 20 20 20 20 20 20 20 30 0a 20 20 73 65 74 20 3a         0.  set :
5860: 3a 4a 4f 42 53 20 20 20 20 20 20 20 20 20 20 20  :JOBS           
5870: 31 0a 20 20 73 65 74 20 3a 3a 50 52 4f 47 52 45  1.  set ::PROGRE
5880: 53 53 5f 4d 53 47 53 20 20 30 0a 20 20 73 65 74  SS_MSGS  0.  set
5890: 20 3a 3a 57 49 54 48 54 43 4c 20 20 20 20 20 20   ::WITHTCL      
58a0: 20 20 7b 7d 0a 20 20 73 65 74 20 3a 3a 46 4f 52    {}.  set ::FOR
58b0: 43 45 20 20 20 20 20 20 20 20 20 20 30 0a 20 20  CE          0.  
58c0: 73 65 74 20 3a 3a 4b 45 45 50 46 49 4c 45 53 20  set ::KEEPFILES 
58d0: 20 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20       0          
58e0: 3b 23 20 4b 65 65 70 20 65 78 74 72 61 20 66 69  ;# Keep extra fi
58f0: 6c 65 73 20 61 66 74 65 72 20 74 65 73 74 20 72  les after test r
5900: 75 6e 0a 20 20 73 65 74 20 63 6f 6e 66 69 67 20  un.  set config 
5910: 7b 7d 0a 20 20 73 65 74 20 70 6c 61 74 66 6f 72  {}.  set platfor
5920: 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  m $::tcl_platfor
5930: 6d 28 6f 73 29 2d 24 3a 3a 74 63 6c 5f 70 6c 61  m(os)-$::tcl_pla
5940: 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 0a 0a  tform(machine)..
5950: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20    for {set i 0} 
5960: 7b 24 69 20 3c 20 5b 6c 6c 65 6e 67 74 68 20 24  {$i < [llength $
5970: 61 72 67 76 5d 7d 20 7b 69 6e 63 72 20 69 7d 20  argv]} {incr i} 
5980: 7b 0a 20 20 20 20 73 65 74 20 78 20 5b 6c 69 6e  {.    set x [lin
5990: 64 65 78 20 24 61 72 67 76 20 24 69 5d 0a 20 20  dex $argv $i].  
59a0: 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e    if {[regexp {^
59b0: 2d 2d 5b 61 2d 7a 5d 7d 20 24 78 5d 7d 20 7b 73  --[a-z]} $x]} {s
59c0: 65 74 20 78 20 5b 73 74 72 69 6e 67 20 72 61 6e  et x [string ran
59d0: 67 65 20 24 78 20 31 20 65 6e 64 5d 7d 0a 20 20  ge $x 1 end]}.  
59e0: 20 20 73 77 69 74 63 68 20 2d 67 6c 6f 62 20 2d    switch -glob -
59f0: 2d 20 24 78 20 7b 0a 20 20 20 20 20 20 2d 73 6c  - $x {.      -sl
5a00: 61 76 65 20 7b 0a 20 20 20 20 20 20 20 20 72 75  ave {.        ru
5a10: 6e 5f 73 6c 61 76 65 5f 74 65 73 74 0a 20 20 20  n_slave_test.   
5a20: 20 20 20 20 20 65 78 69 74 0a 20 20 20 20 20 20       exit.      
5a30: 7d 0a 0a 20 20 20 20 20 20 23 20 55 6e 64 6f 63  }..      # Undoc
5a40: 75 6d 65 6e 74 65 64 20 6c 65 67 61 63 79 20 6f  umented legacy o
5a50: 70 74 69 6f 6e 3a 20 2d 2d 73 72 63 64 69 72 20  ption: --srcdir 
5a60: 44 49 52 45 43 54 4f 52 59 0a 20 20 20 20 20 20  DIRECTORY.      
5a70: 23 0a 20 20 20 20 20 20 23 20 44 49 52 45 43 54  #.      # DIRECT
5a80: 4f 52 59 20 69 73 20 74 68 65 20 72 6f 6f 74 20  ORY is the root 
5a90: 6f 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 68  of the SQLite ch
5aa0: 65 63 6b 6f 75 74 2e 20 20 54 68 69 73 20 73 65  eckout.  This se
5ab0: 74 73 20 74 68 65 0a 20 20 20 20 20 20 23 20 53  ts the.      # S
5ac0: 52 43 44 49 52 20 67 6c 6f 62 61 6c 20 76 61 72  RCDIR global var
5ad0: 69 61 62 6c 65 2e 20 20 42 75 74 20 74 68 61 74  iable.  But that
5ae0: 20 76 61 72 69 61 62 6c 65 20 69 73 20 61 6c 72   variable is alr
5af0: 65 61 64 79 20 73 65 74 0a 20 20 20 20 20 20 23  eady set.      #
5b00: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73   automatically s
5b10: 6f 20 74 68 65 72 65 20 72 65 61 6c 6c 79 20 69  o there really i
5b20: 73 20 6e 6f 20 72 65 61 73 6f 6e 20 74 6f 20 68  s no reason to h
5b30: 61 76 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 2e  ave this option.
5b40: 0a 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 2d  .      #.      -
5b50: 73 72 63 64 69 72 20 7b 0a 20 20 20 20 20 20 20  srcdir {.       
5b60: 20 69 6e 63 72 20 69 0a 20 20 20 20 20 20 20 20   incr i.        
5b70: 73 65 74 20 3a 3a 53 52 43 44 49 52 20 5b 66 69  set ::SRCDIR [fi
5b80: 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 6c 69  le normalize [li
5b90: 6e 64 65 78 20 24 61 72 67 76 20 24 69 5d 5d 0a  ndex $argv $i]].
5ba0: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d        }..      -
5bb0: 70 6c 61 74 66 6f 72 6d 20 7b 0a 20 20 20 20 20  platform {.     
5bc0: 20 20 20 69 6e 63 72 20 69 0a 20 20 20 20 20 20     incr i.      
5bd0: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b    set platform [
5be0: 6c 69 6e 64 65 78 20 24 61 72 67 76 20 24 69 5d  lindex $argv $i]
5bf0: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
5c00: 2d 6a 6f 62 73 20 7b 0a 20 20 20 20 20 20 20 20  -jobs {.        
5c10: 69 6e 63 72 20 69 0a 20 20 20 20 20 20 20 20 73  incr i.        s
5c20: 65 74 20 3a 3a 4a 4f 42 53 20 5b 6c 69 6e 64 65  et ::JOBS [linde
5c30: 78 20 24 61 72 67 76 20 24 69 5d 0a 20 20 20 20  x $argv $i].    
5c40: 20 20 7d 0a 0a 20 20 20 20 20 20 2d 70 72 6f 67    }..      -prog
5c50: 72 65 73 73 20 7b 0a 20 20 20 20 20 20 20 20 73  ress {.        s
5c60: 65 74 20 3a 3a 50 52 4f 47 52 45 53 53 5f 4d 53  et ::PROGRESS_MS
5c70: 47 53 20 31 0a 20 20 20 20 20 20 7d 0a 0a 20 20  GS 1.      }..  
5c80: 20 20 20 20 2d 71 75 69 63 6b 20 7b 0a 20 20 20      -quick {.   
5c90: 20 20 20 20 20 73 65 74 20 3a 3a 51 55 49 43 4b       set ::QUICK
5ca0: 20 31 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   1.      }.     
5cb0: 20 2d 76 65 72 79 71 75 69 63 6b 20 7b 0a 20 20   -veryquick {.  
5cc0: 20 20 20 20 20 20 73 65 74 20 3a 3a 51 55 49 43        set ::QUIC
5cd0: 4b 20 32 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  K 2.      }..   
5ce0: 20 20 20 2d 63 6f 6e 66 69 67 20 7b 0a 20 20 20     -config {.   
5cf0: 20 20 20 20 20 69 6e 63 72 20 69 0a 20 20 20 20       incr i.    
5d00: 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67 20 5b      set config [
5d10: 6c 69 6e 64 65 78 20 24 61 72 67 76 20 24 69 5d  lindex $argv $i]
5d20: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
5d30: 2d 6d 73 76 63 20 7b 0a 20 20 20 20 20 20 20 20  -msvc {.        
5d40: 73 65 74 20 3a 3a 4d 53 56 43 20 31 0a 20 20 20  set ::MSVC 1.   
5d50: 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d 62 75 69     }..      -bui
5d60: 6c 64 6f 6e 6c 79 20 7b 0a 20 20 20 20 20 20 20  ldonly {.       
5d70: 20 73 65 74 20 3a 3a 42 55 49 4c 44 4f 4e 4c 59   set ::BUILDONLY
5d80: 20 31 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20   1.      }..    
5d90: 20 20 2d 64 72 79 72 75 6e 20 7b 0a 20 20 20 20    -dryrun {.    
5da0: 20 20 20 20 73 65 74 20 3a 3a 44 52 59 52 55 4e      set ::DRYRUN
5db0: 20 31 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20   1.      }..    
5dc0: 20 20 2d 66 6f 72 63 65 20 2d 0a 20 20 20 20 20    -force -.     
5dd0: 20 2d 66 20 7b 0a 20 20 20 20 20 20 20 20 73 65   -f {.        se
5de0: 74 20 3a 3a 46 4f 52 43 45 20 31 0a 20 20 20 20  t ::FORCE 1.    
5df0: 20 20 7d 0a 0a 20 20 20 20 20 20 2d 74 72 61 63    }..      -trac
5e00: 65 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  e {.        set 
5e10: 3a 3a 54 52 41 43 45 20 31 0a 20 20 20 20 20 20  ::TRACE 1.      
5e20: 7d 0a 0a 20 20 20 20 20 20 2d 69 6e 66 6f 20 7b  }..      -info {
5e30: 0a 20 20 20 20 20 20 20 20 50 55 54 53 20 22 43  .        PUTS "C
5e40: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 4f 70 74 69  ommand-line Opti
5e50: 6f 6e 73 3a 22 0a 20 20 20 20 20 20 20 20 50 55  ons:".        PU
5e60: 54 53 20 22 20 20 20 2d 2d 73 72 63 64 69 72 20  TS "   --srcdir 
5e70: 24 3a 3a 53 52 43 44 49 52 22 0a 20 20 20 20 20  $::SRCDIR".     
5e80: 20 20 20 50 55 54 53 20 22 20 20 20 2d 2d 70 6c     PUTS "   --pl
5e90: 61 74 66 6f 72 6d 20 5b 6c 69 73 74 20 24 70 6c  atform [list $pl
5ea0: 61 74 66 6f 72 6d 5d 22 0a 20 20 20 20 20 20 20  atform]".       
5eb0: 20 50 55 54 53 20 22 20 20 20 2d 2d 63 6f 6e 66   PUTS "   --conf
5ec0: 69 67 20 5b 6c 69 73 74 20 24 63 6f 6e 66 69 67  ig [list $config
5ed0: 5d 22 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24  ]".        if {$
5ee0: 3a 3a 51 55 49 43 4b 7d 20 7b 0a 20 20 20 20 20  ::QUICK} {.     
5ef0: 20 20 20 20 20 69 66 20 7b 24 3a 3a 51 55 49 43       if {$::QUIC
5f00: 4b 3d 3d 31 7d 20 7b 50 55 54 53 20 22 20 20 20  K==1} {PUTS "   
5f10: 2d 2d 71 75 69 63 6b 22 7d 0a 20 20 20 20 20 20  --quick"}.      
5f20: 20 20 20 20 69 66 20 7b 24 3a 3a 51 55 49 43 4b      if {$::QUICK
5f30: 3d 3d 32 7d 20 7b 50 55 54 53 20 22 20 20 20 2d  ==2} {PUTS "   -
5f40: 2d 76 65 72 79 71 75 69 63 6b 22 7d 0a 20 20 20  -veryquick"}.   
5f50: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
5f60: 66 20 7b 24 3a 3a 4d 53 56 43 7d 20 20 20 20 20  f {$::MSVC}     
5f70: 20 7b 50 55 54 53 20 22 20 20 20 2d 2d 6d 73 76   {PUTS "   --msv
5f80: 63 22 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  c"}.        if {
5f90: 24 3a 3a 42 55 49 4c 44 4f 4e 4c 59 7d 20 7b 50  $::BUILDONLY} {P
5fa0: 55 54 53 20 22 20 20 20 2d 2d 62 75 69 6c 64 6f  UTS "   --buildo
5fb0: 6e 6c 79 22 7d 0a 20 20 20 20 20 20 20 20 69 66  nly"}.        if
5fc0: 20 7b 24 3a 3a 44 52 59 52 55 4e 7d 20 20 20 20   {$::DRYRUN}    
5fd0: 7b 50 55 54 53 20 22 20 20 20 2d 2d 64 72 79 72  {PUTS "   --dryr
5fe0: 75 6e 22 7d 0a 20 20 20 20 20 20 20 20 69 66 20  un"}.        if 
5ff0: 7b 24 3a 3a 54 52 41 43 45 7d 20 20 20 20 20 7b  {$::TRACE}     {
6000: 50 55 54 53 20 22 20 20 20 2d 2d 74 72 61 63 65  PUTS "   --trace
6010: 22 7d 0a 20 20 20 20 20 20 20 20 50 55 54 53 20  "}.        PUTS 
6020: 22 5c 6e 41 76 61 69 6c 61 62 6c 65 20 2d 2d 70  "\nAvailable --p
6030: 6c 61 74 66 6f 72 6d 20 6f 70 74 69 6f 6e 73 3a  latform options:
6040: 22 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ".        foreac
6050: 68 20 79 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61  h y [lsort [arra
6060: 79 20 6e 61 6d 65 73 20 3a 3a 50 6c 61 74 66 6f  y names ::Platfo
6070: 72 6d 73 5d 5d 20 7b 0a 20 20 20 20 20 20 20 20  rms]] {.        
6080: 20 20 50 55 54 53 20 22 20 20 20 5b 6c 69 73 74    PUTS "   [list
6090: 20 24 79 5d 22 0a 20 20 20 20 20 20 20 20 7d 0a   $y]".        }.
60a0: 20 20 20 20 20 20 20 20 50 55 54 53 20 22 5c 6e          PUTS "\n
60b0: 41 76 61 69 6c 61 62 6c 65 20 2d 2d 63 6f 6e 66  Available --conf
60c0: 69 67 20 6f 70 74 69 6f 6e 73 3a 22 0a 20 20 20  ig options:".   
60d0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 79 20 5b       foreach y [
60e0: 6c 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61 6d  lsort [array nam
60f0: 65 73 20 3a 3a 43 6f 6e 66 69 67 73 5d 5d 20 7b  es ::Configs]] {
6100: 0a 20 20 20 20 20 20 20 20 20 20 50 55 54 53 20  .          PUTS 
6110: 22 20 20 20 5b 6c 69 73 74 20 24 79 5d 22 0a 20  "   [list $y]". 
6120: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
6130: 20 65 78 69 74 0a 20 20 20 20 20 20 7d 0a 0a 20   exit.      }.. 
6140: 20 20 20 20 20 2d 67 20 7b 0a 20 20 20 20 20 20       -g {.      
6150: 20 20 6c 61 70 70 65 6e 64 20 3a 3a 45 58 54 52    lappend ::EXTR
6160: 41 43 4f 4e 46 49 47 20 5b 6c 69 6e 64 65 78 20  ACONFIG [lindex 
6170: 24 61 72 67 76 20 24 69 5d 0a 20 20 20 20 20 20  $argv $i].      
6180: 7d 0a 0a 20 20 20 20 20 20 2d 6b 65 65 70 20 7b  }..      -keep {
6190: 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 4b  .        set ::K
61a0: 45 45 50 46 49 4c 45 53 20 31 0a 20 20 20 20 20  EEPFILES 1.     
61b0: 20 7d 0a 0a 20 20 20 20 20 20 2d 77 69 74 68 2d   }..      -with-
61c0: 74 63 6c 3d 2a 20 7b 0a 20 20 20 20 20 20 20 20  tcl=* {.        
61d0: 73 65 74 20 3a 3a 57 49 54 48 54 43 4c 20 2d 24  set ::WITHTCL -$
61e0: 78 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  x.      }..     
61f0: 20 2d 44 2a 20 2d 0a 20 20 20 20 20 20 2d 4f 2a   -D* -.      -O*
6200: 20 2d 0a 20 20 20 20 20 20 2d 65 6e 61 62 6c 65   -.      -enable
6210: 2d 2a 20 2d 0a 20 20 20 20 20 20 2d 64 69 73 61  -* -.      -disa
6220: 62 6c 65 2d 2a 20 2d 0a 20 20 20 20 20 20 2a 3d  ble-* -.      *=
6230: 2a 20 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70  * {.        lapp
6240: 65 6e 64 20 3a 3a 45 58 54 52 41 43 4f 4e 46 49  end ::EXTRACONFI
6250: 47 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20  G [lindex $argv 
6260: 24 69 5d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  $i].      }..   
6270: 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20     default {.   
6280: 20 20 20 20 20 50 55 54 53 45 52 52 20 22 22 0a       PUTSERR "".
6290: 20 20 20 20 20 20 20 20 50 55 54 53 45 52 52 20          PUTSERR 
62a0: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 3a 3a  [string trim $::
62b0: 55 53 41 47 45 5f 4d 45 53 53 41 47 45 5d 0a 20  USAGE_MESSAGE]. 
62c0: 20 20 20 20 20 20 20 65 78 69 74 20 2d 31 0a 20         exit -1. 
62d0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
62e0: 0a 0a 20 20 69 66 20 7b 30 3d 3d 5b 69 6e 66 6f  ..  if {0==[info
62f0: 20 65 78 69 73 74 73 20 3a 3a 50 6c 61 74 66 6f   exists ::Platfo
6300: 72 6d 73 28 24 70 6c 61 74 66 6f 72 6d 29 5d 7d  rms($platform)]}
6310: 20 7b 0a 20 20 20 20 50 55 54 53 20 22 55 6e 6b   {.    PUTS "Unk
6320: 6e 6f 77 6e 20 70 6c 61 74 66 6f 72 6d 3a 20 24  nown platform: $
6330: 70 6c 61 74 66 6f 72 6d 22 0a 20 20 20 20 50 55  platform".    PU
6340: 54 53 4e 4e 4c 20 22 53 65 74 20 74 68 65 20 2d  TSNNL "Set the -
6350: 70 6c 61 74 66 6f 72 6d 20 6f 70 74 69 6f 6e 20  platform option 
6360: 74 6f 20 22 0a 20 20 20 20 73 65 74 20 70 72 69  to ".    set pri
6370: 6e 74 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f  nt [list].    fo
6380: 72 65 61 63 68 20 70 20 5b 61 72 72 61 79 20 6e  reach p [array n
6390: 61 6d 65 73 20 3a 3a 50 6c 61 74 66 6f 72 6d 73  ames ::Platforms
63a0: 5d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e  ] {.      lappen
63b0: 64 20 70 72 69 6e 74 20 22 5c 22 24 70 5c 22 22  d print "\"$p\""
63c0: 0a 20 20 20 20 7d 0a 20 20 20 20 6c 73 65 74 20  .    }.    lset 
63d0: 70 72 69 6e 74 20 65 6e 64 20 22 6f 72 20 5b 6c  print end "or [l
63e0: 69 6e 64 65 78 20 24 70 72 69 6e 74 20 65 6e 64  index $print end
63f0: 5d 22 0a 20 20 20 20 50 55 54 53 20 22 5b 6a 6f  ]".    PUTS "[jo
6400: 69 6e 20 24 70 72 69 6e 74 20 7b 2c 20 7d 5d 2e  in $print {, }].
6410: 22 0a 20 20 20 20 65 78 69 74 0a 20 20 7d 0a 0a  ".    exit.  }..
6420: 20 20 69 66 20 7b 24 63 6f 6e 66 69 67 21 3d 22    if {$config!="
6430: 22 7d 20 7b 0a 20 20 20 20 69 66 20 7b 5b 6c 6c  "} {.    if {[ll
6440: 65 6e 67 74 68 20 24 63 6f 6e 66 69 67 5d 3d 3d  ength $config]==
6450: 31 7d 20 7b 6c 61 70 70 65 6e 64 20 63 6f 6e 66  1} {lappend conf
6460: 69 67 20 66 75 6c 6c 74 65 73 74 7d 0a 20 20 20  ig fulltest}.   
6470: 20 73 65 74 20 3a 3a 43 4f 4e 46 49 47 4c 49 53   set ::CONFIGLIS
6480: 54 20 24 63 6f 6e 66 69 67 0a 20 20 7d 20 65 6c  T $config.  } el
6490: 73 65 20 7b 0a 20 20 20 20 69 66 20 7b 24 3a 3a  se {.    if {$::
64a0: 4a 4f 42 53 3e 31 7d 20 7b 0a 20 20 20 20 20 20  JOBS>1} {.      
64b0: 73 65 74 20 3a 3a 43 4f 4e 46 49 47 4c 49 53 54  set ::CONFIGLIST
64c0: 20 7b 7d 0a 20 20 20 20 20 20 66 6f 72 65 61 63   {}.      foreac
64d0: 68 20 7b 74 61 72 67 65 74 20 7a 43 6f 6e 66 69  h {target zConfi
64e0: 67 7d 20 5b 6c 72 65 76 65 72 73 65 20 24 3a 3a  g} [lreverse $::
64f0: 50 6c 61 74 66 6f 72 6d 73 28 24 70 6c 61 74 66  Platforms($platf
6500: 6f 72 6d 29 5d 20 7b 0a 20 20 20 20 20 20 20 20  orm)] {.        
6510: 61 70 70 65 6e 64 20 3a 3a 43 4f 4e 46 49 47 4c  append ::CONFIGL
6520: 49 53 54 20 5b 66 6f 72 6d 61 74 20 22 20 20 20  IST [format "   
6530: 20 25 2d 32 35 73 20 25 73 5c 6e 22 20 5c 0a 20   %-25s %s\n" \. 
6540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c                [l
6560: 69 73 74 20 24 7a 43 6f 6e 66 69 67 5d 20 5b 6c  ist $zConfig] [l
6570: 69 73 74 20 24 74 61 72 67 65 74 5d 5d 0a 20 20  ist $target]].  
6580: 20 20 20 20 7d 0a 20 20 20 20 7d 20 65 6c 73 65      }.    } else
6590: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 43   {.      set ::C
65a0: 4f 4e 46 49 47 4c 49 53 54 20 24 3a 3a 50 6c 61  ONFIGLIST $::Pla
65b0: 74 66 6f 72 6d 73 28 24 70 6c 61 74 66 6f 72 6d  tforms($platform
65c0: 29 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 50 55  ).    }.  }.  PU
65d0: 54 53 20 22 52 75 6e 6e 69 6e 67 20 74 68 65 20  TS "Running the 
65e0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 20 63  following test c
65f0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 66 6f  onfigurations fo
6600: 72 20 24 70 6c 61 74 66 6f 72 6d 3a 22 0a 20 20  r $platform:".  
6610: 50 55 54 53 20 22 20 20 20 20 5b 73 74 72 69 6e  PUTS "    [strin
6620: 67 20 74 72 69 6d 20 24 3a 3a 43 4f 4e 46 49 47  g trim $::CONFIG
6630: 4c 49 53 54 5d 22 0a 20 20 50 55 54 53 4e 4e 4c  LIST]".  PUTSNNL
6640: 20 22 46 6c 61 67 73 3a 22 0a 20 20 69 66 20 7b   "Flags:".  if {
6650: 24 3a 3a 50 52 4f 47 52 45 53 53 5f 4d 53 47 53  $::PROGRESS_MSGS
6660: 7d 20 7b 50 55 54 53 4e 4e 4c 20 22 20 2d 2d 70  } {PUTSNNL " --p
6670: 72 6f 67 72 65 73 73 22 7d 0a 20 20 69 66 20 7b  rogress"}.  if {
6680: 24 3a 3a 44 52 59 52 55 4e 7d 20 7b 50 55 54 53  $::DRYRUN} {PUTS
6690: 4e 4e 4c 20 22 20 2d 2d 64 72 79 72 75 6e 22 7d  NNL " --dryrun"}
66a0: 0a 20 20 69 66 20 7b 24 3a 3a 42 55 49 4c 44 4f  .  if {$::BUILDO
66b0: 4e 4c 59 7d 20 7b 50 55 54 53 4e 4e 4c 20 22 20  NLY} {PUTSNNL " 
66c0: 2d 2d 62 75 69 6c 64 6f 6e 6c 79 22 7d 0a 20 20  --buildonly"}.  
66d0: 69 66 20 7b 24 3a 3a 4d 53 56 43 7d 20 7b 50 55  if {$::MSVC} {PU
66e0: 54 53 4e 4e 4c 20 22 20 2d 2d 6d 73 76 63 22 7d  TSNNL " --msvc"}
66f0: 0a 20 20 73 77 69 74 63 68 20 2d 2d 20 24 3a 3a  .  switch -- $::
6700: 51 55 49 43 4b 20 7b 0a 20 20 20 20 20 31 20 7b  QUICK {.     1 {
6710: 50 55 54 53 4e 4e 4c 20 22 20 2d 2d 71 75 69 63  PUTSNNL " --quic
6720: 6b 22 7d 0a 20 20 20 20 20 32 20 7b 50 55 54 53  k"}.     2 {PUTS
6730: 4e 4e 4c 20 22 20 2d 2d 76 65 72 79 71 75 69 63  NNL " --veryquic
6740: 6b 22 7d 0a 20 20 7d 0a 20 20 69 66 20 7b 24 3a  k"}.  }.  if {$:
6750: 3a 4a 4f 42 53 3e 31 7d 20 7b 50 55 54 53 4e 4e  :JOBS>1} {PUTSNN
6760: 4c 20 22 20 2d 2d 6a 6f 62 73 20 24 3a 3a 4a 4f  L " --jobs $::JO
6770: 42 53 22 7d 0a 20 20 50 55 54 53 20 22 22 0a 7d  BS"}.  PUTS "".}
6780: 0a 0a 23 20 43 68 65 63 6b 20 74 6f 20 73 65 65  ..# Check to see
6790: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 75 6e   if there are un
67a0: 63 6f 6d 6d 69 74 74 65 64 20 63 68 61 6e 67 65  committed change
67b0: 73 20 69 6e 20 74 68 65 20 53 51 4c 69 74 65 20  s in the SQLite 
67c0: 73 6f 75 72 63 65 0a 23 20 63 68 65 63 6b 6f 75  source.# checkou
67d0: 74 2e 20 20 45 78 69 74 20 69 66 20 74 68 65 72  t.  Exit if ther
67e0: 65 20 61 72 65 2e 20 20 45 78 63 65 70 74 3a 20  e are.  Except: 
67f0: 20 44 6f 20 6e 6f 74 68 69 6e 67 20 69 66 20 74   Do nothing if t
6800: 68 65 20 2d 2d 66 6f 72 63 65 0a 23 20 66 6c 61  he --force.# fla
6810: 67 20 69 73 20 75 73 65 64 2e 20 20 41 6c 73 6f  g is used.  Also
6820: 2c 20 69 67 6e 6f 72 65 20 74 68 69 73 20 74 65  , ignore this te
6830: 73 74 20 69 66 20 74 68 65 20 66 6f 73 73 69 6c  st if the fossil
6840: 20 62 69 6e 61 72 79 20 69 73 0a 23 20 75 6e 61   binary is.# una
6850: 76 61 69 6c 61 62 6c 65 2c 20 6f 72 20 69 66 20  vailable, or if 
6860: 74 68 65 20 73 6f 75 72 63 65 20 74 72 65 65 20  the source tree 
6870: 69 73 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 66  is not a valid f
6880: 6f 73 73 69 6c 20 63 68 65 63 6b 6f 75 74 2e 0a  ossil checkout..
6890: 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 75 6e 63  #.proc check_unc
68a0: 6f 6d 6d 69 74 74 65 64 20 7b 7d 20 7b 0a 20 20  ommitted {} {.  
68b0: 69 66 20 7b 24 3a 3a 46 4f 52 43 45 7d 20 72 65  if {$::FORCE} re
68c0: 74 75 72 6e 0a 20 20 73 65 74 20 70 77 64 20 5b  turn.  set pwd [
68d0: 70 77 64 5d 0a 20 20 63 64 20 24 3a 3a 53 52 43  pwd].  cd $::SRC
68e0: 44 49 52 0a 20 20 69 66 20 7b 5b 63 61 74 63 68  DIR.  if {[catch
68f0: 20 7b 65 78 65 63 20 66 6f 73 73 69 6c 20 63 68   {exec fossil ch
6900: 61 6e 67 65 73 7d 20 72 65 73 5d 3d 3d 30 20 26  anges} res]==0 &
6910: 26 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24  & [string trim $
6920: 72 65 73 5d 21 3d 22 22 7d 20 7b 0a 20 20 20 20  res]!=""} {.    
6930: 70 75 74 73 20 22 45 52 52 4f 52 3a 20 54 68 65  puts "ERROR: The
6940: 20 63 68 65 63 6b 2d 6f 75 74 20 63 6f 6e 74 61   check-out conta
6950: 69 6e 73 20 75 6e 63 6f 6d 6d 69 74 74 65 64 20  ins uncommitted 
6960: 63 68 61 6e 67 65 73 3a 22 0a 20 20 20 20 70 75  changes:".    pu
6970: 74 73 20 24 72 65 73 0a 20 20 20 20 70 75 74 73  ts $res.    puts
6980: 20 22 55 73 65 20 74 68 65 20 2d 66 20 6f 72 20   "Use the -f or 
6990: 2d 2d 66 6f 72 63 65 20 6f 70 74 69 6f 6e 73 20  --force options 
69a0: 74 6f 20 6f 76 65 72 72 69 64 65 22 0a 20 20 20  to override".   
69b0: 20 65 78 69 74 20 31 0a 20 20 7d 0a 20 20 63 64   exit 1.  }.  cd
69c0: 20 24 70 77 64 0a 7d 0a 0a 23 20 41 20 74 65 73   $pwd.}..# A tes
69d0: 74 20 72 75 6e 20 68 61 73 20 6a 75 73 74 20 66  t run has just f
69e0: 69 6e 69 73 68 65 64 20 69 6e 20 64 69 72 65 63  inished in direc
69f0: 74 6f 72 79 20 24 64 69 72 2e 20 54 68 69 73 20  tory $dir. This 
6a00: 63 6f 6d 6d 61 6e 64 20 64 65 6c 65 74 65 73 20  command deletes 
6a10: 61 6c 6c 0a 23 20 6e 6f 6e 2d 65 73 73 65 6e 74  all.# non-essent
6a20: 69 61 6c 20 66 69 6c 65 73 20 66 72 6f 6d 20 74  ial files from t
6a30: 68 65 20 64 69 72 65 63 74 6f 72 79 2e 20 53 70  he directory. Sp
6a40: 65 63 69 66 69 63 61 6c 6c 79 2c 20 65 76 65 72  ecifically, ever
6a50: 79 74 68 69 6e 67 20 65 78 63 65 70 74 0a 23 0a  ything except.#.
6a60: 23 20 20 20 2a 20 54 68 65 20 22 74 65 73 74 66  #   * The "testf
6a70: 69 78 74 75 72 65 22 20 61 6e 64 20 22 73 71 6c  ixture" and "sql
6a80: 69 74 65 33 22 20 62 69 6e 61 72 69 65 73 2c 0a  ite3" binaries,.
6a90: 23 20 20 20 2a 20 54 68 65 20 22 74 65 73 74 2d  #   * The "test-
6aa0: 6f 75 74 2e 6c 6f 67 22 20 61 6e 64 20 22 74 65  out.log" and "te
6ab0: 73 74 2e 6c 6f 67 22 20 6c 6f 67 20 66 69 6c 65  st.log" log file
6ac0: 73 2e 0a 23 0a 70 72 6f 63 20 63 6c 65 61 6e 75  s..#.proc cleanu
6ad0: 70 20 7b 64 69 72 7d 20 7b 0a 20 20 73 65 74 20  p {dir} {.  set 
6ae0: 4b 28 74 65 73 74 66 69 78 74 75 72 65 29 20 31  K(testfixture) 1
6af0: 0a 20 20 73 65 74 20 4b 28 74 65 73 74 66 69 78  .  set K(testfix
6b00: 74 75 72 65 2e 65 78 65 29 20 31 0a 20 20 73 65  ture.exe) 1.  se
6b10: 74 20 4b 28 73 71 6c 69 74 65 33 29 20 31 0a 20  t K(sqlite3) 1. 
6b20: 20 73 65 74 20 4b 28 73 71 6c 69 74 65 33 2e 65   set K(sqlite3.e
6b30: 78 65 29 20 31 0a 20 20 73 65 74 20 4b 28 74 65  xe) 1.  set K(te
6b40: 73 74 2d 6f 75 74 2e 74 78 74 29 20 31 0a 20 20  st-out.txt) 1.  
6b50: 73 65 74 20 4b 28 74 65 73 74 2e 6c 6f 67 29 20  set K(test.log) 
6b60: 31 0a 0a 20 20 66 6f 72 65 61 63 68 20 66 20 5b  1..  foreach f [
6b70: 67 6c 6f 62 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  glob -nocomplain
6b80: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72   [file join $dir
6b90: 20 2a 5d 5d 20 7b 0a 20 20 20 20 73 65 74 20 74   *]] {.    set t
6ba0: 61 69 6c 20 5b 66 69 6c 65 20 74 61 69 6c 20 24  ail [file tail $
6bb0: 66 5d 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  f].    if {[info
6bc0: 20 65 78 69 73 74 73 20 4b 28 24 74 61 69 6c 29   exists K($tail)
6bd0: 5d 3d 3d 30 7d 20 7b 20 0a 20 20 20 20 20 20 66  ]==0} { .      f
6be0: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
6bf0: 65 20 24 66 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  e $f.    }.  }.}
6c00: 0a 0a 0a 23 20 4d 61 69 6e 20 72 6f 75 74 69 6e  ...# Main routin
6c10: 65 2e 0a 23 0a 70 72 6f 63 20 6d 61 69 6e 20 7b  e..#.proc main {
6c20: 61 72 67 76 7d 20 7b 0a 0a 20 20 23 20 50 72 6f  argv} {..  # Pro
6c30: 63 65 73 73 20 61 6e 79 20 63 6f 6d 6d 61 6e 64  cess any command
6c40: 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 2e 0a 20   line options.. 
6c50: 20 73 65 74 20 3a 3a 45 58 54 52 41 43 4f 4e 46   set ::EXTRACONF
6c60: 49 47 20 7b 7d 0a 20 20 70 72 6f 63 65 73 73 5f  IG {}.  process_
6c70: 6f 70 74 69 6f 6e 73 20 24 61 72 67 76 0a 20 20  options $argv.  
6c80: 69 66 20 7b 21 24 3a 3a 44 52 59 52 55 4e 7d 20  if {!$::DRYRUN} 
6c90: 63 68 65 63 6b 5f 75 6e 63 6f 6d 6d 69 74 74 65  check_uncommitte
6ca0: 64 0a 20 20 50 55 54 53 20 5b 73 74 72 69 6e 67  d.  PUTS [string
6cb0: 20 72 65 70 65 61 74 20 2a 20 37 39 5d 0a 0a 20   repeat * 79].. 
6cc0: 20 73 65 74 20 3a 3a 4e 45 52 52 20 30 0a 20 20   set ::NERR 0.  
6cd0: 73 65 74 20 3a 3a 4e 54 45 53 54 20 30 0a 20 20  set ::NTEST 0.  
6ce0: 73 65 74 20 3a 3a 4e 54 45 53 54 43 41 53 45 20  set ::NTESTCASE 
6cf0: 30 0a 20 20 73 65 74 20 3a 3a 4e 45 52 52 43 41  0.  set ::NERRCA
6d00: 53 45 20 30 0a 20 20 73 65 74 20 3a 3a 53 51 4c  SE 0.  set ::SQL
6d10: 49 54 45 5f 56 45 52 53 49 4f 4e 20 7b 7d 0a 20  ITE_VERSION {}. 
6d20: 20 73 65 74 20 53 54 41 52 54 54 49 4d 45 20 5b   set STARTTIME [
6d30: 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 20  clock seconds]. 
6d40: 20 66 6f 72 65 61 63 68 20 7b 7a 43 6f 6e 66 69   foreach {zConfi
6d50: 67 20 74 61 72 67 65 74 7d 20 24 3a 3a 43 4f 4e  g target} $::CON
6d60: 46 49 47 4c 49 53 54 20 7b 0a 20 20 20 20 69 66  FIGLIST {.    if
6d70: 20 7b 24 3a 3a 4d 53 56 43 20 26 26 20 28 24 7a   {$::MSVC && ($z
6d80: 43 6f 6e 66 69 67 20 65 71 20 22 53 61 6e 69 74  Config eq "Sanit
6d90: 69 7a 65 22 20 7c 7c 20 22 63 68 65 63 6b 73 79  ize" || "checksy
6da0: 6d 62 6f 6c 73 22 20 69 6e 20 24 74 61 72 67 65  mbols" in $targe
6db0: 74 0a 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20  t.           || 
6dc0: 22 76 61 6c 67 72 69 6e 64 74 65 73 74 22 20 69  "valgrindtest" i
6dd0: 6e 20 24 74 61 72 67 65 74 29 7d 20 7b 0a 20 20  n $target)} {.  
6de0: 20 20 20 20 50 55 54 53 20 22 53 6b 69 70 70 69      PUTS "Skippi
6df0: 6e 67 20 24 7a 43 6f 6e 66 69 67 20 2f 20 24 74  ng $zConfig / $t
6e00: 61 72 67 65 74 20 66 6f 72 20 4d 53 56 43 2e 2e  arget for MSVC..
6e10: 2e 22 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75  .".      continu
6e20: 65 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b  e.    }.    if {
6e30: 24 74 61 72 67 65 74 20 6e 65 20 22 63 68 65 63  $target ne "chec
6e40: 6b 73 79 6d 62 6f 6c 73 22 7d 20 7b 0a 20 20 20  ksymbols"} {.   
6e50: 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 3a 3a     switch -- $::
6e60: 51 55 49 43 4b 20 7b 0a 20 20 20 20 20 20 20 20  QUICK {.        
6e70: 20 31 20 7b 73 65 74 20 74 61 72 67 65 74 20 71   1 {set target q
6e80: 75 69 63 6b 74 65 73 74 7d 0a 20 20 20 20 20 20  uicktest}.      
6e90: 20 20 20 32 20 7b 73 65 74 20 74 61 72 67 65 74     2 {set target
6ea0: 20 73 6d 6f 6b 65 74 65 73 74 7d 0a 20 20 20 20   smoketest}.    
6eb0: 20 20 7d 0a 20 20 20 20 20 20 69 66 20 7b 24 3a    }.      if {$:
6ec0: 3a 42 55 49 4c 44 4f 4e 4c 59 7d 20 7b 0a 20 20  :BUILDONLY} {.  
6ed0: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74        set target
6ee0: 20 74 65 73 74 66 69 78 74 75 72 65 0a 20 20 20   testfixture.   
6ef0: 20 20 20 20 20 69 66 20 7b 24 3a 3a 74 63 6c 5f       if {$::tcl_
6f00: 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72  platform(platfor
6f10: 6d 29 3d 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b  m)=="windows"} {
6f20: 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e  .          appen
6f30: 64 20 74 61 72 67 65 74 20 2e 65 78 65 0a 20 20  d target .exe.  
6f40: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
6f50: 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 63 6f      }.    set co
6f60: 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 20 5b 63 6f  nfig_options [co
6f70: 6e 63 61 74 20 24 3a 3a 43 6f 6e 66 69 67 73 28  ncat $::Configs(
6f80: 24 7a 43 6f 6e 66 69 67 29 20 24 3a 3a 45 58 54  $zConfig) $::EXT
6f90: 52 41 43 4f 4e 46 49 47 5d 0a 0a 20 20 20 20 69  RACONFIG]..    i
6fa0: 6e 63 72 20 4e 54 45 53 54 0a 20 20 20 20 61 64  ncr NTEST.    ad
6fb0: 64 5f 74 65 73 74 5f 73 75 69 74 65 20 61 6c 6c  d_test_suite all
6fc0: 20 24 7a 43 6f 6e 66 69 67 20 24 74 61 72 67 65   $zConfig $targe
6fd0: 74 20 24 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e  t $config_option
6fe0: 73 0a 0a 20 20 20 20 23 20 49 66 20 74 68 65 20  s..    # If the 
6ff0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e  configuration in
7000: 63 6c 75 64 65 64 20 74 68 65 20 53 51 4c 49 54  cluded the SQLIT
7010: 45 5f 44 45 42 55 47 20 6f 70 74 69 6f 6e 2c 20  E_DEBUG option, 
7020: 74 68 65 6e 20 72 65 6d 6f 76 65 0a 20 20 20 20  then remove.    
7030: 23 20 69 74 20 61 6e 64 20 72 75 6e 20 76 65 72  # it and run ver
7040: 79 71 75 69 63 6b 2e 74 65 73 74 2e 20 49 66 20  yquick.test. If 
7050: 69 74 20 64 69 64 20 6e 6f 74 20 69 6e 63 6c 75  it did not inclu
7060: 64 65 20 74 68 65 20 53 51 4c 49 54 45 5f 44 45  de the SQLITE_DE
7070: 42 55 47 20 6f 70 74 69 6f 6e 0a 20 20 20 20 23  BUG option.    #
7080: 20 61 64 64 20 69 74 20 61 6e 64 20 72 75 6e 20   add it and run 
7090: 76 65 72 79 71 75 69 63 6b 2e 74 65 73 74 2e 0a  veryquick.test..
70a0: 20 20 20 20 69 66 20 7b 24 74 61 72 67 65 74 21      if {$target!
70b0: 3d 22 63 68 65 63 6b 73 79 6d 62 6f 6c 73 22 20  ="checksymbols" 
70c0: 26 26 20 24 74 61 72 67 65 74 21 3d 22 76 61 6c  && $target!="val
70d0: 67 72 69 6e 64 74 65 73 74 22 0a 20 20 20 20 20  grindtest".     
70e0: 20 20 20 20 20 20 26 26 20 24 74 61 72 67 65 74        && $target
70f0: 21 3d 22 66 75 7a 7a 6f 6f 6d 74 65 73 74 22 20  !="fuzzoomtest" 
7100: 26 26 20 21 24 3a 3a 42 55 49 4c 44 4f 4e 4c 59  && !$::BUILDONLY
7110: 20 26 26 20 24 3a 3a 51 55 49 43 4b 3c 32 7d 20   && $::QUICK<2} 
7120: 7b 0a 20 20 20 20 20 20 73 65 74 20 64 65 62 75  {.      set debu
7130: 67 5f 69 64 78 20 5b 6c 73 65 61 72 63 68 20 2d  g_idx [lsearch -
7140: 67 6c 6f 62 20 24 63 6f 6e 66 69 67 5f 6f 70 74  glob $config_opt
7150: 69 6f 6e 73 20 2d 44 53 51 4c 49 54 45 5f 44 45  ions -DSQLITE_DE
7160: 42 55 47 2a 5d 0a 20 20 20 20 20 20 73 65 74 20  BUG*].      set 
7170: 78 74 61 72 67 65 74 20 24 74 61 72 67 65 74 0a  xtarget $target.
7180: 20 20 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c        regsub -al
7190: 6c 20 7b 66 75 6c 6c 74 65 73 74 5b 61 2d 7a 5d  l {fulltest[a-z]
71a0: 2a 7d 20 24 78 74 61 72 67 65 74 20 74 65 73 74  *} $xtarget test
71b0: 20 78 74 61 72 67 65 74 0a 20 20 20 20 20 20 72   xtarget.      r
71c0: 65 67 73 75 62 20 2d 61 6c 6c 20 7b 66 75 7a 7a  egsub -all {fuzz
71d0: 6f 6f 6d 74 65 73 74 7d 20 24 78 74 61 72 67 65  oomtest} $xtarge
71e0: 74 20 66 75 7a 7a 74 65 73 74 20 78 74 61 72 67  t fuzztest xtarg
71f0: 65 74 0a 20 20 20 20 20 20 69 66 20 7b 24 64 65  et.      if {$de
7200: 62 75 67 5f 69 64 78 20 3c 20 30 7d 20 7b 0a 20  bug_idx < 0} {. 
7210: 20 20 20 20 20 20 20 69 6e 63 72 20 4e 54 45 53         incr NTES
7220: 54 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  T.        append
7230: 20 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 20   config_options 
7240: 22 20 2d 44 53 51 4c 49 54 45 5f 44 45 42 55 47  " -DSQLITE_DEBUG
7250: 3d 31 20 2d 44 53 51 4c 49 54 45 5f 45 58 54 52  =1 -DSQLITE_EXTR
7260: 41 5f 49 46 4e 55 4c 4c 52 4f 57 3d 31 22 0a 20  A_IFNULLROW=1". 
7270: 20 20 20 20 20 20 20 61 64 64 5f 74 65 73 74 5f         add_test_
7280: 73 75 69 74 65 20 61 6c 6c 20 22 24 7b 7a 43 6f  suite all "${zCo
7290: 6e 66 69 67 7d 5f 64 65 62 75 67 22 20 24 78 74  nfig}_debug" $xt
72a0: 61 72 67 65 74 20 24 63 6f 6e 66 69 67 5f 6f 70  arget $config_op
72b0: 74 69 6f 6e 73 0a 20 20 20 20 20 20 7d 20 65 6c  tions.      } el
72c0: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 63  se {.        inc
72d0: 72 20 4e 54 45 53 54 0a 20 20 20 20 20 20 20 20  r NTEST.        
72e0: 72 65 67 73 75 62 20 7b 20 2a 2d 44 53 51 4c 49  regsub { *-DSQLI
72f0: 54 45 5f 4d 45 4d 44 45 42 55 47 5b 5e 20 5d 2a  TE_MEMDEBUG[^ ]*
7300: 20 2a 7d 20 24 63 6f 6e 66 69 67 5f 6f 70 74 69   *} $config_opti
7310: 6f 6e 73 20 7b 20 7d 20 63 6f 6e 66 69 67 5f 6f  ons { } config_o
7320: 70 74 69 6f 6e 73 0a 20 20 20 20 20 20 20 20 72  ptions.        r
7330: 65 67 73 75 62 20 7b 20 2a 2d 44 53 51 4c 49 54  egsub { *-DSQLIT
7340: 45 5f 44 45 42 55 47 5b 5e 20 5d 2a 20 2a 7d 20  E_DEBUG[^ ]* *} 
7350: 24 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 20  $config_options 
7360: 7b 20 7d 20 63 6f 6e 66 69 67 5f 6f 70 74 69 6f  { } config_optio
7370: 6e 73 0a 20 20 20 20 20 20 20 20 61 64 64 5f 74  ns.        add_t
7380: 65 73 74 5f 73 75 69 74 65 20 61 6c 6c 20 22 24  est_suite all "$
7390: 7b 7a 43 6f 6e 66 69 67 7d 5f 6e 64 65 62 75 67  {zConfig}_ndebug
73a0: 22 20 24 78 74 61 72 67 65 74 20 24 63 6f 6e 66  " $xtarget $conf
73b0: 69 67 5f 6f 70 74 69 6f 6e 73 0a 20 20 20 20 20  ig_options.     
73c0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20   }.    }.  }..  
73d0: 72 75 6e 5f 61 6c 6c 5f 74 65 73 74 5f 73 75 69  run_all_test_sui
73e0: 74 65 73 20 24 61 6c 6c 0a 0a 20 20 73 65 74 20  tes $all..  set 
73f0: 65 6c 61 70 73 65 74 69 6d 65 20 5b 65 78 70 72  elapsetime [expr
7400: 20 7b 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73   {[clock seconds
7410: 5d 2d 24 53 54 41 52 54 54 49 4d 45 7d 5d 0a 20  ]-$STARTTIME}]. 
7420: 20 73 65 74 20 68 72 20 5b 65 78 70 72 20 7b 24   set hr [expr {$
7430: 65 6c 61 70 73 65 74 69 6d 65 2f 33 36 30 30 7d  elapsetime/3600}
7440: 5d 0a 20 20 73 65 74 20 6d 69 6e 20 5b 65 78 70  ].  set min [exp
7450: 72 20 7b 28 24 65 6c 61 70 73 65 74 69 6d 65 2f  r {($elapsetime/
7460: 36 30 29 25 36 30 7d 5d 0a 20 20 73 65 74 20 73  60)%60}].  set s
7470: 65 63 20 5b 65 78 70 72 20 7b 24 65 6c 61 70 73  ec [expr {$elaps
7480: 65 74 69 6d 65 25 36 30 7d 5d 0a 20 20 73 65 74  etime%60}].  set
7490: 20 65 74 69 6d 65 20 5b 66 6f 72 6d 61 74 20 28   etime [format (
74a0: 25 30 32 64 3a 25 30 32 64 3a 25 30 32 64 29 20  %02d:%02d:%02d) 
74b0: 24 68 72 20 24 6d 69 6e 20 24 73 65 63 5d 0a 20  $hr $min $sec]. 
74c0: 20 69 66 20 7b 24 3a 3a 4a 4f 42 53 3e 31 7d 20   if {$::JOBS>1} 
74d0: 7b 61 70 70 65 6e 64 20 65 74 69 6d 65 20 22 20  {append etime " 
74e0: 24 3a 3a 4a 4f 42 53 20 63 6f 72 65 73 22 7d 0a  $::JOBS cores"}.
74f0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78    if {[catch {ex
7500: 65 63 20 68 6f 73 74 6e 61 6d 65 7d 20 48 4e 41  ec hostname} HNA
7510: 4d 45 5d 3d 3d 30 7d 20 7b 61 70 70 65 6e 64 20  ME]==0} {append 
7520: 65 74 69 6d 65 20 22 20 6f 6e 20 24 48 4e 41 4d  etime " on $HNAM
7530: 45 22 7d 0a 20 20 50 55 54 53 20 5b 73 74 72 69  E"}.  PUTS [stri
7540: 6e 67 20 72 65 70 65 61 74 20 2a 20 37 39 5d 0a  ng repeat * 79].
7550: 20 20 69 6e 63 72 20 3a 3a 4e 45 52 52 43 41 53    incr ::NERRCAS
7560: 45 20 24 3a 3a 4e 45 52 52 0a 20 20 50 55 54 53  E $::NERR.  PUTS
7570: 20 22 24 3a 3a 4e 45 52 52 43 41 53 45 20 66 61   "$::NERRCASE fa
7580: 69 6c 75 72 65 73 20 6f 75 74 20 6f 66 20 24 3a  ilures out of $:
7590: 3a 4e 54 45 53 54 43 41 53 45 20 74 65 73 74 73  :NTESTCASE tests
75a0: 20 69 6e 20 24 65 74 69 6d 65 22 0a 20 20 69 66   in $etime".  if
75b0: 20 7b 24 3a 3a 53 51 4c 49 54 45 5f 56 45 52 53   {$::SQLITE_VERS
75c0: 49 4f 4e 20 6e 65 20 22 22 7d 20 7b 0a 20 20 20  ION ne ""} {.   
75d0: 20 50 55 54 53 20 22 53 51 4c 69 74 65 20 24 3a   PUTS "SQLite $:
75e0: 3a 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 22  :SQLITE_VERSION"
75f0: 0a 20 20 7d 0a 7d 0a 0a 6d 61 69 6e 20 24 61 72  .  }.}..main $ar
7600: 67 76 0a                                         gv.