/ Hex Artifact Content
Login

Artifact b290d538ffcb2ff711f09eadc7396c1a42580f3fb078605471dc8875ca0b4d1e:


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