/ Hex Artifact Content
Login

Artifact 6aaa853f7a7bbdc458d4cb42c0425228729b0f3e5769e9b41088c08eee999a49:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 74 63 6c 73 68  #!/usr/bin/tclsh
0010: 0a 23 0a 23 20 44 6f 63 75 6d 65 6e 74 61 74 69  .#.# Documentati
0020: 6f 6e 20 66 6f 72 20 74 68 69 73 20 73 63 72 69  on for this scri
0030: 70 74 2e 20 54 68 69 73 20 6d 61 79 20 62 65 20  pt. This may be 
0040: 6f 75 74 70 75 74 20 74 6f 20 73 74 64 65 72 72  output to stderr
0050: 0a 23 20 69 66 20 74 68 65 20 73 63 72 69 70 74  .# if the script
0060: 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 6e 63 6f   is invoked inco
0070: 72 72 65 63 74 6c 79 2e 20 53 65 65 20 74 68 65  rrectly. See the
0080: 20 5b 70 72 6f 63 65 73 73 5f 6f 70 74 69 6f 6e   [process_option
0090: 73 5d 0a 23 20 70 72 6f 63 20 62 65 6c 6f 77 2e  s].# proc below.
00a0: 0a 23 0a 73 65 74 20 3a 3a 55 53 41 47 45 5f 4d  .#.set ::USAGE_M
00b0: 45 53 53 41 47 45 20 7b 0a 54 68 69 73 20 54 63  ESSAGE {.This Tc
00c0: 6c 20 73 63 72 69 70 74 20 69 73 20 75 73 65 64  l script is used
00d0: 20 74 6f 20 74 65 73 74 20 74 68 65 20 76 61 72   to test the var
00e0: 69 6f 75 73 20 63 6f 6e 66 69 67 75 72 61 74 69  ious configurati
00f0: 6f 6e 73 20 72 65 71 75 69 72 65 64 0a 62 65 66  ons required.bef
0100: 6f 72 65 20 72 65 6c 65 61 73 69 6e 67 20 61 20  ore releasing a 
0110: 6e 65 77 20 76 65 72 73 69 6f 6e 2e 20 53 75 70  new version. Sup
0120: 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
0130: 69 6e 65 20 6f 70 74 69 6f 6e 73 20 28 61 6c 6c  ine options (all
0140: 0a 6f 70 74 69 6f 6e 61 6c 29 20 61 72 65 3a 0a  .optional) are:.
0150: 0a 20 20 20 20 2d 2d 62 75 69 6c 64 6f 6e 6c 79  .    --buildonly
0160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0170: 20 20 20 20 20 20 20 20 28 4a 75 73 74 20 62 75          (Just bu
0180: 69 6c 64 20 74 65 73 74 66 69 78 74 75 72 65 20  ild testfixture 
0190: 2d 20 64 6f 20 6e 6f 74 20 72 75 6e 29 0a 20 20  - do not run).  
01a0: 20 20 2d 2d 63 6f 6e 66 69 67 20 20 20 43 4f 4e    --config   CON
01b0: 46 49 47 4e 41 4d 45 20 20 20 20 20 20 20 20 20  FIGNAME         
01c0: 20 20 20 20 20 28 52 75 6e 20 6f 6e 6c 79 20 43       (Run only C
01d0: 4f 4e 46 49 47 4e 41 4d 45 29 0a 20 20 20 20 2d  ONFIGNAME).    -
01e0: 2d 64 72 79 72 75 6e 20 20 20 20 20 20 20 20 20  -dryrun         
01f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0200: 20 20 28 50 72 69 6e 74 20 77 68 61 74 20 77 6f    (Print what wo
0210: 75 6c 64 20 68 61 76 65 20 68 61 70 70 65 6e 65  uld have happene
0220: 64 29 0a 20 20 20 20 2d 66 7c 2d 2d 66 6f 72 63  d).    -f|--forc
0230: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
0240: 20 20 20 20 20 20 20 20 20 20 28 52 75 6e 20 65            (Run e
0250: 76 65 6e 20 69 66 20 75 6e 63 6f 6d 6d 69 74 74  ven if uncommitt
0260: 65 64 20 63 68 61 6e 67 65 73 29 0a 20 20 20 20  ed changes).    
0270: 2d 2d 69 6e 66 6f 20 20 20 20 20 20 20 20 20 20  --info          
0280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0290: 20 20 20 28 53 68 6f 77 20 64 69 61 67 6e 6f 73     (Show diagnos
02a0: 74 69 63 20 69 6e 66 6f 29 0a 20 20 20 20 2d 2d  tic info).    --
02b0: 6a 6f 62 73 20 20 20 20 20 4e 20 20 20 20 20 20  jobs     N      
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02d0: 20 28 55 73 65 20 4e 20 70 72 6f 63 65 73 73 65   (Use N processe
02e0: 73 20 2d 20 64 65 66 61 75 6c 74 20 31 29 0a 20  s - default 1). 
02f0: 20 20 20 2d 2d 6b 65 65 70 20 20 20 20 20 20 20     --keep       
0300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0310: 20 20 20 20 20 20 28 44 65 6c 65 74 65 20 6e 6f        (Delete no
0320: 20 66 69 6c 65 73 20 61 66 74 65 72 20 65 61 63   files after eac
0330: 68 20 74 65 73 74 20 72 75 6e 29 0a 20 20 20 20  h test run).    
0340: 2d 2d 6d 73 76 63 20 20 20 20 20 20 20 20 20 20  --msvc          
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0360: 20 20 20 28 55 73 65 20 4d 53 56 43 20 61 73 20     (Use MSVC as 
0370: 74 68 65 20 63 6f 6d 70 69 6c 65 72 29 0a 20 20  the compiler).  
0380: 20 20 2d 2d 70 6c 61 74 66 6f 72 6d 20 50 4c 41    --platform PLA
0390: 54 46 4f 52 4d 20 20 20 20 20 20 20 20 20 20 20  TFORM           
03a0: 20 20 20 20 20 28 73 65 65 20 62 65 6c 6f 77 29       (see below)
03b0: 0a 20 20 20 20 2d 2d 70 72 6f 67 72 65 73 73 20  .    --progress 
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 20 20 28 53 68 6f 77 20 70 72          (Show pr
03e0: 6f 67 72 65 73 73 20 6d 65 73 73 61 67 65 73 29  ogress messages)
03f0: 0a 20 20 20 20 2d 2d 71 75 69 63 6b 20 20 20 20  .    --quick    
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0410: 20 20 20 20 20 20 20 20 28 52 75 6e 20 22 76 65          (Run "ve
0420: 72 79 71 75 69 63 6b 2e 74 65 73 74 22 20 6f 6e  ryquick.test" on
0430: 6c 79 29 0a 20 20 20 20 2d 2d 76 65 72 79 71 75  ly).    --veryqu
0440: 69 63 6b 20 20 20 20 20 20 20 20 20 20 20 20 20  ick             
0450: 20 20 20 20 20 20 20 20 20 20 20 28 52 75 6e 20             (Run 
0460: 22 6d 61 6b 65 20 73 6d 6f 6b 65 74 65 73 74 22  "make smoketest"
0470: 20 6f 6e 6c 79 29 0a 20 20 20 20 2d 2d 77 69 74   only).    --wit
0480: 68 2d 74 63 6c 3d 44 49 52 20 20 20 20 20 20 20  h-tcl=DIR       
0490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 55                (U
04a0: 73 65 20 54 43 4c 20 62 75 69 6c 64 20 61 74 20  se TCL build at 
04b0: 44 49 52 29 0a 0a 54 68 65 20 73 63 72 69 70 74  DIR)..The script
04c0: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
04d0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
04e0: 72 20 2d 2d 70 6c 61 74 66 6f 72 6d 20 75 73 69  r --platform usi
04f0: 6e 67 20 74 68 65 0a 24 74 63 6c 5f 70 6c 61 74  ng the.$tcl_plat
0500: 66 6f 72 6d 28 6f 73 29 20 61 6e 64 20 24 74 63  form(os) and $tc
0510: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69  l_platform(machi
0520: 6e 65 29 20 76 61 72 69 61 62 6c 65 73 2e 20 20  ne) variables.  
0530: 53 75 70 70 6f 72 74 65 64 0a 70 6c 61 74 66 6f  Supported.platfo
0540: 72 6d 73 20 61 72 65 20 22 4c 69 6e 75 78 2d 78  rms are "Linux-x
0550: 38 36 22 2c 20 22 4c 69 6e 75 78 2d 78 38 36 5f  86", "Linux-x86_
0560: 36 34 22 2c 20 22 44 61 72 77 69 6e 2d 69 33 38  64", "Darwin-i38
0570: 36 22 2c 0a 22 44 61 72 77 69 6e 2d 78 38 36 5f  6",."Darwin-x86_
0580: 36 34 22 2c 20 22 57 69 6e 64 6f 77 73 20 4e 54  64", "Windows NT
0590: 2d 69 6e 74 65 6c 22 2c 20 61 6e 64 20 22 57 69  -intel", and "Wi
05a0: 6e 64 6f 77 73 20 4e 54 2d 61 6d 64 36 34 22 2e  ndows NT-amd64".
05b0: 0a 0a 45 76 65 72 79 20 74 65 73 74 20 62 65 67  ..Every test beg
05c0: 69 6e 73 20 77 69 74 68 20 61 20 66 72 65 73 68  ins with a fresh
05d0: 20 72 75 6e 20 6f 66 20 74 68 65 20 63 6f 6e 66   run of the conf
05e0: 69 67 75 72 65 20 73 63 72 69 70 74 20 61 74 20  igure script at 
05f0: 74 68 65 20 74 6f 70 0a 6f 66 20 74 68 65 20 53  the top.of the S
0600: 51 4c 69 74 65 20 73 6f 75 72 63 65 20 74 72 65  QLite source tre
0610: 65 2e 0a 7d 0a 0a 23 20 52 65 74 75 72 6e 20 61  e..}..# Return a
0620: 20 74 69 6d 65 73 74 61 6d 70 20 6f 66 20 74 68   timestamp of th
0630: 65 20 66 6f 72 6d 20 48 48 3a 4d 4d 3a 53 53 0a  e form HH:MM:SS.
0640: 23 0a 70 72 6f 63 20 6e 6f 77 20 7b 7d 20 7b 0a  #.proc now {} {.
0650: 20 20 72 65 74 75 72 6e 20 5b 63 6c 6f 63 6b 20    return [clock 
0660: 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65  format [clock se
0670: 63 6f 6e 64 73 5d 20 2d 66 6f 72 6d 61 74 20 25  conds] -format %
0680: 48 3a 25 4d 3a 25 53 5d 0a 7d 0a 0a 23 20 4f 6d  H:%M:%S].}..# Om
0690: 69 74 20 63 6f 6d 6d 65 6e 74 73 20 28 74 65 78  it comments (tex
06a0: 74 20 62 65 74 77 65 65 6e 20 23 20 61 6e 64 20  t between # and 
06b0: 5c 6e 29 20 69 6e 20 61 20 6c 6f 6e 67 20 6d 75  \n) in a long mu
06c0: 6c 74 69 2d 6c 69 6e 65 20 73 74 72 69 6e 67 2e  lti-line string.
06d0: 0a 23 0a 70 72 6f 63 20 73 74 72 69 70 5f 63 6f  .#.proc strip_co
06e0: 6d 6d 65 6e 74 73 20 7b 69 6e 7d 20 7b 0a 20 20  mments {in} {.  
06f0: 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 23 5b 5e  regsub -all {#[^
0700: 5c 6e 5d 2a 5c 6e 7d 20 24 69 6e 20 7b 7d 20 6f  \n]*\n} $in {} o
0710: 75 74 0a 20 20 72 65 74 75 72 6e 20 24 6f 75 74  ut.  return $out
0720: 0a 7d 0a 0a 61 72 72 61 79 20 73 65 74 20 3a 3a  .}..array set ::
0730: 43 6f 6e 66 69 67 73 20 5b 73 74 72 69 70 5f 63  Configs [strip_c
0740: 6f 6d 6d 65 6e 74 73 20 7b 0a 20 20 22 44 65 66  omments {.  "Def
0750: 61 75 6c 74 22 20 7b 0a 20 20 20 20 2d 4f 32 0a  ault" {.    -O2.
0760: 20 20 20 20 2d 2d 64 69 73 61 62 6c 65 2d 61 6d      --disable-am
0770: 61 6c 67 61 6d 61 74 69 6f 6e 20 2d 2d 64 69 73  algamation --dis
0780: 61 62 6c 65 2d 73 68 61 72 65 64 0a 20 20 20 20  able-shared.    
0790: 2d 2d 65 6e 61 62 6c 65 2d 73 65 73 73 69 6f 6e  --enable-session
07a0: 0a 20 20 7d 0a 20 20 22 53 61 6e 69 74 69 7a 65  .  }.  "Sanitize
07b0: 22 20 7b 0a 20 20 20 20 43 43 3d 63 6c 61 6e 67  " {.    CC=clang
07c0: 20 2d 66 73 61 6e 69 74 69 7a 65 3d 75 6e 64 65   -fsanitize=unde
07d0: 66 69 6e 65 64 0a 20 20 20 20 2d 44 53 51 4c 49  fined.    -DSQLI
07e0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
07f0: 20 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 73 65 73      --enable-ses
0800: 73 69 6f 6e 0a 20 20 7d 0a 20 20 22 53 74 64 63  sion.  }.  "Stdc
0810: 61 6c 6c 22 20 7b 0a 20 20 20 20 2d 44 55 53 45  all" {.    -DUSE
0820: 5f 53 54 44 43 41 4c 4c 3d 31 0a 20 20 20 20 2d  _STDCALL=1.    -
0830: 4f 32 0a 20 20 7d 0a 20 20 22 48 61 76 65 2d 4e  O2.  }.  "Have-N
0840: 6f 74 22 20 7b 0a 20 20 20 20 23 20 54 68 65 20  ot" {.    # The 
0850: 22 48 61 76 65 2d 4e 6f 74 22 20 63 6f 6e 66 69  "Have-Not" confi
0860: 67 75 72 61 74 69 6f 6e 20 73 65 74 73 20 61 6c  guration sets al
0870: 6c 20 70 6f 73 73 69 62 6c 65 20 2d 55 48 41 56  l possible -UHAV
0880: 45 5f 66 65 61 74 75 72 65 20 6f 70 74 69 6f 6e  E_feature option
0890: 73 0a 20 20 20 20 23 20 69 6e 20 6f 72 64 65 72  s.    # in order
08a0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
08b0: 74 68 65 20 63 6f 64 65 20 77 6f 72 6b 73 20 65  the code works e
08c0: 76 65 6e 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  ven on platforms
08d0: 20 74 68 61 74 20 6c 61 63 6b 0a 20 20 20 20 23   that lack.    #
08e0: 20 74 68 65 73 65 20 73 75 70 70 6f 72 74 20 73   these support s
08f0: 65 72 76 69 63 65 73 2e 0a 20 20 20 20 2d 44 48  ervices..    -DH
0900: 41 56 45 5f 46 44 41 54 41 53 59 4e 43 3d 30 0a  AVE_FDATASYNC=0.
0910: 20 20 20 20 2d 44 48 41 56 45 5f 47 4d 54 49 4d      -DHAVE_GMTIM
0920: 45 5f 52 3d 30 0a 20 20 20 20 2d 44 48 41 56 45  E_R=0.    -DHAVE
0930: 5f 49 53 4e 41 4e 3d 30 0a 20 20 20 20 2d 44 48  _ISNAN=0.    -DH
0940: 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f 52 3d  AVE_LOCALTIME_R=
0950: 30 0a 20 20 20 20 2d 44 48 41 56 45 5f 4c 4f 43  0.    -DHAVE_LOC
0960: 41 4c 54 49 4d 45 5f 53 3d 30 0a 20 20 20 20 2d  ALTIME_S=0.    -
0970: 44 48 41 56 45 5f 4d 41 4c 4c 4f 43 5f 55 53 41  DHAVE_MALLOC_USA
0980: 42 4c 45 5f 53 49 5a 45 3d 30 0a 20 20 20 20 2d  BLE_SIZE=0.    -
0990: 44 48 41 56 45 5f 53 54 52 43 48 52 4e 55 4c 3d  DHAVE_STRCHRNUL=
09a0: 30 0a 20 20 20 20 2d 44 48 41 56 45 5f 55 53 4c  0.    -DHAVE_USL
09b0: 45 45 50 3d 30 0a 20 20 20 20 2d 44 48 41 56 45  EEP=0.    -DHAVE
09c0: 5f 55 54 49 4d 45 3d 30 0a 20 20 7d 0a 20 20 22  _UTIME=0.  }.  "
09d0: 55 6e 6c 6f 63 6b 2d 4e 6f 74 69 66 79 22 20 7b  Unlock-Notify" {
09e0: 0a 20 20 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53  .    -O2.    -DS
09f0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
0a00: 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 20 20 2d  OCK_NOTIFY.    -
0a10: 44 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41  DSQLITE_THREADSA
0a20: 46 45 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  FE.    -DSQLITE_
0a30: 54 43 4c 5f 44 45 46 41 55 4c 54 5f 46 55 4c 4c  TCL_DEFAULT_FULL
0a40: 4d 55 54 45 58 3d 31 0a 20 20 7d 0a 20 20 22 53  MUTEX=1.  }.  "S
0a50: 65 63 75 72 65 2d 44 65 6c 65 74 65 22 20 7b 0a  ecure-Delete" {.
0a60: 20 20 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53 51      -O2.    -DSQ
0a70: 4c 49 54 45 5f 53 45 43 55 52 45 5f 44 45 4c 45  LITE_SECURE_DELE
0a80: 54 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  TE=1.    -DSQLIT
0a90: 45 5f 53 4f 55 4e 44 45 58 3d 31 0a 20 20 7d 0a  E_SOUNDEX=1.  }.
0aa0: 20 20 22 55 70 64 61 74 65 2d 44 65 6c 65 74 65    "Update-Delete
0ab0: 2d 4c 69 6d 69 74 22 20 7b 0a 20 20 20 20 2d 4f  -Limit" {.    -O
0ac0: 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44  2.    -DSQLITE_D
0ad0: 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d  EFAULT_FILE_FORM
0ae0: 41 54 3d 34 0a 20 20 20 20 2d 44 53 51 4c 49 54  AT=4.    -DSQLIT
0af0: 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
0b00: 44 45 4c 45 54 45 5f 4c 49 4d 49 54 3d 31 0a 20  DELETE_LIMIT=1. 
0b10: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
0b20: 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
0b30: 55 53 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  US.    -DSQLITE_
0b40: 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54 43  LIKE_DOESNT_MATC
0b50: 48 5f 42 4c 4f 42 53 0a 20 20 20 20 2d 44 53 51  H_BLOBS.    -DSQ
0b60: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
0b70: 4f 52 5f 48 49 4e 54 53 0a 20 20 20 20 2d 2d 65  OR_HINTS.    --e
0b80: 6e 61 62 6c 65 2d 6a 73 6f 6e 31 0a 20 20 7d 0a  nable-json1.  }.
0b90: 20 20 22 43 68 65 63 6b 2d 53 79 6d 62 6f 6c 73    "Check-Symbols
0ba0: 22 20 7b 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  " {.    -DSQLITE
0bb0: 5f 4d 45 4d 44 45 42 55 47 3d 31 0a 20 20 20 20  _MEMDEBUG=1.    
0bc0: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
0bd0: 46 54 53 33 5f 50 41 52 45 4e 54 48 45 53 49 53  FTS3_PARENTHESIS
0be0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
0bf0: 45 4e 41 42 4c 45 5f 46 54 53 33 3d 31 0a 20 20  ENABLE_FTS3=1.  
0c00: 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c    -DSQLITE_ENABL
0c10: 45 5f 52 54 52 45 45 3d 31 0a 20 20 20 20 2d 44  E_RTREE=1.    -D
0c20: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
0c30: 4d 53 59 53 35 3d 31 0a 20 20 20 20 2d 44 53 51  MSYS5=1.    -DSQ
0c40: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
0c50: 59 53 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  YS3=1.    -DSQLI
0c60: 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
0c70: 5f 4d 45 54 41 44 41 54 41 3d 31 0a 20 20 20 20  _METADATA=1.    
0c80: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
0c90: 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
0ca0: 4d 49 54 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  MIT=1.    -DSQLI
0cb0: 54 45 5f 53 45 43 55 52 45 5f 44 45 4c 45 54 45  TE_SECURE_DELETE
0cc0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
0cd0: 53 4f 55 4e 44 45 58 3d 31 0a 20 20 20 20 2d 44  SOUNDEX=1.    -D
0ce0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54  SQLITE_ENABLE_AT
0cf0: 4f 4d 49 43 5f 57 52 49 54 45 3d 31 0a 20 20 20  OMIC_WRITE=1.   
0d00: 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
0d10: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
0d20: 4e 54 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  NT=1.    -DSQLIT
0d30: 45 5f 45 4e 41 42 4c 45 5f 4f 56 45 52 53 49 5a  E_ENABLE_OVERSIZ
0d40: 45 5f 43 45 4c 4c 5f 43 48 45 43 4b 3d 31 0a 20  E_CELL_CHECK=1. 
0d50: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
0d60: 4c 45 5f 53 54 41 54 34 0a 20 20 20 20 2d 44 53  LE_STAT4.    -DS
0d70: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
0d80: 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20  T_SCANSTATUS.   
0d90: 20 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 20   --enable-json1 
0da0: 2d 2d 65 6e 61 62 6c 65 2d 66 74 73 35 20 2d 2d  --enable-fts5 --
0db0: 65 6e 61 62 6c 65 2d 73 65 73 73 69 6f 6e 0a 20  enable-session. 
0dc0: 20 7d 0a 20 20 22 44 65 62 75 67 2d 4f 6e 65 22   }.  "Debug-One"
0dd0: 20 7b 0a 20 20 20 20 2d 2d 64 69 73 61 62 6c 65   {.    --disable
0de0: 2d 73 68 61 72 65 64 0a 20 20 20 20 2d 4f 32 20  -shared.    -O2 
0df0: 2d 66 75 6e 73 69 67 6e 65 64 2d 63 68 61 72 0a  -funsigned-char.
0e00: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 42      -DSQLITE_DEB
0e10: 55 47 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  UG=1.    -DSQLIT
0e20: 45 5f 4d 45 4d 44 45 42 55 47 3d 31 0a 20 20 20  E_MEMDEBUG=1.   
0e30: 20 2d 44 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f   -DSQLITE_MUTEX_
0e40: 4e 4f 4f 50 3d 31 0a 20 20 20 20 2d 44 53 51 4c  NOOP=1.    -DSQL
0e50: 49 54 45 5f 54 43 4c 5f 44 45 46 41 55 4c 54 5f  ITE_TCL_DEFAULT_
0e60: 46 55 4c 4c 4d 55 54 45 58 3d 31 0a 20 20 20 20  FULLMUTEX=1.    
0e70: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
0e80: 46 54 53 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c  FTS3=1.    -DSQL
0e90: 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45  ITE_ENABLE_RTREE
0ea0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
0eb0: 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 3d 31  ENABLE_MEMSYS5=1
0ec0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e  .    -DSQLITE_EN
0ed0: 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41  ABLE_COLUMN_META
0ee0: 44 41 54 41 3d 31 0a 20 20 20 20 2d 44 53 51 4c  DATA=1.    -DSQL
0ef0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
0f00: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e  .    -DSQLITE_EN
0f10: 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55  ABLE_HIDDEN_COLU
0f20: 4d 4e 53 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  MNS.    -DSQLITE
0f30: 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3d 31 32  _MAX_ATTACHED=12
0f40: 35 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4d  5.    -DSQLITE_M
0f50: 55 54 41 54 49 4f 4e 5f 54 45 53 54 0a 20 20 7d  UTATION_TEST.  }
0f60: 0a 20 20 22 46 61 73 74 2d 4f 6e 65 22 20 7b 0a  .  "Fast-One" {.
0f70: 20 20 20 20 2d 4f 36 0a 20 20 20 20 2d 44 53 51      -O6.    -DSQ
0f80: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
0f90: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
0fa0: 45 4e 41 42 4c 45 5f 52 54 52 45 45 3d 31 0a 20  ENABLE_RTREE=1. 
0fb0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
0fc0: 4c 45 5f 53 54 41 54 34 0a 20 20 20 20 2d 44 53  LE_STAT4.    -DS
0fd0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 42 55  QLITE_ENABLE_RBU
0fe0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4d 41  .    -DSQLITE_MA
0ff0: 58 5f 41 54 54 41 43 48 45 44 3d 31 32 35 0a 20  X_ATTACHED=125. 
1000: 20 20 20 2d 44 4c 4f 4e 47 44 4f 55 42 4c 45 5f     -DLONGDOUBLE_
1010: 54 59 50 45 3d 64 6f 75 62 6c 65 0a 20 20 20 20  TYPE=double.    
1020: 2d 2d 65 6e 61 62 6c 65 2d 73 65 73 73 69 6f 6e  --enable-session
1030: 0a 20 20 7d 0a 20 20 22 44 65 76 69 63 65 2d 4f  .  }.  "Device-O
1040: 6e 65 22 20 7b 0a 20 20 20 20 2d 4f 32 0a 20 20  ne" {.    -O2.  
1050: 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 42 55 47    -DSQLITE_DEBUG
1060: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
1070: 44 45 46 41 55 4c 54 5f 41 55 54 4f 56 41 43 55  DEFAULT_AUTOVACU
1080: 55 4d 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  UM=1.    -DSQLIT
1090: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
10a0: 53 49 5a 45 3d 36 34 0a 20 20 20 20 2d 44 53 51  SIZE=64.    -DSQ
10b0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 41 47  LITE_DEFAULT_PAG
10c0: 45 5f 53 49 5a 45 3d 31 30 32 34 0a 20 20 20 20  E_SIZE=1024.    
10d0: 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  -DSQLITE_DEFAULT
10e0: 5f 54 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a 45  _TEMP_CACHE_SIZE
10f0: 3d 33 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  =32.    -DSQLITE
1100: 5f 44 49 53 41 42 4c 45 5f 4c 46 53 3d 31 0a 20  _DISABLE_LFS=1. 
1110: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
1120: 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 3d  LE_ATOMIC_WRITE=
1130: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  1.    -DSQLITE_E
1140: 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 3d 31 0a  NABLE_IOTRACE=1.
1150: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
1160: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
1170: 45 4d 45 4e 54 3d 31 0a 20 20 20 20 2d 44 53 51  EMENT=1.    -DSQ
1180: 4c 49 54 45 5f 4d 41 58 5f 50 41 47 45 5f 53 49  LITE_MAX_PAGE_SI
1190: 5a 45 3d 34 30 39 36 0a 20 20 20 20 2d 44 53 51  ZE=4096.    -DSQ
11a0: 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
11b0: 58 54 45 4e 53 49 4f 4e 3d 31 0a 20 20 20 20 2d  XTENSION=1.    -
11c0: 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f  DSQLITE_OMIT_PRO
11d0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 3d 31  GRESS_CALLBACK=1
11e0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4f 4d  .    -DSQLITE_OM
11f0: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 3d  IT_VIRTUALTABLE=
1200: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  1.    -DSQLITE_E
1210: 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
1220: 55 4d 4e 53 0a 20 20 20 20 2d 44 53 51 4c 49 54  UMNS.    -DSQLIT
1230: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 33 0a 20  E_TEMP_STORE=3. 
1240: 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e     --enable-json
1250: 31 0a 20 20 7d 0a 20 20 22 44 65 76 69 63 65 2d  1.  }.  "Device-
1260: 54 77 6f 22 20 7b 0a 20 20 20 20 2d 44 53 51 4c  Two" {.    -DSQL
1270: 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e  ITE_4_BYTE_ALIGN
1280: 45 44 5f 4d 41 4c 4c 4f 43 3d 31 0a 20 20 20 20  ED_MALLOC=1.    
1290: 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  -DSQLITE_DEFAULT
12a0: 5f 41 55 54 4f 56 41 43 55 55 4d 3d 31 0a 20 20  _AUTOVACUUM=1.  
12b0: 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55    -DSQLITE_DEFAU
12c0: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3d 31 30  LT_CACHE_SIZE=10
12d0: 30 30 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  00.    -DSQLITE_
12e0: 44 45 46 41 55 4c 54 5f 4c 4f 43 4b 49 4e 47 5f  DEFAULT_LOCKING_
12f0: 4d 4f 44 45 3d 30 0a 20 20 20 20 2d 44 53 51 4c  MODE=0.    -DSQL
1300: 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 41 47 45  ITE_DEFAULT_PAGE
1310: 5f 53 49 5a 45 3d 31 30 32 34 0a 20 20 20 20 2d  _SIZE=1024.    -
1320: 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  DSQLITE_DEFAULT_
1330: 54 45 4d 50 5f 43 41 43 48 45 5f 53 49 5a 45 3d  TEMP_CACHE_SIZE=
1340: 31 30 30 30 0a 20 20 20 20 2d 44 53 51 4c 49 54  1000.    -DSQLIT
1350: 45 5f 44 49 53 41 42 4c 45 5f 4c 46 53 3d 31 0a  E_DISABLE_LFS=1.
1360: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
1370: 42 4c 45 5f 46 54 53 33 3d 31 0a 20 20 20 20 2d  BLE_FTS3=1.    -
1380: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  DSQLITE_ENABLE_M
1390: 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54  EMORY_MANAGEMENT
13a0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
13b0: 45 4e 41 42 4c 45 5f 52 54 52 45 45 3d 31 0a 20  ENABLE_RTREE=1. 
13c0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 4d 41 58 5f     -DSQLITE_MAX_
13d0: 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 3d  COMPOUND_SELECT=
13e0: 35 30 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  50.    -DSQLITE_
13f0: 4d 41 58 5f 50 41 47 45 5f 53 49 5a 45 3d 33 32  MAX_PAGE_SIZE=32
1400: 37 36 38 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  768.    -DSQLITE
1410: 5f 4f 4d 49 54 5f 54 52 41 43 45 3d 31 0a 20 20  _OMIT_TRACE=1.  
1420: 20 20 2d 44 53 51 4c 49 54 45 5f 54 45 4d 50 5f    -DSQLITE_TEMP_
1430: 53 54 4f 52 45 3d 33 0a 20 20 20 20 2d 44 53 51  STORE=3.    -DSQ
1440: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d  LITE_THREADSAFE=
1450: 32 0a 20 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 6a  2.    --enable-j
1460: 73 6f 6e 31 20 2d 2d 65 6e 61 62 6c 65 2d 66 74  son1 --enable-ft
1470: 73 35 20 2d 2d 65 6e 61 62 6c 65 2d 73 65 73 73  s5 --enable-sess
1480: 69 6f 6e 0a 20 20 7d 0a 20 20 22 4c 6f 63 6b 69  ion.  }.  "Locki
1490: 6e 67 2d 53 74 79 6c 65 22 20 7b 0a 20 20 20 20  ng-Style" {.    
14a0: 2d 4f 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  -O2.    -DSQLITE
14b0: 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f  _ENABLE_LOCKING_
14c0: 53 54 59 4c 45 3d 31 0a 20 20 7d 0a 20 20 22 41  STYLE=1.  }.  "A
14d0: 70 70 6c 65 22 20 7b 0a 20 20 20 20 2d 4f 73 0a  pple" {.    -Os.
14e0: 20 20 20 20 2d 44 48 41 56 45 5f 47 4d 54 49 4d      -DHAVE_GMTIM
14f0: 45 5f 52 3d 31 0a 20 20 20 20 2d 44 48 41 56 45  E_R=1.    -DHAVE
1500: 5f 49 53 4e 41 4e 3d 31 0a 20 20 20 20 2d 44 48  _ISNAN=1.    -DH
1510: 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f 52 3d  AVE_LOCALTIME_R=
1520: 31 0a 20 20 20 20 2d 44 48 41 56 45 5f 50 52 45  1.    -DHAVE_PRE
1530: 41 44 3d 31 0a 20 20 20 20 2d 44 48 41 56 45 5f  AD=1.    -DHAVE_
1540: 50 57 52 49 54 45 3d 31 0a 20 20 20 20 2d 44 48  PWRITE=1.    -DH
1550: 41 56 45 5f 55 53 4c 45 45 50 3d 31 0a 20 20 20  AVE_USLEEP=1.   
1560: 20 2d 44 48 41 56 45 5f 55 53 4c 45 45 50 3d 31   -DHAVE_USLEEP=1
1570: 0a 20 20 20 20 2d 44 48 41 56 45 5f 55 54 49 4d  .    -DHAVE_UTIM
1580: 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  E=1.    -DSQLITE
1590: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
15a0: 49 5a 45 3d 31 30 30 30 0a 20 20 20 20 2d 44 53  IZE=1000.    -DS
15b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43 4b  QLITE_DEFAULT_CK
15c0: 50 54 46 55 4c 4c 46 53 59 4e 43 3d 31 0a 20 20  PTFULLFSYNC=1.  
15d0: 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55    -DSQLITE_DEFAU
15e0: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 31 0a 20  LT_MEMSTATUS=1. 
15f0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 46 41     -DSQLITE_DEFA
1600: 55 4c 54 5f 50 41 47 45 5f 53 49 5a 45 3d 31 30  ULT_PAGE_SIZE=10
1610: 32 34 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  24.    -DSQLITE_
1620: 44 49 53 41 42 4c 45 5f 50 41 47 45 43 41 43 48  DISABLE_PAGECACH
1630: 45 5f 4f 56 45 52 46 4c 4f 57 5f 53 54 41 54 53  E_OVERFLOW_STATS
1640: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
1650: 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52  ENABLE_API_ARMOR
1660: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
1670: 45 4e 41 42 4c 45 5f 41 55 54 4f 5f 50 52 4f 46  ENABLE_AUTO_PROF
1680: 49 4c 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  ILE=1.    -DSQLI
1690: 54 45 5f 45 4e 41 42 4c 45 5f 46 4c 4f 43 4b 54  TE_ENABLE_FLOCKT
16a0: 49 4d 45 4f 55 54 3d 31 0a 20 20 20 20 2d 44 53  IMEOUT=1.    -DS
16b0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
16c0: 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  3=1.    -DSQLITE
16d0: 5f 45 4e 41 42 4c 45 5f 46 54 53 33 5f 50 41 52  _ENABLE_FTS3_PAR
16e0: 45 4e 54 48 45 53 49 53 3d 31 0a 20 20 20 20 2d  ENTHESIS=1.    -
16f0: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  DSQLITE_ENABLE_F
1700: 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 3d 31 0a  TS3_TOKENIZER=1.
1710: 20 20 20 20 69 66 3a 6f 73 3d 3d 22 44 61 72 77      if:os=="Darw
1720: 69 6e 22 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41  in" -DSQLITE_ENA
1730: 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c  BLE_LOCKING_STYL
1740: 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  E=1.    -DSQLITE
1750: 5f 45 4e 41 42 4c 45 5f 50 45 52 53 49 53 54 5f  _ENABLE_PERSIST_
1760: 57 41 4c 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  WAL=1.    -DSQLI
1770: 54 45 5f 45 4e 41 42 4c 45 5f 50 55 52 47 45 41  TE_ENABLE_PURGEA
1780: 42 4c 45 5f 50 43 41 43 48 45 3d 31 0a 20 20 20  BLE_PCACHE=1.   
1790: 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
17a0: 5f 52 54 52 45 45 3d 31 0a 20 20 20 20 2d 44 53  _RTREE=1.    -DS
17b0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 4e 41  QLITE_ENABLE_SNA
17c0: 50 53 48 4f 54 3d 31 0a 20 20 20 20 23 20 2d 44  PSHOT=1.    # -D
17d0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51  SQLITE_ENABLE_SQ
17e0: 4c 4c 4f 47 3d 31 0a 20 20 20 20 2d 44 53 51 4c  LLOG=1.    -DSQL
17f0: 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
1800: 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 3d 31  E_DELETE_LIMIT=1
1810: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4d 41  .    -DSQLITE_MA
1820: 58 5f 4c 45 4e 47 54 48 3d 32 31 34 37 34 38 33  X_LENGTH=2147483
1830: 36 34 35 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  645.    -DSQLITE
1840: 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
1850: 4d 42 45 52 3d 35 30 30 30 30 30 0a 20 20 20 20  MBER=500000.    
1860: 23 20 2d 44 53 51 4c 49 54 45 5f 4d 45 4d 44 45  # -DSQLITE_MEMDE
1870: 42 55 47 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  BUG=1.    -DSQLI
1880: 54 45 5f 4e 4f 5f 53 59 4e 43 3d 31 0a 20 20 20  TE_NO_SYNC=1.   
1890: 20 2d 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41   -DSQLITE_OMIT_A
18a0: 55 54 4f 52 45 53 45 54 3d 31 0a 20 20 20 20 2d  UTORESET=1.    -
18b0: 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41  DSQLITE_OMIT_LOA
18c0: 44 5f 45 58 54 45 4e 53 49 4f 4e 3d 31 0a 20 20  D_EXTENSION=1.  
18d0: 20 20 2d 44 53 51 4c 49 54 45 5f 50 52 45 46 45    -DSQLITE_PREFE
18e0: 52 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 3d  R_PROXY_LOCKING=
18f0: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 53  1.    -DSQLITE_S
1900: 45 52 49 45 53 5f 43 4f 4e 53 54 52 41 49 4e 54  ERIES_CONSTRAINT
1910: 5f 56 45 52 49 46 59 3d 31 0a 20 20 20 20 2d 44  _VERIFY=1.    -D
1920: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
1930: 45 3d 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  E=2.    -DSQLITE
1940: 5f 55 53 45 5f 55 52 49 3d 31 0a 20 20 20 20 2d  _USE_URI=1.    -
1950: 44 53 51 4c 49 54 45 5f 57 52 49 54 45 5f 57 41  DSQLITE_WRITE_WA
1960: 4c 46 52 41 4d 45 5f 50 52 45 42 55 46 46 45 52  LFRAME_PREBUFFER
1970: 45 44 3d 31 0a 20 20 20 20 2d 44 55 53 45 5f 47  ED=1.    -DUSE_G
1980: 55 41 52 44 45 44 5f 46 44 3d 31 0a 20 20 20 20  UARDED_FD=1.    
1990: 2d 44 55 53 45 5f 50 52 45 41 44 3d 31 0a 20 20  -DUSE_PREAD=1.  
19a0: 20 20 2d 2d 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31    --enable-json1
19b0: 20 2d 2d 65 6e 61 62 6c 65 2d 66 74 73 35 0a 20   --enable-fts5. 
19c0: 20 7d 0a 20 20 22 45 78 74 72 61 2d 52 6f 62 75   }.  "Extra-Robu
19d0: 73 74 6e 65 73 73 22 20 7b 0a 20 20 20 20 2d 44  stness" {.    -D
19e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 56  SQLITE_ENABLE_OV
19f0: 45 52 53 49 5a 45 5f 43 45 4c 4c 5f 43 48 45 43  ERSIZE_CELL_CHEC
1a00: 4b 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  K=1.    -DSQLITE
1a10: 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3d 36 32  _MAX_ATTACHED=62
1a20: 0a 20 20 7d 0a 20 20 22 44 65 76 6b 69 74 22 20  .  }.  "Devkit" 
1a30: 7b 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44  {.    -DSQLITE_D
1a40: 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d  EFAULT_FILE_FORM
1a50: 41 54 3d 34 0a 20 20 20 20 2d 44 53 51 4c 49 54  AT=4.    -DSQLIT
1a60: 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3d 33  E_MAX_ATTACHED=3
1a70: 30 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  0.    -DSQLITE_E
1a80: 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54  NABLE_COLUMN_MET
1a90: 41 44 41 54 41 0a 20 20 20 20 2d 44 53 51 4c 49  ADATA.    -DSQLI
1aa0: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 20  TE_ENABLE_FTS4. 
1ab0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
1ac0: 4c 45 5f 46 54 53 35 0a 20 20 20 20 2d 44 53 51  LE_FTS5.    -DSQ
1ad0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
1ae0: 5f 50 41 52 45 4e 54 48 45 53 49 53 0a 20 20 20  _PARENTHESIS.   
1af0: 20 2d 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c   -DSQLITE_DISABL
1b00: 45 5f 46 54 53 34 5f 44 45 46 45 52 52 45 44 0a  E_FTS4_DEFERRED.
1b10: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
1b20: 42 4c 45 5f 52 54 52 45 45 0a 20 20 20 20 2d 2d  BLE_RTREE.    --
1b30: 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 20 2d 2d 65  enable-json1 --e
1b40: 6e 61 62 6c 65 2d 66 74 73 35 0a 20 20 7d 0a 20  nable-fts5.  }. 
1b50: 20 22 4e 6f 2d 6c 6f 6f 6b 61 73 69 64 65 22 20   "No-lookaside" 
1b60: 7b 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 54  {.    -DSQLITE_T
1b70: 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  EST_REALLOC_STRE
1b80: 53 53 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  SS=1.    -DSQLIT
1b90: 45 5f 4f 4d 49 54 5f 4c 4f 4f 4b 41 53 49 44 45  E_OMIT_LOOKASIDE
1ba0: 3d 31 0a 20 20 20 20 2d 44 48 41 56 45 5f 55 53  =1.    -DHAVE_US
1bb0: 4c 45 45 50 3d 31 0a 20 20 7d 0a 20 20 22 56 61  LEEP=1.  }.  "Va
1bc0: 6c 67 72 69 6e 64 22 20 7b 0a 20 20 20 20 2d 44  lgrind" {.    -D
1bd0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
1be0: 41 54 34 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  AT4.    -DSQLITE
1bf0: 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 20 20 20  _ENABLE_FTS4.   
1c00: 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
1c10: 5f 52 54 52 45 45 0a 20 20 20 20 2d 44 53 51 4c  _RTREE.    -DSQL
1c20: 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
1c30: 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 20 20 2d 2d  N_COLUMNS.    --
1c40: 65 6e 61 62 6c 65 2d 6a 73 6f 6e 31 0a 20 20 7d  enable-json1.  }
1c50: 0a 0a 20 20 23 20 54 68 65 20 6e 65 78 74 20 67  ..  # The next g
1c60: 72 6f 75 70 20 6f 66 20 63 6f 6e 66 69 67 75 72  roup of configur
1c70: 61 74 69 6f 6e 73 20 61 72 65 20 75 73 65 64 20  ations are used 
1c80: 6f 6e 6c 79 20 62 79 20 74 68 65 0a 20 20 23 20  only by the.  # 
1c90: 46 61 69 6c 75 72 65 2d 44 65 74 65 63 74 69 6f  Failure-Detectio
1ca0: 6e 20 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68 65  n platform.  The
1cb0: 79 20 61 72 65 20 61 6c 6c 20 74 68 65 20 73 61  y are all the sa
1cc0: 6d 65 2c 20 62 75 74 20 77 65 20 6e 65 65 64 0a  me, but we need.
1cd0: 20 20 23 20 64 69 66 66 65 72 65 6e 74 20 6e 61    # different na
1ce0: 6d 65 73 20 66 6f 72 20 74 68 65 6d 20 61 6c 6c  mes for them all
1cf0: 20 73 6f 20 74 68 61 74 20 74 68 65 79 20 72 65   so that they re
1d00: 73 75 6c 74 73 20 61 70 70 65 61 72 20 69 6e 20  sults appear in 
1d10: 73 65 70 61 72 61 74 65 0a 20 20 23 20 73 75 62  separate.  # sub
1d20: 64 69 72 65 63 74 6f 72 69 65 73 2e 0a 20 20 23  directories..  #
1d30: 0a 20 20 46 61 69 6c 30 20 7b 2d 4f 30 7d 0a 20  .  Fail0 {-O0}. 
1d40: 20 46 61 69 6c 32 20 7b 2d 4f 30 7d 0a 20 20 46   Fail2 {-O0}.  F
1d50: 61 69 6c 33 20 7b 2d 4f 30 7d 0a 20 20 46 61 69  ail3 {-O0}.  Fai
1d60: 6c 34 20 7b 2d 4f 30 7d 0a 20 20 46 75 7a 7a 46  l4 {-O0}.  FuzzF
1d70: 61 69 6c 31 20 7b 2d 4f 30 7d 0a 20 20 46 75 7a  ail1 {-O0}.  Fuz
1d80: 7a 46 61 69 6c 32 20 7b 2d 4f 30 7d 0a 7d 5d 0a  zFail2 {-O0}.}].
1d90: 0a 61 72 72 61 79 20 73 65 74 20 3a 3a 50 6c 61  .array set ::Pla
1da0: 74 66 6f 72 6d 73 20 5b 73 74 72 69 70 5f 63 6f  tforms [strip_co
1db0: 6d 6d 65 6e 74 73 20 7b 0a 20 20 4c 69 6e 75 78  mments {.  Linux
1dc0: 2d 78 38 36 5f 36 34 20 7b 0a 20 20 20 20 22 43  -x86_64 {.    "C
1dd0: 68 65 63 6b 2d 53 79 6d 62 6f 6c 73 22 20 20 20  heck-Symbols"   
1de0: 20 20 20 20 20 20 20 20 63 68 65 63 6b 73 79 6d          checksym
1df0: 62 6f 6c 73 0a 20 20 20 20 22 46 61 73 74 2d 4f  bols.    "Fast-O
1e00: 6e 65 22 20 20 20 20 20 20 20 20 20 20 20 20 20  ne"             
1e10: 20 20 20 66 75 7a 7a 74 65 73 74 0a 20 20 20 20     fuzztest.    
1e20: 22 44 65 62 75 67 2d 4f 6e 65 22 20 20 20 20 20  "Debug-One"     
1e30: 20 20 20 20 20 20 20 20 20 20 22 6d 70 74 65 73            "mptes
1e40: 74 20 74 65 73 74 22 0a 20 20 20 20 22 48 61 76  t test".    "Hav
1e50: 65 2d 4e 6f 74 22 20 20 20 20 20 20 20 20 20 20  e-Not"          
1e60: 20 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22        test.    "
1e70: 53 65 63 75 72 65 2d 44 65 6c 65 74 65 22 20 20  Secure-Delete"  
1e80: 20 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20           test.  
1e90: 20 20 22 55 6e 6c 6f 63 6b 2d 4e 6f 74 69 66 79    "Unlock-Notify
1ea0: 22 20 20 20 20 20 20 20 20 20 20 20 22 51 55 49  "           "QUI
1eb0: 43 4b 54 45 53 54 5f 49 4e 43 4c 55 44 45 3d 6e  CKTEST_INCLUDE=n
1ec0: 6f 74 69 66 79 32 2e 74 65 73 74 20 74 65 73 74  otify2.test test
1ed0: 22 0a 20 20 20 20 22 55 70 64 61 74 65 2d 44 65  ".    "Update-De
1ee0: 6c 65 74 65 2d 4c 69 6d 69 74 22 20 20 20 20 20  lete-Limit"     
1ef0: 74 65 73 74 0a 20 20 20 20 22 45 78 74 72 61 2d  test.    "Extra-
1f00: 52 6f 62 75 73 74 6e 65 73 73 22 20 20 20 20 20  Robustness"     
1f10: 20 20 20 74 65 73 74 0a 20 20 20 20 22 44 65 76     test.    "Dev
1f20: 69 63 65 2d 54 77 6f 22 20 20 20 20 20 20 20 20  ice-Two"        
1f30: 20 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22        test.    "
1f40: 4e 6f 2d 6c 6f 6f 6b 61 73 69 64 65 22 20 20 20  No-lookaside"   
1f50: 20 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20           test.  
1f60: 20 20 22 44 65 76 6b 69 74 22 20 20 20 20 20 20    "Devkit"      
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
1f80: 0a 20 20 20 20 22 41 70 70 6c 65 22 20 20 20 20  .    "Apple"    
1f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1fa0: 65 73 74 0a 20 20 20 20 22 53 61 6e 69 74 69 7a  est.    "Sanitiz
1fb0: 65 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e"              
1fc0: 20 20 7b 51 55 49 43 4b 54 45 53 54 5f 4f 4d 49    {QUICKTEST_OMI
1fd0: 54 3d 66 75 6e 63 34 2e 74 65 73 74 2c 6e 61 6e  T=func4.test,nan
1fe0: 2e 74 65 73 74 20 74 65 73 74 7d 0a 20 20 20 20  .test test}.    
1ff0: 22 44 65 76 69 63 65 2d 4f 6e 65 22 20 20 20 20  "Device-One"    
2000: 20 20 20 20 20 20 20 20 20 20 66 75 6c 6c 74 65            fullte
2010: 73 74 0a 20 20 20 20 22 44 65 66 61 75 6c 74 22  st.    "Default"
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2030: 20 22 74 68 72 65 61 64 74 65 73 74 20 66 75 6c   "threadtest ful
2040: 6c 74 65 73 74 22 0a 20 20 20 20 22 56 61 6c 67  ltest".    "Valg
2050: 72 69 6e 64 22 20 20 20 20 20 20 20 20 20 20 20  rind"           
2060: 20 20 20 20 20 76 61 6c 67 72 69 6e 64 74 65 73       valgrindtes
2070: 74 0a 20 20 7d 0a 20 20 4c 69 6e 75 78 2d 69 36  t.  }.  Linux-i6
2080: 38 36 20 7b 0a 20 20 20 20 22 44 65 76 6b 69 74  86 {.    "Devkit
2090: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
20a0: 20 20 20 74 65 73 74 0a 20 20 20 20 22 48 61 76     test.    "Hav
20b0: 65 2d 4e 6f 74 22 20 20 20 20 20 20 20 20 20 20  e-Not"          
20c0: 20 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22        test.    "
20d0: 55 6e 6c 6f 63 6b 2d 4e 6f 74 69 66 79 22 20 20  Unlock-Notify"  
20e0: 20 20 20 20 20 20 20 20 20 22 51 55 49 43 4b 54           "QUICKT
20f0: 45 53 54 5f 49 4e 43 4c 55 44 45 3d 6e 6f 74 69  EST_INCLUDE=noti
2100: 66 79 32 2e 74 65 73 74 20 74 65 73 74 22 0a 20  fy2.test test". 
2110: 20 20 20 22 44 65 76 69 63 65 2d 4f 6e 65 22 20     "Device-One" 
2120: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
2130: 74 0a 20 20 20 20 22 44 65 76 69 63 65 2d 54 77  t.    "Device-Tw
2140: 6f 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o"              
2150: 74 65 73 74 0a 20 20 20 20 22 44 65 66 61 75 6c  test.    "Defaul
2160: 74 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t"              
2170: 20 20 20 22 74 68 72 65 61 64 74 65 73 74 20 66     "threadtest f
2180: 75 6c 6c 74 65 73 74 22 0a 20 20 7d 0a 20 20 44  ulltest".  }.  D
2190: 61 72 77 69 6e 2d 69 33 38 36 20 7b 0a 20 20 20  arwin-i386 {.   
21a0: 20 22 4c 6f 63 6b 69 6e 67 2d 53 74 79 6c 65 22   "Locking-Style"
21b0: 20 20 20 20 20 20 20 20 20 20 20 22 6d 70 74 65             "mpte
21c0: 73 74 20 74 65 73 74 22 0a 20 20 20 20 22 48 61  st test".    "Ha
21d0: 76 65 2d 4e 6f 74 22 20 20 20 20 20 20 20 20 20  ve-Not"         
21e0: 20 20 20 20 20 20 20 74 65 73 74 0a 20 20 20 20         test.    
21f0: 22 41 70 70 6c 65 22 20 20 20 20 20 20 20 20 20  "Apple"         
2200: 20 20 20 20 20 20 20 20 20 20 22 74 68 72 65 61            "threa
2210: 64 74 65 73 74 20 66 75 6c 6c 74 65 73 74 22 0a  dtest fulltest".
2220: 20 20 7d 0a 20 20 44 61 72 77 69 6e 2d 78 38 36    }.  Darwin-x86
2230: 5f 36 34 20 7b 0a 20 20 20 20 22 4c 6f 63 6b 69  _64 {.    "Locki
2240: 6e 67 2d 53 74 79 6c 65 22 20 20 20 20 20 20 20  ng-Style"       
2250: 20 20 20 20 22 6d 70 74 65 73 74 20 74 65 73 74      "mptest test
2260: 22 0a 20 20 20 20 22 48 61 76 65 2d 4e 6f 74 22  ".    "Have-Not"
2270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2280: 74 65 73 74 0a 20 20 20 20 22 41 70 70 6c 65 22  test.    "Apple"
2290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a0: 20 20 20 22 74 68 72 65 61 64 74 65 73 74 20 66     "threadtest f
22b0: 75 6c 6c 74 65 73 74 22 0a 20 20 7d 0a 20 20 22  ulltest".  }.  "
22c0: 57 69 6e 64 6f 77 73 20 4e 54 2d 69 6e 74 65 6c  Windows NT-intel
22d0: 22 20 7b 0a 20 20 20 20 22 53 74 64 63 61 6c 6c  " {.    "Stdcall
22e0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
22f0: 20 20 74 65 73 74 0a 20 20 20 20 22 48 61 76 65    test.    "Have
2300: 2d 4e 6f 74 22 20 20 20 20 20 20 20 20 20 20 20  -Not"           
2310: 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22 44       test.    "D
2320: 65 66 61 75 6c 74 22 20 20 20 20 20 20 20 20 20  efault"         
2330: 20 20 20 20 20 20 20 20 22 6d 70 74 65 73 74 20          "mptest 
2340: 66 75 6c 6c 74 65 73 74 6f 6e 6c 79 22 0a 20 20  fulltestonly".  
2350: 7d 0a 20 20 22 57 69 6e 64 6f 77 73 20 4e 54 2d  }.  "Windows NT-
2360: 61 6d 64 36 34 22 20 7b 0a 20 20 20 20 22 53 74  amd64" {.    "St
2370: 64 63 61 6c 6c 22 20 20 20 20 20 20 20 20 20 20  dcall"          
2380: 20 20 20 20 20 20 20 74 65 73 74 0a 20 20 20 20         test.    
2390: 22 48 61 76 65 2d 4e 6f 74 22 20 20 20 20 20 20  "Have-Not"      
23a0: 20 20 20 20 20 20 20 20 20 20 74 65 73 74 0a 20            test. 
23b0: 20 20 20 22 44 65 66 61 75 6c 74 22 20 20 20 20     "Default"    
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 70               "mp
23d0: 74 65 73 74 20 66 75 6c 6c 74 65 73 74 6f 6e 6c  test fulltestonl
23e0: 79 22 0a 20 20 7d 0a 0a 20 20 23 20 54 68 65 20  y".  }..  # The 
23f0: 46 61 69 6c 75 72 65 2d 44 65 74 65 63 74 69 6f  Failure-Detectio
2400: 6e 20 70 6c 61 74 66 6f 72 6d 20 72 75 6e 73 20  n platform runs 
2410: 76 61 72 69 6f 75 73 20 74 65 73 74 73 20 74 68  various tests th
2420: 61 74 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a  at deliberately.
2430: 20 20 23 20 66 61 69 6c 2e 20 20 54 68 69 73 20    # fail.  This 
2440: 69 73 20 75 73 65 64 20 61 73 20 61 20 74 65 73  is used as a tes
2450: 74 20 6f 66 20 74 68 69 73 20 73 63 72 69 70 74  t of this script
2460: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
2470: 74 68 69 73 20 73 63 72 69 70 74 0a 20 20 23 20  this script.  # 
2480: 63 6f 72 72 65 63 74 6c 79 20 69 64 65 6e 74 69  correctly identi
2490: 66 69 65 73 20 66 61 69 6c 75 72 65 73 2e 0a 20  fies failures.. 
24a0: 20 23 0a 20 20 46 61 69 6c 75 72 65 2d 44 65 74   #.  Failure-Det
24b0: 65 63 74 69 6f 6e 20 7b 0a 20 20 20 20 46 61 69  ection {.    Fai
24c0: 6c 30 20 20 20 20 20 22 54 45 53 54 5f 46 41 49  l0     "TEST_FAI
24d0: 4c 55 52 45 3d 30 20 74 65 73 74 22 0a 20 20 20  LURE=0 test".   
24e0: 20 53 61 6e 69 74 69 7a 65 20 20 22 54 45 53 54   Sanitize  "TEST
24f0: 5f 46 41 49 4c 55 52 45 3d 31 20 74 65 73 74 22  _FAILURE=1 test"
2500: 0a 20 20 20 20 46 61 69 6c 32 20 20 20 20 20 22  .    Fail2     "
2510: 54 45 53 54 5f 46 41 49 4c 55 52 45 3d 32 20 76  TEST_FAILURE=2 v
2520: 61 6c 67 72 69 6e 64 74 65 73 74 22 0a 20 20 20  algrindtest".   
2530: 20 46 61 69 6c 33 20 20 20 20 20 22 54 45 53 54   Fail3     "TEST
2540: 5f 46 41 49 4c 55 52 45 3d 33 20 76 61 6c 67 72  _FAILURE=3 valgr
2550: 69 6e 64 74 65 73 74 22 0a 20 20 20 20 46 61 69  indtest".    Fai
2560: 6c 34 20 20 20 20 20 22 54 45 53 54 5f 46 41 49  l4     "TEST_FAI
2570: 4c 55 52 45 3d 34 20 74 65 73 74 22 0a 20 20 20  LURE=4 test".   
2580: 20 46 75 7a 7a 46 61 69 6c 31 20 22 54 45 53 54   FuzzFail1 "TEST
2590: 5f 46 41 49 4c 55 52 45 3d 35 20 74 65 73 74 22  _FAILURE=5 test"
25a0: 0a 20 20 20 20 46 75 7a 7a 46 61 69 6c 32 20 22  .    FuzzFail2 "
25b0: 54 45 53 54 5f 46 41 49 4c 55 52 45 3d 35 20 76  TEST_FAILURE=5 v
25c0: 61 6c 67 72 69 6e 64 74 65 73 74 22 0a 20 20 7d  algrindtest".  }
25d0: 0a 7d 5d 0a 0a 0a 23 20 45 6e 64 20 6f 66 20 63  .}]...# End of c
25e0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 65 63  onfiguration sec
25f0: 74 69 6f 6e 2e 0a 23 23 23 23 23 23 23 23 23 23  tion..##########
2600: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2610: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2630: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
2640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2650: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2660: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2670: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2680: 23 23 23 23 23 23 23 23 23 0a 0a 23 20 43 6f 6e  #########..# Con
2690: 66 69 67 75 72 61 74 69 6f 6e 20 76 65 72 69 66  figuration verif
26a0: 69 63 61 74 69 6f 6e 3a 20 43 68 65 63 6b 20 74  ication: Check t
26b0: 68 61 74 20 65 61 63 68 20 65 6e 74 72 79 20 69  hat each entry i
26c0: 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 63 6f  n the list of co
26d0: 6e 66 69 67 73 0a 23 20 73 70 65 63 69 66 69 65  nfigs.# specifie
26e0: 64 20 66 6f 72 20 65 61 63 68 20 70 6c 61 74 66  d for each platf
26f0: 6f 72 6d 73 20 65 78 69 73 74 73 2e 0a 23 0a 66  orms exists..#.f
2700: 6f 72 65 61 63 68 20 7b 6b 65 79 20 76 61 6c 75  oreach {key valu
2710: 65 7d 20 5b 61 72 72 61 79 20 67 65 74 20 3a 3a  e} [array get ::
2720: 50 6c 61 74 66 6f 72 6d 73 5d 20 7b 0a 20 20 66  Platforms] {.  f
2730: 6f 72 65 61 63 68 20 7b 76 20 74 7d 20 24 76 61  oreach {v t} $va
2740: 6c 75 65 20 7b 0a 20 20 20 20 69 66 20 7b 30 3d  lue {.    if {0=
2750: 3d 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  =[info exists ::
2760: 43 6f 6e 66 69 67 73 28 24 76 29 5d 7d 20 7b 0a  Configs($v)]} {.
2770: 20 20 20 20 20 20 70 75 74 73 20 73 74 64 65 72        puts stder
2780: 72 20 22 4e 6f 20 73 75 63 68 20 63 6f 6e 66 69  r "No such confi
2790: 67 75 72 61 74 69 6f 6e 3a 20 5c 22 24 76 5c 22  guration: \"$v\"
27a0: 22 0a 20 20 20 20 20 20 65 78 69 74 20 2d 31 0a  ".      exit -1.
27b0: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23 20 4f      }.  }.}..# O
27c0: 75 74 70 75 74 20 6c 6f 67 2e 20 20 20 44 69 73  utput log.   Dis
27d0: 61 62 6c 65 64 20 66 6f 72 20 73 6c 61 76 65 20  abled for slave 
27e0: 69 6e 74 65 72 70 72 65 74 65 72 73 2e 0a 23 0a  interpreters..#.
27f0: 69 66 20 7b 5b 6c 69 6e 64 65 78 20 24 61 72 67  if {[lindex $arg
2800: 76 20 65 6e 64 5d 21 3d 22 2d 2d 73 6c 61 76 65  v end]!="--slave
2810: 22 7d 20 7b 0a 20 20 73 65 74 20 4c 4f 47 20 5b  "} {.  set LOG [
2820: 6f 70 65 6e 20 72 65 6c 65 61 73 65 74 65 73 74  open releasetest
2830: 2d 6f 75 74 2e 74 78 74 20 77 5d 0a 20 20 70 72  -out.txt w].  pr
2840: 6f 63 20 50 55 54 53 20 7b 74 78 74 7d 20 7b 0a  oc PUTS {txt} {.
2850: 20 20 20 20 70 75 74 73 20 24 74 78 74 0a 20 20      puts $txt.  
2860: 20 20 70 75 74 73 20 24 3a 3a 4c 4f 47 20 24 74    puts $::LOG $t
2870: 78 74 0a 20 20 20 20 66 6c 75 73 68 20 24 3a 3a  xt.    flush $::
2880: 4c 4f 47 0a 20 20 7d 0a 20 20 70 72 6f 63 20 50  LOG.  }.  proc P
2890: 55 54 53 4e 4e 4c 20 7b 74 78 74 7d 20 7b 0a 20  UTSNNL {txt} {. 
28a0: 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69     puts -nonewli
28b0: 6e 65 20 24 74 78 74 0a 20 20 20 20 70 75 74 73  ne $txt.    puts
28c0: 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 3a 3a 4c   -nonewline $::L
28d0: 4f 47 20 24 74 78 74 0a 20 20 20 20 66 6c 75 73  OG $txt.    flus
28e0: 68 20 24 3a 3a 4c 4f 47 0a 20 20 7d 0a 20 20 70  h $::LOG.  }.  p
28f0: 72 6f 63 20 50 55 54 53 45 52 52 20 7b 74 78 74  roc PUTSERR {txt
2900: 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 73 74 64  } {.    puts std
2910: 65 72 72 20 24 74 78 74 0a 20 20 20 20 70 75 74  err $txt.    put
2920: 73 20 24 3a 3a 4c 4f 47 20 24 74 78 74 0a 20 20  s $::LOG $txt.  
2930: 20 20 66 6c 75 73 68 20 24 3a 3a 4c 4f 47 0a 20    flush $::LOG. 
2940: 20 7d 0a 20 20 70 75 74 73 20 24 4c 4f 47 20 22   }.  puts $LOG "
2950: 24 61 72 67 76 30 20 24 61 72 67 76 22 0a 20 20  $argv0 $argv".  
2960: 73 65 74 20 74 6d 30 20 5b 63 6c 6f 63 6b 20 66  set tm0 [clock f
2970: 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63  ormat [clock sec
2980: 6f 6e 64 73 5d 20 2d 66 6f 72 6d 61 74 20 7b 25  onds] -format {%
2990: 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d 3a 25 53  Y-%m-%d %H:%M:%S
29a0: 7d 20 2d 67 6d 74 20 31 5d 0a 20 20 70 75 74 73  } -gmt 1].  puts
29b0: 20 24 4c 4f 47 20 22 73 74 61 72 74 2d 74 69 6d   $LOG "start-tim
29c0: 65 3a 20 24 74 6d 30 20 55 54 43 22 0a 7d 20 65  e: $tm0 UTC".} e
29d0: 6c 73 65 20 7b 0a 20 20 70 72 6f 63 20 50 55 54  lse {.  proc PUT
29e0: 53 20 7b 74 78 74 7d 20 7b 0a 20 20 20 20 70 75  S {txt} {.    pu
29f0: 74 73 20 24 74 78 74 0a 20 20 7d 0a 20 20 70 72  ts $txt.  }.  pr
2a00: 6f 63 20 50 55 54 53 4e 4e 4c 20 7b 74 78 74 7d  oc PUTSNNL {txt}
2a10: 20 7b 0a 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e   {.    puts -non
2a20: 65 77 6c 69 6e 65 20 24 74 78 74 0a 20 20 7d 0a  ewline $txt.  }.
2a30: 20 20 70 72 6f 63 20 50 55 54 53 45 52 52 20 7b    proc PUTSERR {
2a40: 74 78 74 7d 20 7b 0a 20 20 20 20 70 75 74 73 20  txt} {.    puts 
2a50: 73 74 64 65 72 72 20 24 74 78 74 0a 20 20 7d 0a  stderr $txt.  }.
2a60: 7d 0a 0a 23 20 4f 70 65 6e 20 74 68 65 20 66 69  }..# Open the fi
2a70: 6c 65 20 24 6c 6f 67 66 69 6c 65 20 61 6e 64 20  le $logfile and 
2a80: 6c 6f 6f 6b 20 66 6f 72 20 61 20 72 65 70 6f 72  look for a repor
2a90: 74 20 6f 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  t on the number 
2aa0: 6f 66 20 65 72 72 6f 72 73 0a 23 20 61 6e 64 20  of errors.# and 
2ab0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 65  the number of te
2ac0: 73 74 20 63 61 73 65 73 20 72 75 6e 2e 20 20 41  st cases run.  A
2ad0: 64 64 20 74 68 65 73 65 20 76 61 6c 75 65 73 20  dd these values 
2ae0: 74 6f 20 74 68 65 20 67 6c 6f 62 61 6c 0a 23 20  to the global.# 
2af0: 24 3a 3a 4e 45 52 52 43 41 53 45 20 61 6e 64 20  $::NERRCASE and 
2b00: 24 3a 3a 4e 54 45 53 54 43 41 53 45 20 76 61 72  $::NTESTCASE var
2b10: 69 61 62 6c 65 73 2e 0a 23 0a 23 20 49 66 20 61  iables..#.# If a
2b20: 6e 79 20 65 72 72 6f 72 73 20 6f 63 63 75 72 2c  ny errors occur,
2b30: 20 74 68 65 6e 20 77 72 69 74 65 20 69 6e 74 6f   then write into
2b40: 20 24 65 72 72 6d 73 67 56 61 72 20 74 68 65 20   $errmsgVar the 
2b50: 74 65 78 74 20 6f 66 20 61 6e 20 61 70 70 72 6f  text of an appro
2b60: 70 72 69 61 74 65 0a 23 20 6f 6e 65 2d 6c 69 6e  priate.# one-lin
2b70: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
2b80: 74 6f 20 73 68 6f 77 20 6f 6e 20 74 68 65 20 6f  to show on the o
2b90: 75 74 70 75 74 2e 0a 23 0a 70 72 6f 63 20 63 6f  utput..#.proc co
2ba0: 75 6e 74 5f 74 65 73 74 73 5f 61 6e 64 5f 65 72  unt_tests_and_er
2bb0: 72 6f 72 73 20 7b 6c 6f 67 66 69 6c 65 20 72 63  rors {logfile rc
2bc0: 56 61 72 20 65 72 72 6d 73 67 56 61 72 7d 20 7b  Var errmsgVar} {
2bd0: 0a 20 20 69 66 20 7b 24 3a 3a 44 52 59 52 55 4e  .  if {$::DRYRUN
2be0: 7d 20 72 65 74 75 72 6e 0a 20 20 75 70 76 61 72  } return.  upvar
2bf0: 20 31 20 24 72 63 56 61 72 20 72 63 20 24 65 72   1 $rcVar rc $er
2c00: 72 6d 73 67 56 61 72 20 65 72 72 6d 73 67 0a 20  rmsgVar errmsg. 
2c10: 20 73 65 74 20 66 64 20 5b 6f 70 65 6e 20 24 6c   set fd [open $l
2c20: 6f 67 66 69 6c 65 20 72 62 5d 0a 20 20 73 65 74  ogfile rb].  set
2c30: 20 73 65 65 6e 20 30 0a 20 20 77 68 69 6c 65 20   seen 0.  while 
2c40: 7b 21 5b 65 6f 66 20 24 66 64 5d 7d 20 7b 0a 20  {![eof $fd]} {. 
2c50: 20 20 20 73 65 74 20 6c 69 6e 65 20 5b 67 65 74     set line [get
2c60: 73 20 24 66 64 5d 0a 20 20 20 20 69 66 20 7b 5b  s $fd].    if {[
2c70: 72 65 67 65 78 70 20 7b 28 5c 64 2b 29 20 65 72  regexp {(\d+) er
2c80: 72 6f 72 73 20 6f 75 74 20 6f 66 20 28 5c 64 2b  rors out of (\d+
2c90: 29 20 74 65 73 74 73 7d 20 24 6c 69 6e 65 20 61  ) tests} $line a
2ca0: 6c 6c 20 6e 65 72 72 20 6e 74 65 73 74 5d 7d 20  ll nerr ntest]} 
2cb0: 7b 0a 20 20 20 20 20 20 69 6e 63 72 20 3a 3a 4e  {.      incr ::N
2cc0: 45 52 52 43 41 53 45 20 24 6e 65 72 72 0a 20 20  ERRCASE $nerr.  
2cd0: 20 20 20 20 69 6e 63 72 20 3a 3a 4e 54 45 53 54      incr ::NTEST
2ce0: 43 41 53 45 20 24 6e 74 65 73 74 0a 20 20 20 20  CASE $ntest.    
2cf0: 20 20 73 65 74 20 73 65 65 6e 20 31 0a 20 20 20    set seen 1.   
2d00: 20 20 20 69 66 20 7b 24 6e 65 72 72 3e 30 7d 20     if {$nerr>0} 
2d10: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 72 63  {.        set rc
2d20: 20 31 0a 20 20 20 20 20 20 20 20 73 65 74 20 65   1.        set e
2d30: 72 72 6d 73 67 20 24 6c 69 6e 65 0a 20 20 20 20  rrmsg $line.    
2d40: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
2d50: 20 7b 5b 72 65 67 65 78 70 20 7b 72 75 6e 74 69   {[regexp {runti
2d60: 6d 65 20 65 72 72 6f 72 3a 20 2b 28 2e 2a 29 7d  me error: +(.*)}
2d70: 20 24 6c 69 6e 65 20 61 6c 6c 20 6d 73 67 5d 7d   $line all msg]}
2d80: 20 7b 0a 20 20 20 20 20 20 23 20 73 6b 69 70 20   {.      # skip 
2d90: 6f 76 65 72 20 22 76 61 6c 75 65 20 69 73 20 6f  over "value is o
2da0: 75 74 73 69 64 65 20 72 61 6e 67 65 22 20 65 72  utside range" er
2db0: 72 6f 72 73 0a 20 20 20 20 20 20 69 66 20 7b 5b  rors.      if {[
2dc0: 72 65 67 65 78 70 20 7b 76 61 6c 75 65 20 2e 2a  regexp {value .*
2dd0: 20 69 73 20 6f 75 74 73 69 64 65 20 74 68 65 20   is outside the 
2de0: 72 61 6e 67 65 20 6f 66 20 72 65 70 72 65 73 65  range of represe
2df0: 6e 74 61 62 6c 65 7d 20 24 6c 69 6e 65 5d 7d 20  ntable} $line]} 
2e00: 7b 0a 20 20 20 20 20 20 20 20 20 23 20 6e 6f 6f  {.         # noo
2e10: 70 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  p.      } else {
2e20: 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20 3a 3a  .        incr ::
2e30: 4e 45 52 52 43 41 53 45 0a 20 20 20 20 20 20 20  NERRCASE.       
2e40: 20 69 66 20 7b 24 72 63 3d 3d 30 7d 20 7b 0a 20   if {$rc==0} {. 
2e50: 20 20 20 20 20 20 20 20 20 73 65 74 20 72 63 20           set rc 
2e60: 31 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  1.          set 
2e70: 65 72 72 6d 73 67 20 24 6d 73 67 0a 20 20 20 20  errmsg $msg.    
2e80: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
2e90: 20 20 7d 0a 20 20 20 20 69 66 20 7b 5b 72 65 67    }.    if {[reg
2ea0: 65 78 70 20 7b 66 61 74 61 6c 20 65 72 72 6f 72  exp {fatal error
2eb0: 20 2b 28 2e 2a 29 7d 20 24 6c 69 6e 65 20 61 6c   +(.*)} $line al
2ec0: 6c 20 6d 73 67 5d 7d 20 7b 0a 20 20 20 20 20 20  l msg]} {.      
2ed0: 69 6e 63 72 20 3a 3a 4e 45 52 52 43 41 53 45 0a  incr ::NERRCASE.
2ee0: 20 20 20 20 20 20 69 66 20 7b 24 72 63 3d 3d 30        if {$rc==0
2ef0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
2f00: 72 63 20 31 0a 20 20 20 20 20 20 20 20 73 65 74  rc 1.        set
2f10: 20 65 72 72 6d 73 67 20 24 6d 73 67 0a 20 20 20   errmsg $msg.   
2f20: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
2f30: 66 20 7b 5b 72 65 67 65 78 70 20 7b 45 52 52 4f  f {[regexp {ERRO
2f40: 52 20 53 55 4d 4d 41 52 59 3a 20 28 5c 64 2b 29  R SUMMARY: (\d+)
2f50: 20 65 72 72 6f 72 73 2e 2a 7d 20 24 6c 69 6e 65   errors.*} $line
2f60: 20 61 6c 6c 20 63 6e 74 5d 20 26 26 20 24 63 6e   all cnt] && $cn
2f70: 74 3e 30 7d 20 7b 0a 20 20 20 20 20 20 69 6e 63  t>0} {.      inc
2f80: 72 20 3a 3a 4e 45 52 52 43 41 53 45 0a 20 20 20  r ::NERRCASE.   
2f90: 20 20 20 69 66 20 7b 24 72 63 3d 3d 30 7d 20 7b     if {$rc==0} {
2fa0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 72 63 20  .        set rc 
2fb0: 31 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 72  1.        set er
2fc0: 72 6d 73 67 20 24 61 6c 6c 0a 20 20 20 20 20 20  rmsg $all.      
2fd0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b  }.    }.    if {
2fe0: 5b 72 65 67 65 78 70 20 7b 5e 56 45 52 53 49 4f  [regexp {^VERSIO
2ff0: 4e 3a 20 33 5c 2e 5c 64 2b 2e 5c 64 2b 7d 20 24  N: 3\.\d+.\d+} $
3000: 6c 69 6e 65 5d 7d 20 7b 0a 20 20 20 20 20 20 73  line]} {.      s
3010: 65 74 20 76 20 5b 73 74 72 69 6e 67 20 72 61 6e  et v [string ran
3020: 67 65 20 24 6c 69 6e 65 20 39 20 65 6e 64 5d 0a  ge $line 9 end].
3030: 20 20 20 20 20 20 69 66 20 7b 24 3a 3a 53 51 4c        if {$::SQL
3040: 49 54 45 5f 56 45 52 53 49 4f 4e 20 65 71 20 22  ITE_VERSION eq "
3050: 22 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  "} {.        set
3060: 20 3a 3a 53 51 4c 49 54 45 5f 56 45 52 53 49 4f   ::SQLITE_VERSIO
3070: 4e 20 24 76 0a 20 20 20 20 20 20 7d 20 65 6c 73  N $v.      } els
3080: 65 69 66 20 7b 24 3a 3a 53 51 4c 49 54 45 5f 56  eif {$::SQLITE_V
3090: 45 52 53 49 4f 4e 20 6e 65 20 24 76 7d 20 7b 0a  ERSION ne $v} {.
30a0: 20 20 20 20 20 20 20 20 73 65 74 20 72 63 20 31          set rc 1
30b0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 72 72  .        set err
30c0: 6d 73 67 20 22 76 65 72 73 69 6f 6e 20 63 6f 6e  msg "version con
30d0: 66 6c 69 63 74 3a 20 7b 24 3a 3a 53 51 4c 49 54  flict: {$::SQLIT
30e0: 45 5f 56 45 52 53 49 4f 4e 7d 20 76 73 2e 20 7b  E_VERSION} vs. {
30f0: 24 76 7d 22 0a 20 20 20 20 20 20 7d 0a 20 20 20  $v}".      }.   
3100: 20 7d 0a 20 20 7d 0a 20 20 63 6c 6f 73 65 20 24   }.  }.  close $
3110: 66 64 0a 20 20 69 66 20 7b 24 3a 3a 42 55 49 4c  fd.  if {$::BUIL
3120: 44 4f 4e 4c 59 7d 20 7b 0a 20 20 20 20 69 6e 63  DONLY} {.    inc
3130: 72 20 3a 3a 4e 54 45 53 54 43 41 53 45 0a 20 20  r ::NTESTCASE.  
3140: 20 20 69 66 20 7b 24 72 63 21 3d 30 7d 20 7b 0a    if {$rc!=0} {.
3150: 20 20 20 20 20 20 73 65 74 20 65 72 72 6d 73 67        set errmsg
3160: 20 22 42 75 69 6c 64 20 66 61 69 6c 65 64 22 0a   "Build failed".
3170: 20 20 20 20 7d 0a 20 20 7d 20 65 6c 73 65 69 66      }.  } elseif
3180: 20 7b 21 24 73 65 65 6e 7d 20 7b 0a 20 20 20 20   {!$seen} {.    
3190: 73 65 74 20 72 63 20 31 0a 20 20 20 20 73 65 74  set rc 1.    set
31a0: 20 65 72 72 6d 73 67 20 22 54 65 73 74 20 64 69   errmsg "Test di
31b0: 64 20 6e 6f 74 20 63 6f 6d 70 6c 65 74 65 22 0a  d not complete".
31c0: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 72 65      if {[file re
31d0: 61 64 61 62 6c 65 20 63 6f 72 65 5d 7d 20 7b 0a  adable core]} {.
31e0: 20 20 20 20 20 20 61 70 70 65 6e 64 20 65 72 72        append err
31f0: 6d 73 67 20 22 20 2d 20 63 6f 72 65 20 66 69 6c  msg " - core fil
3200: 65 20 65 78 69 73 74 73 22 0a 20 20 20 20 7d 0a  e exists".    }.
3210: 20 20 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d    }.}..#--------
3220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3260: 2d 2d 0a 23 20 54 68 69 73 20 63 6f 6d 6d 61 6e  --.# This comman
3270: 64 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 73 20  d is invoked as 
3280: 74 68 65 20 5b 6d 61 69 6e 5d 20 72 6f 75 74 69  the [main] routi
3290: 6e 65 20 66 6f 72 20 73 63 72 69 70 74 73 20 72  ne for scripts r
32a0: 75 6e 20 77 69 74 68 20 74 68 65 0a 23 20 22 2d  un with the.# "-
32b0: 2d 73 6c 61 76 65 22 20 6f 70 74 69 6f 6e 2e 0a  -slave" option..
32c0: 23 0a 23 20 46 6f 72 20 65 61 63 68 20 74 65 73  #.# For each tes
32d0: 74 20 28 69 2e 65 2e 20 22 63 6f 6e 66 69 67 75  t (i.e. "configu
32e0: 72 65 20 26 26 20 6d 61 6b 65 20 74 65 73 74 22  re && make test"
32f0: 20 65 78 65 63 75 74 69 6f 6e 29 2c 20 74 68 65   execution), the
3300: 20 6d 61 73 74 65 72 0a 23 20 70 72 6f 63 65 73   master.# proces
3310: 73 20 73 70 61 77 6e 73 20 61 20 70 72 6f 63 65  s spawns a proce
3320: 73 73 20 77 69 74 68 20 74 68 65 20 2d 2d 73 6c  ss with the --sl
3330: 61 76 65 20 6f 70 74 69 6f 6e 2e 20 49 74 20 77  ave option. It w
3340: 72 69 74 65 73 20 74 77 6f 20 6c 69 6e 65 73 0a  rites two lines.
3350: 23 20 74 6f 20 74 68 65 20 73 6c 61 76 65 73 20  # to the slaves 
3360: 73 74 64 69 6e 2e 20 54 68 65 20 66 69 72 73 74  stdin. The first
3370: 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
3380: 6c 65 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  le boolean value
3390: 20 2d 20 74 68 65 0a 23 20 76 61 6c 75 65 20 6f   - the.# value o
33a0: 66 20 3a 3a 54 52 41 43 45 20 74 6f 20 75 73 65  f ::TRACE to use
33b0: 20 69 6e 20 74 68 65 20 73 6c 61 76 65 20 73 63   in the slave sc
33c0: 72 69 70 74 2e 20 54 68 65 20 73 65 63 6f 6e 64  ript. The second
33d0: 20 6c 69 6e 65 20 63 6f 6e 74 61 69 6e 73 20 61   line contains a
33e0: 0a 23 20 6c 69 73 74 20 69 6e 20 74 68 65 20 73  .# list in the s
33f0: 61 6d 65 20 66 6f 72 6d 61 74 20 61 73 20 65 61  ame format as ea
3400: 63 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  ch element of th
3410: 65 20 6c 69 73 74 20 70 61 73 73 65 64 20 74 6f  e list passed to
3420: 20 74 68 65 0a 23 20 5b 72 75 6e 5f 61 6c 6c 5f   the.# [run_all_
3430: 74 65 73 74 5f 73 75 69 74 65 73 5d 20 63 6f 6d  test_suites] com
3440: 6d 61 6e 64 20 69 6e 20 74 68 65 20 6d 61 73 74  mand in the mast
3450: 65 72 20 70 72 6f 63 65 73 73 2e 0a 23 0a 23 20  er process..#.# 
3460: 54 68 65 20 73 6c 61 76 65 20 74 68 65 6e 20 72  The slave then r
3470: 75 6e 73 20 74 68 65 20 22 63 6f 6e 66 69 67 75  uns the "configu
3480: 72 65 20 26 26 20 6d 61 6b 65 20 74 65 73 74 22  re && make test"
3490: 20 63 6f 6d 6d 61 6e 64 73 20 73 70 65 63 69 66   commands specif
34a0: 69 65 64 2e 20 49 74 0a 23 20 65 78 69 74 73 20  ied. It.# exits 
34b0: 73 75 63 63 65 73 73 66 75 6c 6c 79 20 69 66 20  successfully if 
34c0: 74 68 65 20 74 65 73 74 73 20 70 61 73 73 65 73  the tests passes
34d0: 2c 20 6f 72 20 77 69 74 68 20 61 20 6e 6f 6e 2d  , or with a non-
34e0: 7a 65 72 6f 20 65 72 72 6f 72 20 63 6f 64 65 0a  zero error code.
34f0: 23 20 6f 74 68 65 72 77 69 73 65 2e 0a 23 0a 70  # otherwise..#.p
3500: 72 6f 63 20 72 75 6e 5f 73 6c 61 76 65 5f 74 65  roc run_slave_te
3510: 73 74 20 7b 7d 20 7b 0a 20 20 23 20 52 65 61 64  st {} {.  # Read
3520: 20 67 6c 6f 62 61 6c 20 76 61 72 73 20 63 6f 6e   global vars con
3530: 66 69 67 75 72 61 74 69 6f 6e 20 66 72 6f 6d 20  figuration from 
3540: 73 74 64 69 6e 2e 0a 20 20 73 65 74 20 56 20 5b  stdin..  set V [
3550: 67 65 74 73 20 73 74 64 69 6e 5d 0a 20 20 66 6f  gets stdin].  fo
3560: 72 65 61 63 68 20 7b 3a 3a 54 52 41 43 45 20 3a  reach {::TRACE :
3570: 3a 4d 53 56 43 20 3a 3a 44 52 59 52 55 4e 20 3a  :MSVC ::DRYRUN :
3580: 3a 4b 45 45 50 46 49 4c 45 53 7d 20 24 56 20 7b  :KEEPFILES} $V {
3590: 7d 0a 0a 20 20 23 20 52 65 61 64 20 74 68 65 20  }..  # Read the 
35a0: 74 65 73 74 2d 73 75 69 74 65 20 63 6f 6e 66 69  test-suite confi
35b0: 67 75 72 61 74 69 6f 6e 20 66 72 6f 6d 20 73 74  guration from st
35c0: 64 69 6e 2e 0a 20 20 73 65 74 20 54 20 5b 67 65  din..  set T [ge
35d0: 74 73 20 73 74 64 69 6e 5d 0a 20 20 66 6f 72 65  ts stdin].  fore
35e0: 61 63 68 20 7b 74 69 74 6c 65 20 64 69 72 20 63  ach {title dir c
35f0: 6f 6e 66 69 67 4f 70 74 73 20 74 65 73 74 74 61  onfigOpts testta
3600: 72 67 65 74 20 6d 61 6b 65 4f 70 74 73 20 63 66  rget makeOpts cf
3610: 6c 61 67 73 20 6f 70 74 73 7d 20 24 54 20 7b 7d  lags opts} $T {}
3620: 0a 0a 20 20 23 20 43 72 65 61 74 65 20 61 6e 64  ..  # Create and
3630: 20 73 77 69 74 63 68 20 74 6f 20 74 68 65 20 74   switch to the t
3640: 65 73 74 20 64 69 72 65 63 74 6f 72 79 2e 0a 20  est directory.. 
3650: 20 73 65 74 20 6e 6f 72 6d 61 6c 64 69 72 20 5b   set normaldir [
3660: 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 24  file normalize $
3670: 64 69 72 5d 0a 20 20 73 65 74 20 3a 3a 65 6e 76  dir].  set ::env
3680: 28 53 51 4c 49 54 45 5f 54 4d 50 44 49 52 29 20  (SQLITE_TMPDIR) 
3690: 24 6e 6f 72 6d 61 6c 64 69 72 0a 20 20 74 72 61  $normaldir.  tra
36a0: 63 65 5f 63 6d 64 20 66 69 6c 65 20 6d 6b 64 69  ce_cmd file mkdi
36b0: 72 20 24 64 69 72 0a 20 20 74 72 61 63 65 5f 63  r $dir.  trace_c
36c0: 6d 64 20 63 64 20 24 64 69 72 0a 20 20 63 61 74  md cd $dir.  cat
36d0: 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20  ch {file delete 
36e0: 63 6f 72 65 7d 0a 20 20 63 61 74 63 68 20 7b 66  core}.  catch {f
36f0: 69 6c 65 20 64 65 6c 65 74 65 20 74 65 73 74 2e  ile delete test.
3700: 6c 6f 67 7d 0a 0a 20 20 23 20 52 75 6e 20 74 68  log}..  # Run th
3710: 65 20 22 2e 2f 63 6f 6e 66 69 67 75 72 65 20 26  e "./configure &
3720: 26 20 6d 61 6b 65 22 20 63 6f 6d 6d 61 6e 64 73  & make" commands
3730: 2e 0a 20 20 73 65 74 20 72 63 20 30 0a 20 20 73  ..  set rc 0.  s
3740: 65 74 20 72 63 20 5b 63 61 74 63 68 20 5b 63 6f  et rc [catch [co
3750: 6e 66 69 67 75 72 65 43 6f 6d 6d 61 6e 64 20 24  nfigureCommand $
3760: 63 6f 6e 66 69 67 4f 70 74 73 5d 5d 0a 20 20 69  configOpts]].  i
3770: 66 20 7b 21 24 72 63 7d 20 7b 0a 20 20 20 20 69  f {!$rc} {.    i
3780: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists 
3790: 3a 3a 65 6e 76 28 54 43 4c 53 48 5f 43 4d 44 29  ::env(TCLSH_CMD)
37a0: 5d 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 73  ]} {.      set s
37b0: 61 76 65 64 45 6e 76 28 54 43 4c 53 48 5f 43 4d  avedEnv(TCLSH_CM
37c0: 44 29 20 24 3a 3a 65 6e 76 28 54 43 4c 53 48 5f  D) $::env(TCLSH_
37d0: 43 4d 44 29 0a 20 20 20 20 7d 20 65 6c 73 65 20  CMD).    } else 
37e0: 7b 0a 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e  {.      unset -n
37f0: 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45  ocomplain savedE
3800: 6e 76 28 54 43 4c 53 48 5f 43 4d 44 29 0a 20 20  nv(TCLSH_CMD).  
3810: 20 20 7d 0a 20 20 20 20 73 65 74 20 3a 3a 65 6e    }.    set ::en
3820: 76 28 54 43 4c 53 48 5f 43 4d 44 29 20 5b 66 69  v(TCLSH_CMD) [fi
3830: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 69  le nativename [i
3840: 6e 66 6f 20 6e 61 6d 65 6f 66 65 78 65 63 75 74  nfo nameofexecut
3850: 61 62 6c 65 5d 5d 0a 20 20 20 20 73 65 74 20 72  able]].    set r
3860: 63 20 5b 63 61 74 63 68 20 5b 6d 61 6b 65 43 6f  c [catch [makeCo
3870: 6d 6d 61 6e 64 20 24 74 65 73 74 74 61 72 67 65  mmand $testtarge
3880: 74 20 24 6d 61 6b 65 4f 70 74 73 20 24 63 66 6c  t $makeOpts $cfl
3890: 61 67 73 20 24 6f 70 74 73 5d 5d 0a 20 20 20 20  ags $opts]].    
38a0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
38b0: 20 73 61 76 65 64 45 6e 76 28 54 43 4c 53 48 5f   savedEnv(TCLSH_
38c0: 43 4d 44 29 5d 7d 20 7b 0a 20 20 20 20 20 20 73  CMD)]} {.      s
38d0: 65 74 20 3a 3a 65 6e 76 28 54 43 4c 53 48 5f 43  et ::env(TCLSH_C
38e0: 4d 44 29 20 24 73 61 76 65 64 45 6e 76 28 54 43  MD) $savedEnv(TC
38f0: 4c 53 48 5f 43 4d 44 29 0a 20 20 20 20 7d 20 65  LSH_CMD).    } e
3900: 6c 73 65 20 7b 0a 20 20 20 20 20 20 75 6e 73 65  lse {.      unse
3910: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a  t -nocomplain ::
3920: 65 6e 76 28 54 43 4c 53 48 5f 43 4d 44 29 0a 20  env(TCLSH_CMD). 
3930: 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 23 20 43 6c     }.  }..  # Cl
3940: 65 61 6e 20 75 70 20 6c 6f 74 73 20 6f 66 20 65  ean up lots of e
3950: 78 74 72 61 20 66 69 6c 65 73 20 69 66 20 2d 2d  xtra files if --
3960: 6b 65 65 70 20 77 61 73 20 6e 6f 74 20 73 70 65  keep was not spe
3970: 63 69 66 69 65 64 2e 0a 20 20 69 66 20 7b 24 3a  cified..  if {$:
3980: 3a 4b 45 45 50 46 49 4c 45 53 3d 3d 30 7d 20 7b  :KEEPFILES==0} {
3990: 20 63 6c 65 61 6e 75 70 20 24 6e 6f 72 6d 61 6c   cleanup $normal
39a0: 64 69 72 20 7d 0a 0a 20 20 23 20 45 78 69 73 20  dir }..  # Exis 
39b0: 73 75 63 63 65 73 73 66 75 6c 6c 79 20 69 66 20  successfully if 
39c0: 74 68 65 20 74 65 73 74 20 70 61 73 73 65 64 2c  the test passed,
39d0: 20 6f 72 20 77 69 74 68 20 61 20 6e 6f 6e 2d 7a   or with a non-z
39e0: 65 72 6f 20 65 72 72 6f 72 20 63 6f 64 65 0a 20  ero error code. 
39f0: 20 23 20 6f 74 68 65 72 77 69 73 65 2e 0a 20 20   # otherwise..  
3a00: 65 78 69 74 20 24 72 63 0a 7d 0a 0a 23 20 54 68  exit $rc.}..# Th
3a10: 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e  is command is in
3a20: 76 6f 6b 65 64 20 69 6e 20 74 68 65 20 6d 61 73  voked in the mas
3a30: 74 65 72 20 70 72 6f 63 65 73 73 20 65 61 63 68  ter process each
3a40: 20 74 69 6d 65 20 61 20 73 6c 61 76 65 0a 23 20   time a slave.# 
3a50: 66 69 6c 65 2d 64 65 73 63 72 69 70 74 6f 72 20  file-descriptor 
3a60: 69 73 20 72 65 61 64 61 62 6c 65 2e 0a 23 0a 70  is readable..#.p
3a70: 72 6f 63 20 73 6c 61 76 65 5f 66 69 6c 65 65 76  roc slave_fileev
3a80: 65 6e 74 20 7b 66 64 20 54 20 74 6d 31 7d 20 7b  ent {fd T tm1} {
3a90: 0a 20 20 67 6c 6f 62 61 6c 20 47 0a 20 20 66 6f  .  global G.  fo
3aa0: 72 65 61 63 68 20 7b 74 69 74 6c 65 20 64 69 72  reach {title dir
3ab0: 20 63 6f 6e 66 69 67 4f 70 74 73 20 74 65 73 74   configOpts test
3ac0: 74 61 72 67 65 74 20 6d 61 6b 65 4f 70 74 73 20  target makeOpts 
3ad0: 63 66 6c 61 67 73 20 6f 70 74 73 7d 20 24 54 20  cflags opts} $T 
3ae0: 7b 7d 0a 0a 20 20 69 66 20 7b 5b 65 6f 66 20 24  {}..  if {[eof $
3af0: 66 64 5d 7d 20 7b 0a 20 20 20 20 66 63 6f 6e 66  fd]} {.    fconf
3b00: 69 67 75 72 65 20 24 66 64 20 2d 62 6c 6f 63 6b  igure $fd -block
3b10: 69 6e 67 20 31 0a 20 20 20 20 73 65 74 20 72 63  ing 1.    set rc
3b20: 20 5b 63 61 74 63 68 20 7b 20 63 6c 6f 73 65 20   [catch { close 
3b30: 24 66 64 20 7d 5d 0a 0a 20 20 20 20 73 65 74 20  $fd }]..    set 
3b40: 65 72 72 6d 73 67 20 7b 7d 0a 20 20 20 20 73 65  errmsg {}.    se
3b50: 74 20 6c 6f 67 66 69 6c 65 20 5b 66 69 6c 65 20  t logfile [file 
3b60: 6a 6f 69 6e 20 24 64 69 72 20 74 65 73 74 2e 6c  join $dir test.l
3b70: 6f 67 5d 0a 20 20 20 20 69 66 20 7b 5b 66 69 6c  og].    if {[fil
3b80: 65 20 65 78 69 73 74 73 20 24 6c 6f 67 66 69 6c  e exists $logfil
3b90: 65 5d 7d 20 7b 0a 20 20 20 20 20 20 63 6f 75 6e  e]} {.      coun
3ba0: 74 5f 74 65 73 74 73 5f 61 6e 64 5f 65 72 72 6f  t_tests_and_erro
3bb0: 72 73 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64  rs [file join $d
3bc0: 69 72 20 74 65 73 74 2e 6c 6f 67 5d 20 72 63 20  ir test.log] rc 
3bd0: 65 72 72 6d 73 67 0a 20 20 20 20 7d 20 65 6c 73  errmsg.    } els
3be0: 65 69 66 20 7b 24 72 63 3d 3d 30 20 26 26 20 21  eif {$rc==0 && !
3bf0: 24 3a 3a 44 52 59 52 55 4e 7d 20 7b 0a 20 20 20  $::DRYRUN} {.   
3c00: 20 20 20 73 65 74 20 72 63 20 31 0a 20 20 20 20     set rc 1.    
3c10: 20 20 73 65 74 20 65 72 72 6d 73 67 20 22 6e 6f    set errmsg "no
3c20: 20 74 65 73 74 2e 6c 6f 67 20 66 69 6c 65 2e 2e   test.log file..
3c30: 2e 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  .".    }..    if
3c40: 20 7b 21 24 3a 3a 54 52 41 43 45 7d 20 7b 0a 20   {!$::TRACE} {. 
3c50: 20 20 20 20 20 73 65 74 20 74 6d 32 20 5b 63 6c       set tm2 [cl
3c60: 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 20 20 20  ock seconds].   
3c70: 20 20 20 73 65 74 20 68 6f 75 72 73 20 5b 65 78     set hours [ex
3c80: 70 72 20 7b 28 24 74 6d 32 2d 24 74 6d 31 29 2f  pr {($tm2-$tm1)/
3c90: 33 36 30 30 7d 5d 0a 20 20 20 20 20 20 73 65 74  3600}].      set
3ca0: 20 6d 69 6e 75 74 65 73 20 5b 65 78 70 72 20 7b   minutes [expr {
3cb0: 28 28 24 74 6d 32 2d 24 74 6d 31 29 2f 36 30 29  (($tm2-$tm1)/60)
3cc0: 25 36 30 7d 5d 0a 20 20 20 20 20 20 73 65 74 20  %60}].      set 
3cd0: 73 65 63 6f 6e 64 73 20 5b 65 78 70 72 20 7b 28  seconds [expr {(
3ce0: 24 74 6d 32 2d 24 74 6d 31 29 25 36 30 7d 5d 0a  $tm2-$tm1)%60}].
3cf0: 20 20 20 20 20 20 73 65 74 20 74 6d 20 5b 66 6f        set tm [fo
3d00: 72 6d 61 74 20 28 25 30 32 64 3a 25 30 32 64 3a  rmat (%02d:%02d:
3d10: 25 30 32 64 29 20 24 68 6f 75 72 73 20 24 6d 69  %02d) $hours $mi
3d20: 6e 75 74 65 73 20 24 73 65 63 6f 6e 64 73 5d 0a  nutes $seconds].
3d30: 0a 20 20 20 20 20 20 69 66 20 7b 24 72 63 7d 20  .      if {$rc} 
3d40: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 74  {.        set st
3d50: 61 74 75 73 20 46 41 49 4c 0a 20 20 20 20 20 20  atus FAIL.      
3d60: 20 20 69 6e 63 72 20 3a 3a 4e 45 52 52 0a 20 20    incr ::NERR.  
3d70: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
3d80: 20 20 20 20 20 73 65 74 20 73 74 61 74 75 73 20       set status 
3d90: 4f 6b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  Ok.      }..    
3da0: 20 20 73 65 74 20 6e 20 5b 73 74 72 69 6e 67 20    set n [string 
3db0: 6c 65 6e 67 74 68 20 24 74 69 74 6c 65 5d 0a 20  length $title]. 
3dc0: 20 20 20 20 20 69 66 20 7b 24 3a 3a 50 52 4f 47       if {$::PROG
3dd0: 52 45 53 53 5f 4d 53 47 53 7d 20 7b 0a 20 20 20  RESS_MSGS} {.   
3de0: 20 20 20 20 20 50 55 54 53 20 22 66 69 6e 69 73       PUTS "finis
3df0: 68 65 64 3a 20 24 7b 74 69 74 6c 65 7d 5b 73 74  hed: ${title}[st
3e00: 72 69 6e 67 20 72 65 70 65 61 74 20 2e 20 5b 65  ring repeat . [e
3e10: 78 70 72 20 7b 35 33 2d 24 6e 7d 5d 5d 20 24 73  xpr {53-$n}]] $s
3e20: 74 61 74 75 73 20 24 74 6d 22 0a 20 20 20 20 20  tatus $tm".     
3e30: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
3e40: 20 20 50 55 54 53 20 22 24 7b 74 69 74 6c 65 7d    PUTS "${title}
3e50: 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 2e  [string repeat .
3e60: 20 5b 65 78 70 72 20 7b 36 33 2d 24 6e 7d 5d 5d   [expr {63-$n}]]
3e70: 20 24 73 74 61 74 75 73 20 24 74 6d 22 0a 20 20   $status $tm".  
3e80: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 20 7b      }.      if {
3e90: 24 65 72 72 6d 73 67 21 3d 22 22 7d 20 7b 50 55  $errmsg!=""} {PU
3ea0: 54 53 20 22 20 20 20 20 20 24 65 72 72 6d 73 67  TS "     $errmsg
3eb0: 22 7d 0a 20 20 20 20 20 20 66 6c 75 73 68 20 73  "}.      flush s
3ec0: 74 64 6f 75 74 0a 20 20 20 20 7d 0a 0a 20 20 20  tdout.    }..   
3ed0: 20 69 6e 63 72 20 47 28 6e 4a 6f 62 29 20 2d 31   incr G(nJob) -1
3ee0: 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
3ef0: 73 65 74 20 6c 69 6e 65 20 5b 67 65 74 73 20 24  set line [gets $
3f00: 66 64 5d 0a 20 20 20 20 69 66 20 7b 5b 73 74 72  fd].    if {[str
3f10: 69 6e 67 20 74 72 69 6d 20 24 6c 69 6e 65 5d 20  ing trim $line] 
3f20: 21 3d 20 22 22 7d 20 7b 0a 20 20 20 20 20 20 70  != ""} {.      p
3f30: 75 74 73 20 22 54 72 61 63 65 20 20 20 3a 20 24  uts "Trace   : $
3f40: 74 69 74 6c 65 20 2d 20 5c 22 24 6c 69 6e 65 5c  title - \"$line\
3f50: 22 22 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  "".    }.  }.}..
3f60: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
3f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68  -----------.# Th
3fb0: 65 20 6f 6e 6c 79 20 61 72 67 75 6d 65 6e 74 20  e only argument 
3fc0: 70 61 73 73 65 64 20 74 6f 20 74 68 69 73 20 66  passed to this f
3fd0: 75 6e 63 74 69 6f 6e 20 69 73 20 61 20 6c 69 73  unction is a lis
3fe0: 74 20 6f 66 20 74 65 73 74 2d 73 75 69 74 65 73  t of test-suites
3ff0: 20 74 6f 0a 23 20 72 75 6e 2e 20 45 61 63 68 20   to.# run. Each 
4000: 22 74 65 73 74 2d 73 75 69 74 65 22 20 69 73 20  "test-suite" is 
4010: 69 74 73 65 6c 66 20 61 20 6c 69 73 74 20 63 6f  itself a list co
4020: 6e 73 69 73 74 69 6e 67 20 6f 66 20 74 68 65 20  nsisting of the 
4030: 66 6f 6c 6c 6f 77 69 6e 67 0a 23 20 65 6c 65 6d  following.# elem
4040: 65 6e 74 73 3a 0a 23 0a 23 20 20 20 2a 20 54 65  ents:.#.#   * Te
4050: 73 74 20 74 69 74 6c 65 20 28 66 6f 72 20 64 69  st title (for di
4060: 73 70 6c 61 79 29 2e 0a 23 20 20 20 2a 20 54 68  splay)..#   * Th
4070: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 69  e name of the di
4080: 72 65 63 74 6f 72 79 20 74 6f 20 72 75 6e 20 74  rectory to run t
4090: 68 65 20 74 65 73 74 20 69 6e 2e 0a 23 20 20 20  he test in..#   
40a0: 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 66  * The argument f
40b0: 6f 72 20 5b 63 6f 6e 66 69 67 75 72 65 43 6f 6d  or [configureCom
40c0: 6d 61 6e 64 5d 0a 23 20 20 20 2a 20 54 68 65 20  mand].#   * The 
40d0: 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 66  first argument f
40e0: 6f 72 20 5b 6d 61 6b 65 43 6f 6d 6d 61 6e 64 5d  or [makeCommand]
40f0: 0a 23 20 20 20 2a 20 54 68 65 20 73 65 63 6f 6e  .#   * The secon
4100: 64 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 5b  d argument for [
4110: 6d 61 6b 65 43 6f 6d 6d 61 6e 64 5d 0a 23 20 20  makeCommand].#  
4120: 20 2a 20 54 68 65 20 74 68 69 72 64 20 61 72 67   * The third arg
4130: 75 6d 65 6e 74 20 66 6f 72 20 5b 6d 61 6b 65 43  ument for [makeC
4140: 6f 6d 6d 61 6e 64 5d 0a 23 0a 70 72 6f 63 20 72  ommand].#.proc r
4150: 75 6e 5f 61 6c 6c 5f 74 65 73 74 5f 73 75 69 74  un_all_test_suit
4160: 65 73 20 7b 61 6c 6c 74 65 73 74 73 7d 20 7b 0a  es {alltests} {.
4170: 20 20 67 6c 6f 62 61 6c 20 47 0a 20 20 73 65 74    global G.  set
4180: 20 74 65 73 74 73 20 24 61 6c 6c 74 65 73 74 73   tests $alltests
4190: 0a 0a 20 20 73 65 74 20 47 28 6e 4a 6f 62 29 20  ..  set G(nJob) 
41a0: 30 0a 0a 20 20 77 68 69 6c 65 20 7b 5b 6c 6c 65  0..  while {[lle
41b0: 6e 67 74 68 20 24 74 65 73 74 73 5d 3e 30 20 7c  ngth $tests]>0 |
41c0: 7c 20 24 47 28 6e 4a 6f 62 29 3e 30 7d 20 7b 0a  | $G(nJob)>0} {.
41d0: 20 20 20 20 69 66 20 7b 24 47 28 6e 4a 6f 62 29      if {$G(nJob)
41e0: 3e 3d 24 3a 3a 4a 4f 42 53 20 7c 7c 20 5b 6c 6c  >=$::JOBS || [ll
41f0: 65 6e 67 74 68 20 24 74 65 73 74 73 5d 3d 3d 30  ength $tests]==0
4200: 7d 20 7b 0a 20 20 20 20 20 20 76 77 61 69 74 20  } {.      vwait 
4210: 47 28 6e 4a 6f 62 29 0a 20 20 20 20 7d 0a 0a 20  G(nJob).    }.. 
4220: 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20     if {[llength 
4230: 24 74 65 73 74 73 5d 3e 30 7d 20 7b 0a 20 20 20  $tests]>0} {.   
4240: 20 20 20 73 65 74 20 54 20 5b 6c 69 6e 64 65 78     set T [lindex
4250: 20 24 74 65 73 74 73 20 30 5d 0a 20 20 20 20 20   $tests 0].     
4260: 20 73 65 74 20 74 65 73 74 73 20 5b 6c 72 61 6e   set tests [lran
4270: 67 65 20 24 74 65 73 74 73 20 31 20 65 6e 64 5d  ge $tests 1 end]
4280: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 7b  .      foreach {
4290: 74 69 74 6c 65 20 64 69 72 20 63 6f 6e 66 69 67  title dir config
42a0: 4f 70 74 73 20 74 65 73 74 74 61 72 67 65 74 20  Opts testtarget 
42b0: 6d 61 6b 65 4f 70 74 73 20 63 66 6c 61 67 73 20  makeOpts cflags 
42c0: 6f 70 74 73 7d 20 24 54 20 7b 7d 0a 20 20 20 20  opts} $T {}.    
42d0: 20 20 69 66 20 7b 24 3a 3a 50 52 4f 47 52 45 53    if {$::PROGRES
42e0: 53 5f 4d 53 47 53 20 26 26 20 21 24 3a 3a 54 52  S_MSGS && !$::TR
42f0: 41 43 45 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  ACE} {.        s
4300: 65 74 20 6e 20 5b 73 74 72 69 6e 67 20 6c 65 6e  et n [string len
4310: 67 74 68 20 24 74 69 74 6c 65 5d 0a 20 20 20 20  gth $title].    
4320: 20 20 20 20 50 55 54 53 20 22 73 74 61 72 74 69      PUTS "starti
4330: 6e 67 3a 20 24 7b 74 69 74 6c 65 7d 20 61 74 20  ng: ${title} at 
4340: 5b 6e 6f 77 5d 22 0a 20 20 20 20 20 20 20 20 66  [now]".        f
4350: 6c 75 73 68 20 73 74 64 6f 75 74 0a 20 20 20 20  lush stdout.    
4360: 20 20 7d 0a 0a 20 20 20 20 20 20 23 20 52 75 6e    }..      # Run
4370: 20 74 68 65 20 6a 6f 62 2e 0a 20 20 20 20 20 20   the job..      
4380: 23 0a 20 20 20 20 20 20 73 65 74 20 74 6d 31 20  #.      set tm1 
4390: 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0a  [clock seconds].
43a0: 20 20 20 20 20 20 69 6e 63 72 20 47 28 6e 4a 6f        incr G(nJo
43b0: 62 29 0a 20 20 20 20 20 20 73 65 74 20 73 63 72  b).      set scr
43c0: 69 70 74 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c  ipt [file normal
43d0: 69 7a 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74  ize [info script
43e0: 5d 5d 0a 20 20 20 20 20 20 73 65 74 20 66 64 20  ]].      set fd 
43f0: 5b 6f 70 65 6e 20 22 7c 5b 69 6e 66 6f 20 6e 61  [open "|[info na
4400: 6d 65 6f 66 65 78 65 63 75 74 61 62 6c 65 5d 20  meofexecutable] 
4410: 24 73 63 72 69 70 74 20 2d 2d 73 6c 61 76 65 22  $script --slave"
4420: 20 72 2b 5d 0a 20 20 20 20 20 20 66 63 6f 6e 66   r+].      fconf
4430: 69 67 75 72 65 20 24 66 64 20 2d 62 6c 6f 63 6b  igure $fd -block
4440: 69 6e 67 20 30 0a 20 20 20 20 20 20 66 69 6c 65  ing 0.      file
4450: 65 76 65 6e 74 20 24 66 64 20 72 65 61 64 61 62  event $fd readab
4460: 6c 65 20 5b 6c 69 73 74 20 73 6c 61 76 65 5f 66  le [list slave_f
4470: 69 6c 65 65 76 65 6e 74 20 24 66 64 20 24 54 20  ileevent $fd $T 
4480: 24 74 6d 31 5d 0a 20 20 20 20 20 20 70 75 74 73  $tm1].      puts
4490: 20 24 66 64 20 5b 6c 69 73 74 20 24 3a 3a 54 52   $fd [list $::TR
44a0: 41 43 45 20 24 3a 3a 4d 53 56 43 20 24 3a 3a 44  ACE $::MSVC $::D
44b0: 52 59 52 55 4e 20 24 3a 3a 4b 45 45 50 46 49 4c  RYRUN $::KEEPFIL
44c0: 45 53 5d 0a 20 20 20 20 20 20 70 75 74 73 20 24  ES].      puts $
44d0: 66 64 20 5b 6c 69 73 74 20 7b 2a 7d 24 54 5d 0a  fd [list {*}$T].
44e0: 20 20 20 20 20 20 66 6c 75 73 68 20 24 66 64 0a        flush $fd.
44f0: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 70 72 6f      }.  }.}..pro
4500: 63 20 61 64 64 5f 74 65 73 74 5f 73 75 69 74 65  c add_test_suite
4510: 20 7b 6c 69 73 74 76 61 72 20 6e 61 6d 65 20 74   {listvar name t
4520: 65 73 74 74 61 72 67 65 74 20 63 6f 6e 66 69 67  esttarget config
4530: 7d 20 7b 0a 20 20 75 70 76 61 72 20 24 6c 69 73  } {.  upvar $lis
4540: 74 76 61 72 20 61 6c 6c 74 65 73 74 73 0a 0a 20  tvar alltests.. 
4550: 20 23 20 54 63 6c 20 76 61 72 69 61 62 6c 65 20   # Tcl variable 
4560: 24 6f 70 74 73 20 69 73 20 75 73 65 64 20 74 6f  $opts is used to
4570: 20 62 75 69 6c 64 20 75 70 20 74 68 65 20 76 61   build up the va
4580: 6c 75 65 20 75 73 65 64 20 74 6f 20 73 65 74 20  lue used to set 
4590: 74 68 65 0a 20 20 23 20 4f 50 54 53 20 4d 61 6b  the.  # OPTS Mak
45a0: 65 66 69 6c 65 20 76 61 72 69 61 62 6c 65 2e 20  efile variable. 
45b0: 56 61 72 69 61 62 6c 65 20 24 63 66 6c 61 67 73  Variable $cflags
45c0: 20 68 6f 6c 64 73 20 74 68 65 20 76 61 6c 75 65   holds the value
45d0: 20 66 6f 72 0a 20 20 23 20 43 46 4c 41 47 53 2e   for.  # CFLAGS.
45e0: 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 77 69   The makefile wi
45f0: 6c 6c 20 70 61 73 73 20 4f 50 54 53 20 74 6f 20  ll pass OPTS to 
4600: 62 6f 74 68 20 67 63 63 20 61 6e 64 20 6c 65 6d  both gcc and lem
4610: 6f 6e 2c 20 62 75 74 0a 20 20 23 20 43 46 4c 41  on, but.  # CFLA
4620: 47 53 20 69 73 20 6f 6e 6c 79 20 70 61 73 73 65  GS is only passe
4630: 64 20 74 6f 20 67 63 63 2e 0a 20 20 23 0a 20 20  d to gcc..  #.  
4640: 73 65 74 20 6d 61 6b 65 4f 70 74 73 20 22 22 0a  set makeOpts "".
4650: 20 20 73 65 74 20 63 66 6c 61 67 73 20 5b 65 78    set cflags [ex
4660: 70 72 20 7b 24 3a 3a 4d 53 56 43 20 3f 20 22 2d  pr {$::MSVC ? "-
4670: 5a 69 22 20 3a 20 22 2d 67 22 7d 5d 0a 20 20 73  Zi" : "-g"}].  s
4680: 65 74 20 6f 70 74 73 20 22 22 0a 20 20 73 65 74  et opts "".  set
4690: 20 74 69 74 6c 65 20 24 7b 6e 61 6d 65 7d 28 24   title ${name}($
46a0: 74 65 73 74 74 61 72 67 65 74 29 0a 20 20 73 65  testtarget).  se
46b0: 74 20 63 6f 6e 66 69 67 4f 70 74 73 20 24 3a 3a  t configOpts $::
46c0: 57 49 54 48 54 43 4c 0a 20 20 73 65 74 20 73 6b  WITHTCL.  set sk
46d0: 69 70 20 30 0a 0a 20 20 72 65 67 73 75 62 20 2d  ip 0..  regsub -
46e0: 61 6c 6c 20 7b 23 5b 5e 5c 6e 5d 2a 5c 6e 7d 20  all {#[^\n]*\n} 
46f0: 24 63 6f 6e 66 69 67 20 5c 6e 20 63 6f 6e 66 69  $config \n confi
4700: 67 0a 20 20 66 6f 72 65 61 63 68 20 61 72 67 20  g.  foreach arg 
4710: 24 63 6f 6e 66 69 67 20 7b 0a 20 20 20 20 69 66  $config {.    if
4720: 20 7b 24 73 6b 69 70 7d 20 7b 0a 20 20 20 20 20   {$skip} {.     
4730: 20 73 65 74 20 73 6b 69 70 20 30 0a 20 20 20 20   set skip 0.    
4740: 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 7d    continue.    }
4750: 0a 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70  .    if {[regexp
4760: 20 7b 5e 2d 5b 55 44 5d 7d 20 24 61 72 67 5d 7d   {^-[UD]} $arg]}
4770: 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64   {.      lappend
4780: 20 6f 70 74 73 20 24 61 72 67 0a 20 20 20 20 7d   opts $arg.    }
4790: 20 65 6c 73 65 69 66 20 7b 5b 72 65 67 65 78 70   elseif {[regexp
47a0: 20 7b 5e 5b 41 2d 5a 5d 2b 3d 7d 20 24 61 72 67   {^[A-Z]+=} $arg
47b0: 5d 7d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65  ]} {.      lappe
47c0: 6e 64 20 74 65 73 74 74 61 72 67 65 74 20 24 61  nd testtarget $a
47d0: 72 67 0a 20 20 20 20 7d 20 65 6c 73 65 69 66 20  rg.    } elseif 
47e0: 7b 5b 72 65 67 65 78 70 20 7b 5e 69 66 3a 28 5b  {[regexp {^if:([
47f0: 61 2d 7a 5d 2b 29 28 2e 2a 29 7d 20 24 61 72 67  a-z]+)(.*)} $arg
4800: 20 61 6c 6c 20 6b 65 79 20 74 61 69 6c 5d 7d 20   all key tail]} 
4810: 7b 0a 20 20 20 20 20 20 23 20 41 72 67 75 6d 65  {.      # Argume
4820: 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  nts of the form 
4830: 27 69 66 3a 6f 73 3d 3d 22 4c 69 6e 75 78 22 27  'if:os=="Linux"'
4840: 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20   will cause the 
4850: 73 75 62 73 65 71 75 65 6e 74 0a 20 20 20 20 20  subsequent.     
4860: 20 23 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 62   # argument to b
4870: 65 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 65  e skipped if the
4880: 20 24 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6f   $tcl_platform(o
4890: 73 29 20 69 73 20 6e 6f 74 20 22 4c 69 6e 75 78  s) is not "Linux
48a0: 22 2c 20 66 6f 72 0a 20 20 20 20 20 20 23 20 65  ", for.      # e
48b0: 78 61 6d 70 6c 65 2e 2e 2e 0a 20 20 20 20 20 20  xample....      
48c0: 73 65 74 20 73 6b 69 70 20 5b 65 78 70 72 20 21  set skip [expr !
48d0: 28 5c 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  (\$::tcl_platfor
48e0: 6d 28 24 6b 65 79 29 24 74 61 69 6c 29 5d 0a 20  m($key)$tail)]. 
48f0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 72 65     } elseif {[re
4900: 67 65 78 70 20 7b 5e 2d 2d 28 65 6e 61 62 6c 65  gexp {^--(enable
4910: 7c 64 69 73 61 62 6c 65 29 2d 7d 20 24 61 72 67  |disable)-} $arg
4920: 5d 7d 20 7b 0a 20 20 20 20 20 20 69 66 20 7b 24  ]} {.      if {$
4930: 3a 3a 4d 53 56 43 7d 20 7b 0a 20 20 20 20 20 20  ::MSVC} {.      
4940: 20 20 69 66 20 7b 24 61 72 67 20 65 71 20 22 2d    if {$arg eq "-
4950: 2d 64 69 73 61 62 6c 65 2d 61 6d 61 6c 67 61 6d  -disable-amalgam
4960: 61 74 69 6f 6e 22 7d 20 7b 0a 20 20 20 20 20 20  ation"} {.      
4970: 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 61 6b 65      lappend make
4980: 4f 70 74 73 20 55 53 45 5f 41 4d 41 4c 47 41 4d  Opts USE_AMALGAM
4990: 41 54 49 4f 4e 3d 30 0a 20 20 20 20 20 20 20 20  ATION=0.        
49a0: 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20    continue.     
49b0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20     }.        if 
49c0: 7b 24 61 72 67 20 65 71 20 22 2d 2d 64 69 73 61  {$arg eq "--disa
49d0: 62 6c 65 2d 73 68 61 72 65 64 22 7d 20 7b 0a 20  ble-shared"} {. 
49e0: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
49f0: 20 6d 61 6b 65 4f 70 74 73 20 55 53 45 5f 43 52   makeOpts USE_CR
4a00: 54 5f 44 4c 4c 3d 30 20 44 59 4e 41 4d 49 43 5f  T_DLL=0 DYNAMIC_
4a10: 53 48 45 4c 4c 3d 30 0a 20 20 20 20 20 20 20 20  SHELL=0.        
4a20: 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20    continue.     
4a30: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20     }.        if 
4a40: 7b 24 61 72 67 20 65 71 20 22 2d 2d 65 6e 61 62  {$arg eq "--enab
4a50: 6c 65 2d 66 74 73 35 22 7d 20 7b 0a 20 20 20 20  le-fts5"} {.    
4a60: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 70        lappend op
4a70: 74 73 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42  ts -DSQLITE_ENAB
4a80: 4c 45 5f 46 54 53 35 0a 20 20 20 20 20 20 20 20  LE_FTS5.        
4a90: 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20    continue.     
4aa0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20     }.        if 
4ab0: 7b 24 61 72 67 20 65 71 20 22 2d 2d 65 6e 61 62  {$arg eq "--enab
4ac0: 6c 65 2d 6a 73 6f 6e 31 22 7d 20 7b 0a 20 20 20  le-json1"} {.   
4ad0: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6f         lappend o
4ae0: 70 74 73 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41  pts -DSQLITE_ENA
4af0: 42 4c 45 5f 4a 53 4f 4e 31 0a 20 20 20 20 20 20  BLE_JSON1.      
4b00: 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20      continue.   
4b10: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
4b20: 66 20 7b 24 61 72 67 20 65 71 20 22 2d 2d 65 6e  f {$arg eq "--en
4b30: 61 62 6c 65 2d 73 68 61 72 65 64 22 7d 20 7b 0a  able-shared"} {.
4b40: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
4b50: 64 20 6d 61 6b 65 4f 70 74 73 20 55 53 45 5f 43  d makeOpts USE_C
4b60: 52 54 5f 44 4c 4c 3d 31 20 44 59 4e 41 4d 49 43  RT_DLL=1 DYNAMIC
4b70: 5f 53 48 45 4c 4c 3d 31 0a 20 20 20 20 20 20 20  _SHELL=1.       
4b80: 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20     continue.    
4b90: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
4ba0: 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6e 66      lappend conf
4bb0: 69 67 4f 70 74 73 20 24 61 72 67 0a 20 20 20 20  igOpts $arg.    
4bc0: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 69  } else {.      i
4bd0: 66 20 7b 24 3a 3a 4d 53 56 43 7d 20 7b 0a 20 20  f {$::MSVC} {.  
4be0: 20 20 20 20 20 20 69 66 20 7b 24 61 72 67 20 65        if {$arg e
4bf0: 71 20 22 2d 67 22 7d 20 7b 0a 20 20 20 20 20 20  q "-g"} {.      
4c00: 20 20 20 20 6c 61 70 70 65 6e 64 20 63 66 6c 61      lappend cfla
4c10: 67 73 20 2d 5a 69 0a 20 20 20 20 20 20 20 20 20  gs -Zi.         
4c20: 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 20 20   continue.      
4c30: 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b    }.        if {
4c40: 5b 72 65 67 65 78 70 20 2d 2d 20 7b 5e 2d 4f 28  [regexp -- {^-O(
4c50: 5c 64 2b 29 24 7d 20 24 61 72 67 20 61 6c 6c 20  \d+)$} $arg all 
4c60: 6c 65 76 65 6c 5d 7d 20 74 68 65 6e 20 7b 0a 20  level]} then {. 
4c70: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
4c80: 20 6d 61 6b 65 4f 70 74 73 20 4f 50 54 49 4d 49   makeOpts OPTIMI
4c90: 5a 41 54 49 4f 4e 53 3d 24 6c 65 76 65 6c 0a 20  ZATIONS=$level. 
4ca0: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
4cb0: 65 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  e.        }.    
4cc0: 20 20 7d 0a 20 20 20 20 20 20 6c 61 70 70 65 6e    }.      lappen
4cd0: 64 20 63 66 6c 61 67 73 20 24 61 72 67 0a 20 20  d cflags $arg.  
4ce0: 20 20 7d 0a 20 20 7d 0a 0a 20 20 23 20 44 69 73    }.  }..  # Dis
4cf0: 61 62 6c 65 20 73 79 6e 63 20 74 6f 20 6d 61 6b  able sync to mak
4d00: 65 20 74 65 73 74 69 6e 67 20 66 61 73 74 65 72  e testing faster
4d10: 2e 0a 20 20 23 0a 20 20 6c 61 70 70 65 6e 64 20  ..  #.  lappend 
4d20: 6f 70 74 73 20 2d 44 53 51 4c 49 54 45 5f 4e 4f  opts -DSQLITE_NO
4d30: 5f 53 59 4e 43 3d 31 0a 0a 20 20 23 20 53 6f 6d  _SYNC=1..  # Som
4d40: 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  e configurations
4d50: 20 61 6c 72 65 61 64 79 20 73 65 74 20 48 41 56   already set HAV
4d60: 45 5f 55 53 4c 45 45 50 3b 20 69 6e 20 74 68 61  E_USLEEP; in tha
4d70: 74 20 63 61 73 65 2c 20 73 6b 69 70 20 69 74 2e  t case, skip it.
4d80: 0a 20 20 23 0a 20 20 69 66 20 7b 5b 6c 73 65 61  .  #.  if {[lsea
4d90: 72 63 68 20 2d 72 65 67 65 78 70 20 24 6f 70 74  rch -regexp $opt
4da0: 73 20 7b 5e 2d 44 48 41 56 45 5f 55 53 4c 45 45  s {^-DHAVE_USLEE
4db0: 50 28 3f 3a 3d 7c 24 29 7d 5d 3d 3d 2d 31 7d 20  P(?:=|$)}]==-1} 
4dc0: 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 70  {.    lappend op
4dd0: 74 73 20 2d 44 48 41 56 45 5f 55 53 4c 45 45 50  ts -DHAVE_USLEEP
4de0: 3d 31 0a 20 20 7d 0a 0a 20 20 23 20 41 64 64 20  =1.  }..  # Add 
4df0: 74 68 65 20 64 65 66 69 6e 65 20 66 6f 72 20 74  the define for t
4e00: 68 69 73 20 70 6c 61 74 66 6f 72 6d 2e 0a 20 20  his platform..  
4e10: 23 0a 20 20 69 66 20 7b 24 3a 3a 74 63 6c 5f 70  #.  if {$::tcl_p
4e20: 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d  latform(platform
4e30: 29 3d 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a  )=="windows"} {.
4e40: 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 70 74 73      lappend opts
4e50: 20 2d 44 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e   -DSQLITE_OS_WIN
4e60: 3d 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  =1.  } else {.  
4e70: 20 20 6c 61 70 70 65 6e 64 20 6f 70 74 73 20 2d    lappend opts -
4e80: 44 53 51 4c 49 54 45 5f 4f 53 5f 55 4e 49 58 3d  DSQLITE_OS_UNIX=
4e90: 31 0a 20 20 7d 0a 0a 20 20 23 20 53 65 74 20 74  1.  }..  # Set t
4ea0: 68 65 20 73 75 62 2d 64 69 72 65 63 74 6f 72 79  he sub-directory
4eb0: 20 74 6f 20 75 73 65 2e 0a 20 20 23 0a 20 20 73   to use..  #.  s
4ec0: 65 74 20 64 69 72 20 5b 73 74 72 69 6e 67 20 74  et dir [string t
4ed0: 6f 6c 6f 77 65 72 20 5b 73 74 72 69 6e 67 20 6d  olower [string m
4ee0: 61 70 20 7b 2d 20 5f 20 22 20 22 20 5f 7d 20 24  ap {- _ " " _} $
4ef0: 6e 61 6d 65 5d 5d 0a 0a 20 20 23 20 4a 6f 69 6e  name]]..  # Join
4f00: 20 6f 70 74 69 6f 6e 20 6c 69 73 74 73 20 69 6e   option lists in
4f10: 74 6f 20 73 74 72 69 6e 67 73 2c 20 75 73 69 6e  to strings, usin
4f20: 67 20 73 70 61 63 65 20 61 73 20 64 65 6c 69 6d  g space as delim
4f30: 69 74 65 72 2e 0a 20 20 23 0a 20 20 73 65 74 20  iter..  #.  set 
4f40: 6d 61 6b 65 4f 70 74 73 20 5b 6a 6f 69 6e 20 24  makeOpts [join $
4f50: 6d 61 6b 65 4f 70 74 73 20 22 20 22 5d 0a 20 20  makeOpts " "].  
4f60: 73 65 74 20 63 66 6c 61 67 73 20 20 20 5b 6a 6f  set cflags   [jo
4f70: 69 6e 20 24 63 66 6c 61 67 73 20 22 20 22 5d 0a  in $cflags " "].
4f80: 20 20 73 65 74 20 6f 70 74 73 20 20 20 20 20 5b    set opts     [
4f90: 6a 6f 69 6e 20 24 6f 70 74 73 20 22 20 22 5d 0a  join $opts " "].
4fa0: 0a 20 20 6c 61 70 70 65 6e 64 20 61 6c 6c 74 65  .  lappend allte
4fb0: 73 74 73 20 5b 6c 69 73 74 20 5c 0a 20 20 20 20  sts [list \.    
4fc0: 20 20 24 74 69 74 6c 65 20 24 64 69 72 20 24 63    $title $dir $c
4fd0: 6f 6e 66 69 67 4f 70 74 73 20 24 74 65 73 74 74  onfigOpts $testt
4fe0: 61 72 67 65 74 20 24 6d 61 6b 65 4f 70 74 73 20  arget $makeOpts 
4ff0: 24 63 66 6c 61 67 73 20 24 6f 70 74 73 5d 0a 7d  $cflags $opts].}
5000: 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  ..# The followin
5010: 67 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75  g procedure retu
5020: 72 6e 73 20 74 68 65 20 22 63 6f 6e 66 69 67 75  rns the "configu
5030: 72 65 22 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 62  re" command to b
5040: 65 20 65 78 65 63 74 75 65 64 20 66 6f 72 0a 23  e exectued for.#
5050: 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 6c 61   the current pla
5060: 74 66 6f 72 6d 2c 20 77 68 69 63 68 20 6d 61 79  tform, which may
5070: 20 62 65 20 57 69 6e 64 6f 77 73 20 28 76 69 61   be Windows (via
5080: 20 4d 69 6e 47 57 2c 20 65 74 63 29 2e 0a 23 0a   MinGW, etc)..#.
5090: 70 72 6f 63 20 63 6f 6e 66 69 67 75 72 65 43 6f  proc configureCo
50a0: 6d 6d 61 6e 64 20 7b 6f 70 74 73 7d 20 7b 0a 20  mmand {opts} {. 
50b0: 20 69 66 20 7b 24 3a 3a 4d 53 56 43 7d 20 72 65   if {$::MSVC} re
50c0: 74 75 72 6e 20 5b 6c 69 73 74 5d 3b 20 23 20 54  turn [list]; # T
50d0: 68 69 73 20 69 73 20 6e 6f 74 20 6e 65 65 64 65  his is not neede
50e0: 64 20 66 6f 72 20 4d 53 56 43 2e 0a 20 20 73 65  d for MSVC..  se
50f0: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 74  t result [list t
5100: 72 61 63 65 5f 63 6d 64 20 65 78 65 63 5d 0a 20  race_cmd exec]. 
5110: 20 69 66 20 7b 24 3a 3a 74 63 6c 5f 70 6c 61 74   if {$::tcl_plat
5120: 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d  form(platform)==
5130: 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 20 20 20  "windows"} {.   
5140: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
5150: 73 68 0a 20 20 7d 0a 20 20 6c 61 70 70 65 6e 64  sh.  }.  lappend
5160: 20 72 65 73 75 6c 74 20 24 3a 3a 53 52 43 44 49   result $::SRCDI
5170: 52 2f 63 6f 6e 66 69 67 75 72 65 20 2d 2d 65 6e  R/configure --en
5180: 61 62 6c 65 2d 6c 6f 61 64 2d 65 78 74 65 6e 73  able-load-extens
5190: 69 6f 6e 0a 20 20 66 6f 72 65 61 63 68 20 78 20  ion.  foreach x 
51a0: 24 6f 70 74 73 20 7b 6c 61 70 70 65 6e 64 20 72  $opts {lappend r
51b0: 65 73 75 6c 74 20 24 78 7d 0a 20 20 6c 61 70 70  esult $x}.  lapp
51c0: 65 6e 64 20 72 65 73 75 6c 74 20 3e 26 20 74 65  end result >& te
51d0: 73 74 2e 6c 6f 67 0a 7d 0a 0a 23 20 54 68 65 20  st.log.}..# The 
51e0: 66 6f 6c 6c 6f 77 69 6e 67 20 70 72 6f 63 65 64  following proced
51f0: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ure returns the 
5200: 22 6d 61 6b 65 22 20 63 6f 6d 6d 61 6e 64 20 74  "make" command t
5210: 6f 20 62 65 20 65 78 65 63 75 74 65 64 20 66 6f  o be executed fo
5220: 72 20 74 68 65 0a 23 20 73 70 65 63 69 66 69 65  r the.# specifie
5230: 64 20 74 61 72 67 65 74 73 2c 20 63 6f 6d 70 69  d targets, compi
5240: 6c 65 72 20 66 6c 61 67 73 2c 20 61 6e 64 20 6f  ler flags, and o
5250: 70 74 69 6f 6e 73 2e 0a 23 0a 70 72 6f 63 20 6d  ptions..#.proc m
5260: 61 6b 65 43 6f 6d 6d 61 6e 64 20 7b 20 74 61 72  akeCommand { tar
5270: 67 65 74 73 20 6d 61 6b 65 4f 70 74 73 20 63 66  gets makeOpts cf
5280: 6c 61 67 73 20 6f 70 74 73 20 7d 20 7b 0a 20 20  lags opts } {.  
5290: 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  set result [list
52a0: 20 74 72 61 63 65 5f 63 6d 64 20 65 78 65 63 5d   trace_cmd exec]
52b0: 0a 20 20 69 66 20 7b 24 3a 3a 4d 53 56 43 7d 20  .  if {$::MSVC} 
52c0: 7b 0a 20 20 20 20 73 65 74 20 6e 6d 61 6b 65 44  {.    set nmakeD
52d0: 69 72 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  ir [file nativen
52e0: 61 6d 65 20 24 3a 3a 53 52 43 44 49 52 5d 0a 20  ame $::SRCDIR]. 
52f0: 20 20 20 73 65 74 20 6e 6d 61 6b 65 46 69 6c 65     set nmakeFile
5300: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
5310: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 6e 6d  e [file join $nm
5320: 61 6b 65 44 69 72 20 4d 61 6b 65 66 69 6c 65 2e  akeDir Makefile.
5330: 6d 73 63 5d 5d 0a 20 20 20 20 6c 61 70 70 65 6e  msc]].    lappen
5340: 64 20 72 65 73 75 6c 74 20 6e 6d 61 6b 65 20 2f  d result nmake /
5350: 66 20 24 6e 6d 61 6b 65 46 69 6c 65 20 54 4f 50  f $nmakeFile TOP
5360: 3d 24 6e 6d 61 6b 65 44 69 72 0a 20 20 20 20 73  =$nmakeDir.    s
5370: 65 74 20 74 63 6c 44 69 72 20 5b 66 69 6c 65 20  et tclDir [file 
5380: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
5390: 20 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0a 20 20 20   normalize \.   
53a0: 20 20 20 20 20 5b 66 69 6c 65 20 64 69 72 6e 61       [file dirna
53b0: 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  me [file dirname
53c0: 20 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66 65 78 65   [info nameofexe
53d0: 63 75 74 61 62 6c 65 5d 5d 5d 5d 5d 0a 20 20 20  cutable]]]]].   
53e0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result 
53f0: 22 54 43 4c 44 49 52 3d 24 74 63 6c 44 69 72 22  "TCLDIR=$tclDir"
5400: 0a 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70  .    if {[regexp
5410: 20 7b 55 53 45 5f 53 54 44 43 41 4c 4c 3d 31 7d   {USE_STDCALL=1}
5420: 20 24 63 66 6c 61 67 73 5d 7d 20 7b 0a 20 20 20   $cflags]} {.   
5430: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
5440: 74 20 55 53 45 5f 53 54 44 43 41 4c 4c 3d 31 0a  t USE_STDCALL=1.
5450: 20 20 20 20 7d 0a 20 20 7d 20 65 6c 73 65 20 7b      }.  } else {
5460: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
5470: 75 6c 74 20 6d 61 6b 65 0a 20 20 7d 0a 20 20 66  ult make.  }.  f
5480: 6f 72 65 61 63 68 20 6d 61 6b 65 4f 70 74 20 24  oreach makeOpt $
5490: 6d 61 6b 65 4f 70 74 73 20 7b 0a 20 20 20 20 6c  makeOpts {.    l
54a0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 6d  append result $m
54b0: 61 6b 65 4f 70 74 0a 20 20 7d 0a 20 20 6c 61 70  akeOpt.  }.  lap
54c0: 70 65 6e 64 20 72 65 73 75 6c 74 20 63 6c 65 61  pend result clea
54d0: 6e 0a 20 20 66 6f 72 65 61 63 68 20 74 61 72 67  n.  foreach targ
54e0: 65 74 20 24 74 61 72 67 65 74 73 20 7b 0a 20 20  et $targets {.  
54f0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
5500: 20 24 74 61 72 67 65 74 0a 20 20 7d 0a 20 20 6c   $target.  }.  l
5510: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 43 46  append result CF
5520: 4c 41 47 53 3d 24 63 66 6c 61 67 73 20 4f 50 54  LAGS=$cflags OPT
5530: 53 3d 24 6f 70 74 73 20 3e 3e 26 20 74 65 73 74  S=$opts >>& test
5540: 2e 6c 6f 67 0a 7d 0a 0a 23 20 54 68 65 20 66 6f  .log.}..# The fo
5550: 6c 6c 6f 77 69 6e 67 20 70 72 6f 63 65 64 75 72  llowing procedur
5560: 65 20 70 72 69 6e 74 73 20 69 74 73 20 61 72 67  e prints its arg
5570: 75 6d 65 6e 74 73 20 69 66 20 3a 3a 54 52 41 43  uments if ::TRAC
5580: 45 20 69 73 20 74 72 75 65 2e 0a 23 20 41 6e 64  E is true..# And
5590: 20 69 74 20 65 78 65 63 75 74 65 73 20 74 68 65   it executes the
55a0: 20 63 6f 6d 6d 61 6e 64 20 6f 66 20 69 74 73 20   command of its 
55b0: 61 72 67 75 6d 65 6e 74 73 20 69 6e 20 74 68 65  arguments in the
55c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 74 65 78 74   calling context
55d0: 0a 23 20 69 66 20 3a 3a 44 52 59 52 55 4e 20 69  .# if ::DRYRUN i
55e0: 73 20 66 61 6c 73 65 2e 0a 23 0a 70 72 6f 63 20  s false..#.proc 
55f0: 74 72 61 63 65 5f 63 6d 64 20 7b 61 72 67 73 7d  trace_cmd {args}
5600: 20 7b 0a 20 20 69 66 20 7b 24 3a 3a 54 52 41 43   {.  if {$::TRAC
5610: 45 7d 20 7b 0a 20 20 20 20 50 55 54 53 20 24 61  E} {.    PUTS $a
5620: 72 67 73 0a 20 20 7d 0a 20 20 73 65 74 20 72 65  rgs.  }.  set re
5630: 73 20 22 22 0a 20 20 69 66 20 7b 21 24 3a 3a 44  s "".  if {!$::D
5640: 52 59 52 55 4e 7d 20 7b 0a 20 20 20 20 73 65 74  RYRUN} {.    set
5650: 20 72 65 73 20 5b 75 70 6c 65 76 65 6c 20 31 20   res [uplevel 1 
5660: 24 61 72 67 73 5d 0a 20 20 7d 0a 20 20 72 65 74  $args].  }.  ret
5670: 75 72 6e 20 24 72 65 73 0a 7d 0a 0a 0a 23 20 54  urn $res.}...# T
5680: 68 69 73 20 70 72 6f 63 20 70 72 6f 63 65 73 73  his proc process
5690: 65 73 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  es the command l
56a0: 69 6e 65 20 6f 70 74 69 6f 6e 73 20 70 61 73 73  ine options pass
56b0: 65 64 20 74 6f 20 74 68 69 73 20 73 63 72 69 70  ed to this scrip
56c0: 74 2e 0a 23 20 43 75 72 72 65 6e 74 6c 79 20 74  t..# Currently t
56d0: 68 65 20 6f 6e 6c 79 20 6f 70 74 69 6f 6e 20 73  he only option s
56e0: 75 70 70 6f 72 74 65 64 20 69 73 20 22 2d 6d 61  upported is "-ma
56f0: 6b 65 66 69 6c 65 22 2c 20 64 65 66 61 75 6c 74  kefile", default
5700: 0a 23 20 22 72 65 6c 65 61 73 65 74 65 73 74 2e  .# "releasetest.
5710: 6d 6b 22 2e 20 53 65 74 20 74 68 65 20 3a 3a 4d  mk". Set the ::M
5720: 41 4b 45 46 49 4c 45 20 76 61 72 69 61 62 6c 65  AKEFILE variable
5730: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
5740: 20 74 68 69 73 0a 23 20 6f 70 74 69 6f 6e 2e 0a   this.# option..
5750: 23 0a 70 72 6f 63 20 70 72 6f 63 65 73 73 5f 6f  #.proc process_o
5760: 70 74 69 6f 6e 73 20 7b 61 72 67 76 7d 20 7b 0a  ptions {argv} {.
5770: 20 20 73 65 74 20 3a 3a 53 52 43 44 49 52 20 20    set ::SRCDIR  
5780: 20 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a    [file normaliz
5790: 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  e [file dirname 
57a0: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a  [file dirname $:
57b0: 3a 61 72 67 76 30 5d 5d 5d 0a 20 20 73 65 74 20  :argv0]]].  set 
57c0: 3a 3a 51 55 49 43 4b 20 20 20 20 20 20 20 20 20  ::QUICK         
57d0: 20 30 0a 20 20 73 65 74 20 3a 3a 4d 53 56 43 20   0.  set ::MSVC 
57e0: 20 20 20 20 20 20 20 20 20 20 30 0a 20 20 73 65            0.  se
57f0: 74 20 3a 3a 42 55 49 4c 44 4f 4e 4c 59 20 20 20  t ::BUILDONLY   
5800: 20 20 20 30 0a 20 20 73 65 74 20 3a 3a 44 52 59     0.  set ::DRY
5810: 52 55 4e 20 20 20 20 20 20 20 20 20 30 0a 20 20  RUN         0.  
5820: 73 65 74 20 3a 3a 54 52 41 43 45 20 20 20 20 20  set ::TRACE     
5830: 20 20 20 20 20 30 0a 20 20 73 65 74 20 3a 3a 4a       0.  set ::J
5840: 4f 42 53 20 20 20 20 20 20 20 20 20 20 20 31 0a  OBS           1.
5850: 20 20 73 65 74 20 3a 3a 50 52 4f 47 52 45 53 53    set ::PROGRESS
5860: 5f 4d 53 47 53 20 20 30 0a 20 20 73 65 74 20 3a  _MSGS  0.  set :
5870: 3a 57 49 54 48 54 43 4c 20 20 20 20 20 20 20 20  :WITHTCL        
5880: 7b 7d 0a 20 20 73 65 74 20 3a 3a 46 4f 52 43 45  {}.  set ::FORCE
5890: 20 20 20 20 20 20 20 20 20 20 30 0a 20 20 73 65            0.  se
58a0: 74 20 3a 3a 4b 45 45 50 46 49 4c 45 53 20 20 20  t ::KEEPFILES   
58b0: 20 20 20 30 20 20 20 20 20 20 20 20 20 20 3b 23     0          ;#
58c0: 20 4b 65 65 70 20 65 78 74 72 61 20 66 69 6c 65   Keep extra file
58d0: 73 20 61 66 74 65 72 20 74 65 73 74 20 72 75 6e  s after test run
58e0: 0a 20 20 73 65 74 20 63 6f 6e 66 69 67 20 7b 7d  .  set config {}
58f0: 0a 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20  .  set platform 
5900: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform(
5910: 6f 73 29 2d 24 3a 3a 74 63 6c 5f 70 6c 61 74 66  os)-$::tcl_platf
5920: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 0a 0a 20 20  orm(machine)..  
5930: 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24  for {set i 0} {$
5940: 69 20 3c 20 5b 6c 6c 65 6e 67 74 68 20 24 61 72  i < [llength $ar
5950: 67 76 5d 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  gv]} {incr i} {.
5960: 20 20 20 20 73 65 74 20 78 20 5b 6c 69 6e 64 65      set x [linde
5970: 78 20 24 61 72 67 76 20 24 69 5d 0a 20 20 20 20  x $argv $i].    
5980: 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 2d 2d  if {[regexp {^--
5990: 5b 61 2d 7a 5d 7d 20 24 78 5d 7d 20 7b 73 65 74  [a-z]} $x]} {set
59a0: 20 78 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65   x [string range
59b0: 20 24 78 20 31 20 65 6e 64 5d 7d 0a 20 20 20 20   $x 1 end]}.    
59c0: 73 77 69 74 63 68 20 2d 67 6c 6f 62 20 2d 2d 20  switch -glob -- 
59d0: 24 78 20 7b 0a 20 20 20 20 20 20 2d 73 6c 61 76  $x {.      -slav
59e0: 65 20 7b 0a 20 20 20 20 20 20 20 20 72 75 6e 5f  e {.        run_
59f0: 73 6c 61 76 65 5f 74 65 73 74 0a 20 20 20 20 20  slave_test.     
5a00: 20 20 20 65 78 69 74 0a 20 20 20 20 20 20 7d 0a     exit.      }.
5a10: 0a 20 20 20 20 20 20 23 20 55 6e 64 6f 63 75 6d  .      # Undocum
5a20: 65 6e 74 65 64 20 6c 65 67 61 63 79 20 6f 70 74  ented legacy opt
5a30: 69 6f 6e 3a 20 2d 2d 73 72 63 64 69 72 20 44 49  ion: --srcdir DI
5a40: 52 45 43 54 4f 52 59 0a 20 20 20 20 20 20 23 0a  RECTORY.      #.
5a50: 20 20 20 20 20 20 23 20 44 49 52 45 43 54 4f 52        # DIRECTOR
5a60: 59 20 69 73 20 74 68 65 20 72 6f 6f 74 20 6f 66  Y is the root of
5a70: 20 74 68 65 20 53 51 4c 69 74 65 20 63 68 65 63   the SQLite chec
5a80: 6b 6f 75 74 2e 20 20 54 68 69 73 20 73 65 74 73  kout.  This sets
5a90: 20 74 68 65 0a 20 20 20 20 20 20 23 20 53 52 43   the.      # SRC
5aa0: 44 49 52 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  DIR global varia
5ab0: 62 6c 65 2e 20 20 42 75 74 20 74 68 61 74 20 76  ble.  But that v
5ac0: 61 72 69 61 62 6c 65 20 69 73 20 61 6c 72 65 61  ariable is alrea
5ad0: 64 79 20 73 65 74 0a 20 20 20 20 20 20 23 20 61  dy set.      # a
5ae0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 6f 20  utomatically so 
5af0: 74 68 65 72 65 20 72 65 61 6c 6c 79 20 69 73 20  there really is 
5b00: 6e 6f 20 72 65 61 73 6f 6e 20 74 6f 20 68 61 76  no reason to hav
5b10: 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 2e 0a 20  e this option.. 
5b20: 20 20 20 20 20 23 0a 20 20 20 20 20 20 2d 73 72       #.      -sr
5b30: 63 64 69 72 20 7b 0a 20 20 20 20 20 20 20 20 69  cdir {.        i
5b40: 6e 63 72 20 69 0a 20 20 20 20 20 20 20 20 73 65  ncr i.        se
5b50: 74 20 3a 3a 53 52 43 44 49 52 20 5b 66 69 6c 65  t ::SRCDIR [file
5b60: 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 6c 69 6e 64   normalize [lind
5b70: 65 78 20 24 61 72 67 76 20 24 69 5d 5d 0a 20 20  ex $argv $i]].  
5b80: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d 70 6c      }..      -pl
5b90: 61 74 66 6f 72 6d 20 7b 0a 20 20 20 20 20 20 20  atform {.       
5ba0: 20 69 6e 63 72 20 69 0a 20 20 20 20 20 20 20 20   incr i.        
5bb0: 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 6c 69  set platform [li
5bc0: 6e 64 65 78 20 24 61 72 67 76 20 24 69 5d 0a 20  ndex $argv $i]. 
5bd0: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d 6a       }..      -j
5be0: 6f 62 73 20 7b 0a 20 20 20 20 20 20 20 20 69 6e  obs {.        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 4a 4f 42 53 20 5b 6c 69 6e 64 65 78 20   ::JOBS [lindex 
5c10: 24 61 72 67 76 20 24 69 5d 0a 20 20 20 20 20 20  $argv $i].      
5c20: 7d 0a 0a 20 20 20 20 20 20 2d 70 72 6f 67 72 65  }..      -progre
5c30: 73 73 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  ss {.        set
5c40: 20 3a 3a 50 52 4f 47 52 45 53 53 5f 4d 53 47 53   ::PROGRESS_MSGS
5c50: 20 31 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20   1.      }..    
5c60: 20 20 2d 71 75 69 63 6b 20 7b 0a 20 20 20 20 20    -quick {.     
5c70: 20 20 20 73 65 74 20 3a 3a 51 55 49 43 4b 20 31     set ::QUICK 1
5c80: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2d  .      }.      -
5c90: 76 65 72 79 71 75 69 63 6b 20 7b 0a 20 20 20 20  veryquick {.    
5ca0: 20 20 20 20 73 65 74 20 3a 3a 51 55 49 43 4b 20      set ::QUICK 
5cb0: 32 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  2.      }..     
5cc0: 20 2d 63 6f 6e 66 69 67 20 7b 0a 20 20 20 20 20   -config {.     
5cd0: 20 20 20 69 6e 63 72 20 69 0a 20 20 20 20 20 20     incr i.      
5ce0: 20 20 73 65 74 20 63 6f 6e 66 69 67 20 5b 6c 69    set config [li
5cf0: 6e 64 65 78 20 24 61 72 67 76 20 24 69 5d 0a 20  ndex $argv $i]. 
5d00: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d 6d       }..      -m
5d10: 73 76 63 20 7b 0a 20 20 20 20 20 20 20 20 73 65  svc {.        se
5d20: 74 20 3a 3a 4d 53 56 43 20 31 0a 20 20 20 20 20  t ::MSVC 1.     
5d30: 20 7d 0a 0a 20 20 20 20 20 20 2d 62 75 69 6c 64   }..      -build
5d40: 6f 6e 6c 79 20 7b 0a 20 20 20 20 20 20 20 20 73  only {.        s
5d50: 65 74 20 3a 3a 42 55 49 4c 44 4f 4e 4c 59 20 31  et ::BUILDONLY 1
5d60: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
5d70: 2d 64 72 79 72 75 6e 20 7b 0a 20 20 20 20 20 20  -dryrun {.      
5d80: 20 20 73 65 74 20 3a 3a 44 52 59 52 55 4e 20 31    set ::DRYRUN 1
5d90: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
5da0: 2d 66 6f 72 63 65 20 2d 0a 20 20 20 20 20 20 2d  -force -.      -
5db0: 66 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  f {.        set 
5dc0: 3a 3a 46 4f 52 43 45 20 31 0a 20 20 20 20 20 20  ::FORCE 1.      
5dd0: 7d 0a 0a 20 20 20 20 20 20 2d 74 72 61 63 65 20  }..      -trace 
5de0: 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a  {.        set ::
5df0: 54 52 41 43 45 20 31 0a 20 20 20 20 20 20 7d 0a  TRACE 1.      }.
5e00: 0a 20 20 20 20 20 20 2d 69 6e 66 6f 20 7b 0a 20  .      -info {. 
5e10: 20 20 20 20 20 20 20 50 55 54 53 20 22 43 6f 6d         PUTS "Com
5e20: 6d 61 6e 64 2d 6c 69 6e 65 20 4f 70 74 69 6f 6e  mand-line Option
5e30: 73 3a 22 0a 20 20 20 20 20 20 20 20 50 55 54 53  s:".        PUTS
5e40: 20 22 20 20 20 2d 2d 73 72 63 64 69 72 20 24 3a   "   --srcdir $:
5e50: 3a 53 52 43 44 49 52 22 0a 20 20 20 20 20 20 20  :SRCDIR".       
5e60: 20 50 55 54 53 20 22 20 20 20 2d 2d 70 6c 61 74   PUTS "   --plat
5e70: 66 6f 72 6d 20 5b 6c 69 73 74 20 24 70 6c 61 74  form [list $plat
5e80: 66 6f 72 6d 5d 22 0a 20 20 20 20 20 20 20 20 50  form]".        P
5e90: 55 54 53 20 22 20 20 20 2d 2d 63 6f 6e 66 69 67  UTS "   --config
5ea0: 20 5b 6c 69 73 74 20 24 63 6f 6e 66 69 67 5d 22   [list $config]"
5eb0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 3a 3a  .        if {$::
5ec0: 51 55 49 43 4b 7d 20 7b 0a 20 20 20 20 20 20 20  QUICK} {.       
5ed0: 20 20 20 69 66 20 7b 24 3a 3a 51 55 49 43 4b 3d     if {$::QUICK=
5ee0: 3d 31 7d 20 7b 50 55 54 53 20 22 20 20 20 2d 2d  =1} {PUTS "   --
5ef0: 71 75 69 63 6b 22 7d 0a 20 20 20 20 20 20 20 20  quick"}.        
5f00: 20 20 69 66 20 7b 24 3a 3a 51 55 49 43 4b 3d 3d    if {$::QUICK==
5f10: 32 7d 20 7b 50 55 54 53 20 22 20 20 20 2d 2d 76  2} {PUTS "   --v
5f20: 65 72 79 71 75 69 63 6b 22 7d 0a 20 20 20 20 20  eryquick"}.     
5f30: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 20     }.        if 
5f40: 7b 24 3a 3a 4d 53 56 43 7d 20 20 20 20 20 20 7b  {$::MSVC}      {
5f50: 50 55 54 53 20 22 20 20 20 2d 2d 6d 73 76 63 22  PUTS "   --msvc"
5f60: 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 3a  }.        if {$:
5f70: 3a 42 55 49 4c 44 4f 4e 4c 59 7d 20 7b 50 55 54  :BUILDONLY} {PUT
5f80: 53 20 22 20 20 20 2d 2d 62 75 69 6c 64 6f 6e 6c  S "   --buildonl
5f90: 79 22 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  y"}.        if {
5fa0: 24 3a 3a 44 52 59 52 55 4e 7d 20 20 20 20 7b 50  $::DRYRUN}    {P
5fb0: 55 54 53 20 22 20 20 20 2d 2d 64 72 79 72 75 6e  UTS "   --dryrun
5fc0: 22 7d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24  "}.        if {$
5fd0: 3a 3a 54 52 41 43 45 7d 20 20 20 20 20 7b 50 55  ::TRACE}     {PU
5fe0: 54 53 20 22 20 20 20 2d 2d 74 72 61 63 65 22 7d  TS "   --trace"}
5ff0: 0a 20 20 20 20 20 20 20 20 50 55 54 53 20 22 5c  .        PUTS "\
6000: 6e 41 76 61 69 6c 61 62 6c 65 20 2d 2d 70 6c 61  nAvailable --pla
6010: 74 66 6f 72 6d 20 6f 70 74 69 6f 6e 73 3a 22 0a  tform options:".
6020: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
6030: 79 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20  y [lsort [array 
6040: 6e 61 6d 65 73 20 3a 3a 50 6c 61 74 66 6f 72 6d  names ::Platform
6050: 73 5d 5d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  s]] {.          
6060: 50 55 54 53 20 22 20 20 20 5b 6c 69 73 74 20 24  PUTS "   [list $
6070: 79 5d 22 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  y]".        }.  
6080: 20 20 20 20 20 20 50 55 54 53 20 22 5c 6e 41 76        PUTS "\nAv
6090: 61 69 6c 61 62 6c 65 20 2d 2d 63 6f 6e 66 69 67  ailable --config
60a0: 20 6f 70 74 69 6f 6e 73 3a 22 0a 20 20 20 20 20   options:".     
60b0: 20 20 20 66 6f 72 65 61 63 68 20 79 20 5b 6c 73     foreach y [ls
60c0: 6f 72 74 20 5b 61 72 72 61 79 20 6e 61 6d 65 73  ort [array names
60d0: 20 3a 3a 43 6f 6e 66 69 67 73 5d 5d 20 7b 0a 20   ::Configs]] {. 
60e0: 20 20 20 20 20 20 20 20 20 50 55 54 53 20 22 20           PUTS " 
60f0: 20 20 5b 6c 69 73 74 20 24 79 5d 22 0a 20 20 20    [list $y]".   
6100: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 65       }.        e
6110: 78 69 74 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  xit.      }..   
6120: 20 20 20 2d 67 20 7b 0a 20 20 20 20 20 20 20 20     -g {.        
6130: 6c 61 70 70 65 6e 64 20 3a 3a 45 58 54 52 41 43  lappend ::EXTRAC
6140: 4f 4e 46 49 47 20 5b 6c 69 6e 64 65 78 20 24 61  ONFIG [lindex $a
6150: 72 67 76 20 24 69 5d 0a 20 20 20 20 20 20 7d 0a  rgv $i].      }.
6160: 0a 20 20 20 20 20 20 2d 6b 65 65 70 20 7b 0a 20  .      -keep {. 
6170: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 4b 45 45         set ::KEE
6180: 50 46 49 4c 45 53 20 31 0a 20 20 20 20 20 20 7d  PFILES 1.      }
6190: 0a 0a 20 20 20 20 20 20 2d 77 69 74 68 2d 74 63  ..      -with-tc
61a0: 6c 3d 2a 20 7b 0a 20 20 20 20 20 20 20 20 73 65  l=* {.        se
61b0: 74 20 3a 3a 57 49 54 48 54 43 4c 20 2d 24 78 0a  t ::WITHTCL -$x.
61c0: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d        }..      -
61d0: 44 2a 20 2d 0a 20 20 20 20 20 20 2d 4f 2a 20 2d  D* -.      -O* -
61e0: 0a 20 20 20 20 20 20 2d 65 6e 61 62 6c 65 2d 2a  .      -enable-*
61f0: 20 2d 0a 20 20 20 20 20 20 2d 64 69 73 61 62 6c   -.      -disabl
6200: 65 2d 2a 20 2d 0a 20 20 20 20 20 20 2a 3d 2a 20  e-* -.      *=* 
6210: 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  {.        lappen
6220: 64 20 3a 3a 45 58 54 52 41 43 4f 4e 46 49 47 20  d ::EXTRACONFIG 
6230: 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20 24 69  [lindex $argv $i
6240: 5d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ].      }..     
6250: 20 64 65 66 61 75 6c 74 20 7b 0a 20 20 20 20 20   default {.     
6260: 20 20 20 50 55 54 53 45 52 52 20 22 22 0a 20 20     PUTSERR "".  
6270: 20 20 20 20 20 20 50 55 54 53 45 52 52 20 5b 73        PUTSERR [s
6280: 74 72 69 6e 67 20 74 72 69 6d 20 24 3a 3a 55 53  tring trim $::US
6290: 41 47 45 5f 4d 45 53 53 41 47 45 5d 0a 20 20 20  AGE_MESSAGE].   
62a0: 20 20 20 20 20 65 78 69 74 20 2d 31 0a 20 20 20       exit -1.   
62b0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a     }.    }.  }..
62c0: 20 20 69 66 20 7b 30 3d 3d 5b 69 6e 66 6f 20 65    if {0==[info e
62d0: 78 69 73 74 73 20 3a 3a 50 6c 61 74 66 6f 72 6d  xists ::Platform
62e0: 73 28 24 70 6c 61 74 66 6f 72 6d 29 5d 7d 20 7b  s($platform)]} {
62f0: 0a 20 20 20 20 50 55 54 53 20 22 55 6e 6b 6e 6f  .    PUTS "Unkno
6300: 77 6e 20 70 6c 61 74 66 6f 72 6d 3a 20 24 70 6c  wn platform: $pl
6310: 61 74 66 6f 72 6d 22 0a 20 20 20 20 50 55 54 53  atform".    PUTS
6320: 4e 4e 4c 20 22 53 65 74 20 74 68 65 20 2d 70 6c  NNL "Set the -pl
6330: 61 74 66 6f 72 6d 20 6f 70 74 69 6f 6e 20 74 6f  atform option to
6340: 20 22 0a 20 20 20 20 73 65 74 20 70 72 69 6e 74   ".    set print
6350: 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65   [list].    fore
6360: 61 63 68 20 70 20 5b 61 72 72 61 79 20 6e 61 6d  ach p [array nam
6370: 65 73 20 3a 3a 50 6c 61 74 66 6f 72 6d 73 5d 20  es ::Platforms] 
6380: 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20  {.      lappend 
6390: 70 72 69 6e 74 20 22 5c 22 24 70 5c 22 22 0a 20  print "\"$p\"". 
63a0: 20 20 20 7d 0a 20 20 20 20 6c 73 65 74 20 70 72     }.    lset pr
63b0: 69 6e 74 20 65 6e 64 20 22 6f 72 20 5b 6c 69 6e  int end "or [lin
63c0: 64 65 78 20 24 70 72 69 6e 74 20 65 6e 64 5d 22  dex $print end]"
63d0: 0a 20 20 20 20 50 55 54 53 20 22 5b 6a 6f 69 6e  .    PUTS "[join
63e0: 20 24 70 72 69 6e 74 20 7b 2c 20 7d 5d 2e 22 0a   $print {, }].".
63f0: 20 20 20 20 65 78 69 74 0a 20 20 7d 0a 0a 20 20      exit.  }..  
6400: 69 66 20 7b 24 63 6f 6e 66 69 67 21 3d 22 22 7d  if {$config!=""}
6410: 20 7b 0a 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e   {.    if {[llen
6420: 67 74 68 20 24 63 6f 6e 66 69 67 5d 3d 3d 31 7d  gth $config]==1}
6430: 20 7b 6c 61 70 70 65 6e 64 20 63 6f 6e 66 69 67   {lappend config
6440: 20 66 75 6c 6c 74 65 73 74 7d 0a 20 20 20 20 73   fulltest}.    s
6450: 65 74 20 3a 3a 43 4f 4e 46 49 47 4c 49 53 54 20  et ::CONFIGLIST 
6460: 24 63 6f 6e 66 69 67 0a 20 20 7d 20 65 6c 73 65  $config.  } else
6470: 20 7b 0a 20 20 20 20 69 66 20 7b 24 3a 3a 4a 4f   {.    if {$::JO
6480: 42 53 3e 31 7d 20 7b 0a 20 20 20 20 20 20 73 65  BS>1} {.      se
6490: 74 20 3a 3a 43 4f 4e 46 49 47 4c 49 53 54 20 7b  t ::CONFIGLIST {
64a0: 7d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  }.      foreach 
64b0: 7b 74 61 72 67 65 74 20 7a 43 6f 6e 66 69 67 7d  {target zConfig}
64c0: 20 5b 6c 72 65 76 65 72 73 65 20 24 3a 3a 50 6c   [lreverse $::Pl
64d0: 61 74 66 6f 72 6d 73 28 24 70 6c 61 74 66 6f 72  atforms($platfor
64e0: 6d 29 5d 20 7b 0a 20 20 20 20 20 20 20 20 61 70  m)] {.        ap
64f0: 70 65 6e 64 20 3a 3a 43 4f 4e 46 49 47 4c 49 53  pend ::CONFIGLIS
6500: 54 20 5b 66 6f 72 6d 61 74 20 22 20 20 20 20 25  T [format "    %
6510: 2d 32 35 73 20 25 73 5c 6e 22 20 5c 0a 20 20 20  -25s %s\n" \.   
6520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6530: 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69 73              [lis
6540: 74 20 24 7a 43 6f 6e 66 69 67 5d 20 5b 6c 69 73  t $zConfig] [lis
6550: 74 20 24 74 61 72 67 65 74 5d 5d 0a 20 20 20 20  t $target]].    
6560: 20 20 7d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b    }.    } else {
6570: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 43 4f 4e  .      set ::CON
6580: 46 49 47 4c 49 53 54 20 24 3a 3a 50 6c 61 74 66  FIGLIST $::Platf
6590: 6f 72 6d 73 28 24 70 6c 61 74 66 6f 72 6d 29 0a  orms($platform).
65a0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 50 55 54 53      }.  }.  PUTS
65b0: 20 22 52 75 6e 6e 69 6e 67 20 74 68 65 20 66 6f   "Running the fo
65c0: 6c 6c 6f 77 69 6e 67 20 74 65 73 74 20 63 6f 6e  llowing test con
65d0: 66 69 67 75 72 61 74 69 6f 6e 73 20 66 6f 72 20  figurations for 
65e0: 24 70 6c 61 74 66 6f 72 6d 3a 22 0a 20 20 50 55  $platform:".  PU
65f0: 54 53 20 22 20 20 20 20 5b 73 74 72 69 6e 67 20  TS "    [string 
6600: 74 72 69 6d 20 24 3a 3a 43 4f 4e 46 49 47 4c 49  trim $::CONFIGLI
6610: 53 54 5d 22 0a 20 20 50 55 54 53 4e 4e 4c 20 22  ST]".  PUTSNNL "
6620: 46 6c 61 67 73 3a 22 0a 20 20 69 66 20 7b 24 3a  Flags:".  if {$:
6630: 3a 50 52 4f 47 52 45 53 53 5f 4d 53 47 53 7d 20  :PROGRESS_MSGS} 
6640: 7b 50 55 54 53 4e 4e 4c 20 22 20 2d 2d 70 72 6f  {PUTSNNL " --pro
6650: 67 72 65 73 73 22 7d 0a 20 20 69 66 20 7b 24 3a  gress"}.  if {$:
6660: 3a 44 52 59 52 55 4e 7d 20 7b 50 55 54 53 4e 4e  :DRYRUN} {PUTSNN
6670: 4c 20 22 20 2d 2d 64 72 79 72 75 6e 22 7d 0a 20  L " --dryrun"}. 
6680: 20 69 66 20 7b 24 3a 3a 42 55 49 4c 44 4f 4e 4c   if {$::BUILDONL
6690: 59 7d 20 7b 50 55 54 53 4e 4e 4c 20 22 20 2d 2d  Y} {PUTSNNL " --
66a0: 62 75 69 6c 64 6f 6e 6c 79 22 7d 0a 20 20 69 66  buildonly"}.  if
66b0: 20 7b 24 3a 3a 4d 53 56 43 7d 20 7b 50 55 54 53   {$::MSVC} {PUTS
66c0: 4e 4e 4c 20 22 20 2d 2d 6d 73 76 63 22 7d 0a 20  NNL " --msvc"}. 
66d0: 20 73 77 69 74 63 68 20 2d 2d 20 24 3a 3a 51 55   switch -- $::QU
66e0: 49 43 4b 20 7b 0a 20 20 20 20 20 31 20 7b 50 55  ICK {.     1 {PU
66f0: 54 53 4e 4e 4c 20 22 20 2d 2d 71 75 69 63 6b 22  TSNNL " --quick"
6700: 7d 0a 20 20 20 20 20 32 20 7b 50 55 54 53 4e 4e  }.     2 {PUTSNN
6710: 4c 20 22 20 2d 2d 76 65 72 79 71 75 69 63 6b 22  L " --veryquick"
6720: 7d 0a 20 20 7d 0a 20 20 69 66 20 7b 24 3a 3a 4a  }.  }.  if {$::J
6730: 4f 42 53 3e 31 7d 20 7b 50 55 54 53 4e 4e 4c 20  OBS>1} {PUTSNNL 
6740: 22 20 2d 2d 6a 6f 62 73 20 24 3a 3a 4a 4f 42 53  " --jobs $::JOBS
6750: 22 7d 0a 20 20 50 55 54 53 20 22 22 0a 7d 0a 0a  "}.  PUTS "".}..
6760: 23 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  # Check to see i
6770: 66 20 74 68 65 72 65 20 61 72 65 20 75 6e 63 6f  f there are unco
6780: 6d 6d 69 74 74 65 64 20 63 68 61 6e 67 65 73 20  mmitted changes 
6790: 69 6e 20 74 68 65 20 53 51 4c 69 74 65 20 73 6f  in the SQLite so
67a0: 75 72 63 65 0a 23 20 63 68 65 63 6b 6f 75 74 2e  urce.# checkout.
67b0: 20 20 45 78 69 74 20 69 66 20 74 68 65 72 65 20    Exit if there 
67c0: 61 72 65 2e 20 20 45 78 63 65 70 74 3a 20 20 44  are.  Except:  D
67d0: 6f 20 6e 6f 74 68 69 6e 67 20 69 66 20 74 68 65  o nothing if the
67e0: 20 2d 2d 66 6f 72 63 65 0a 23 20 66 6c 61 67 20   --force.# flag 
67f0: 69 73 20 75 73 65 64 2e 20 20 41 6c 73 6f 2c 20  is used.  Also, 
6800: 69 67 6e 6f 72 65 20 74 68 69 73 20 74 65 73 74  ignore this test
6810: 20 69 66 20 74 68 65 20 66 6f 73 73 69 6c 20 62   if the fossil b
6820: 69 6e 61 72 79 20 69 73 0a 23 20 75 6e 61 76 61  inary is.# unava
6830: 69 6c 61 62 6c 65 2c 20 6f 72 20 69 66 20 74 68  ilable, or if th
6840: 65 20 73 6f 75 72 63 65 20 74 72 65 65 20 69 73  e source tree is
6850: 20 6e 6f 74 20 61 20 76 61 6c 69 64 20 66 6f 73   not a valid fos
6860: 73 69 6c 20 63 68 65 63 6b 6f 75 74 2e 0a 23 0a  sil checkout..#.
6870: 70 72 6f 63 20 63 68 65 63 6b 5f 75 6e 63 6f 6d  proc check_uncom
6880: 6d 69 74 74 65 64 20 7b 7d 20 7b 0a 20 20 69 66  mitted {} {.  if
6890: 20 7b 24 3a 3a 46 4f 52 43 45 7d 20 72 65 74 75   {$::FORCE} retu
68a0: 72 6e 0a 20 20 73 65 74 20 70 77 64 20 5b 70 77  rn.  set pwd [pw
68b0: 64 5d 0a 20 20 63 64 20 24 3a 3a 53 52 43 44 49  d].  cd $::SRCDI
68c0: 52 0a 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b  R.  if {[catch {
68d0: 65 78 65 63 20 66 6f 73 73 69 6c 20 63 68 61 6e  exec fossil chan
68e0: 67 65 73 7d 20 72 65 73 5d 3d 3d 30 20 26 26 20  ges} res]==0 && 
68f0: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 72 65  [string trim $re
6900: 73 5d 21 3d 22 22 7d 20 7b 0a 20 20 20 20 70 75  s]!=""} {.    pu
6910: 74 73 20 22 45 52 52 4f 52 3a 20 54 68 65 20 63  ts "ERROR: The c
6920: 68 65 63 6b 2d 6f 75 74 20 63 6f 6e 74 61 69 6e  heck-out contain
6930: 73 20 75 6e 63 6f 6d 6d 69 74 74 65 64 20 63 68  s uncommitted ch
6940: 61 6e 67 65 73 3a 22 0a 20 20 20 20 70 75 74 73  anges:".    puts
6950: 20 24 72 65 73 0a 20 20 20 20 70 75 74 73 20 22   $res.    puts "
6960: 55 73 65 20 74 68 65 20 2d 66 20 6f 72 20 2d 2d  Use the -f or --
6970: 66 6f 72 63 65 20 6f 70 74 69 6f 6e 73 20 74 6f  force options to
6980: 20 6f 76 65 72 72 69 64 65 22 0a 20 20 20 20 65   override".    e
6990: 78 69 74 20 31 0a 20 20 7d 0a 20 20 63 64 20 24  xit 1.  }.  cd $
69a0: 70 77 64 0a 7d 0a 0a 23 20 41 20 74 65 73 74 20  pwd.}..# A test 
69b0: 72 75 6e 20 68 61 73 20 6a 75 73 74 20 66 69 6e  run has just fin
69c0: 69 73 68 65 64 20 69 6e 20 64 69 72 65 63 74 6f  ished in directo
69d0: 72 79 20 24 64 69 72 2e 20 54 68 69 73 20 63 6f  ry $dir. This co
69e0: 6d 6d 61 6e 64 20 64 65 6c 65 74 65 73 20 61 6c  mmand deletes al
69f0: 6c 0a 23 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61  l.# non-essentia
6a00: 6c 20 66 69 6c 65 73 20 66 72 6f 6d 20 74 68 65  l files from the
6a10: 20 64 69 72 65 63 74 6f 72 79 2e 20 53 70 65 63   directory. Spec
6a20: 69 66 69 63 61 6c 6c 79 2c 20 65 76 65 72 79 74  ifically, everyt
6a30: 68 69 6e 67 20 65 78 63 65 70 74 0a 23 0a 23 20  hing except.#.# 
6a40: 20 20 2a 20 54 68 65 20 22 74 65 73 74 66 69 78    * The "testfix
6a50: 74 75 72 65 22 20 61 6e 64 20 22 73 71 6c 69 74  ture" and "sqlit
6a60: 65 33 22 20 62 69 6e 61 72 69 65 73 2c 0a 23 20  e3" binaries,.# 
6a70: 20 20 2a 20 54 68 65 20 22 74 65 73 74 2d 6f 75    * The "test-ou
6a80: 74 2e 6c 6f 67 22 20 61 6e 64 20 22 74 65 73 74  t.log" and "test
6a90: 2e 6c 6f 67 22 20 6c 6f 67 20 66 69 6c 65 73 2e  .log" log files.
6aa0: 0a 23 0a 70 72 6f 63 20 63 6c 65 61 6e 75 70 20  .#.proc cleanup 
6ab0: 7b 64 69 72 7d 20 7b 0a 20 20 73 65 74 20 4b 28  {dir} {.  set K(
6ac0: 74 65 73 74 66 69 78 74 75 72 65 29 20 31 0a 20  testfixture) 1. 
6ad0: 20 73 65 74 20 4b 28 74 65 73 74 66 69 78 74 75   set K(testfixtu
6ae0: 72 65 2e 65 78 65 29 20 31 0a 20 20 73 65 74 20  re.exe) 1.  set 
6af0: 4b 28 73 71 6c 69 74 65 33 29 20 31 0a 20 20 73  K(sqlite3) 1.  s
6b00: 65 74 20 4b 28 73 71 6c 69 74 65 33 2e 65 78 65  et K(sqlite3.exe
6b10: 29 20 31 0a 20 20 73 65 74 20 4b 28 74 65 73 74  ) 1.  set K(test
6b20: 2d 6f 75 74 2e 74 78 74 29 20 31 0a 20 20 73 65  -out.txt) 1.  se
6b30: 74 20 4b 28 74 65 73 74 2e 6c 6f 67 29 20 31 0a  t K(test.log) 1.
6b40: 0a 20 20 66 6f 72 65 61 63 68 20 66 20 5b 67 6c  .  foreach f [gl
6b50: 6f 62 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5b  ob -nocomplain [
6b60: 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20 2a  file join $dir *
6b70: 5d 5d 20 7b 0a 20 20 20 20 73 65 74 20 74 61 69  ]] {.    set tai
6b80: 6c 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 5d  l [file tail $f]
6b90: 0a 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65  .    if {[info e
6ba0: 78 69 73 74 73 20 4b 28 24 74 61 69 6c 29 5d 3d  xists K($tail)]=
6bb0: 3d 30 7d 20 7b 20 0a 20 20 20 20 20 20 66 69 6c  =0} { .      fil
6bc0: 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20  e delete -force 
6bd0: 24 66 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  $f.    }.  }.}..
6be0: 0a 23 20 4d 61 69 6e 20 72 6f 75 74 69 6e 65 2e  .# Main routine.
6bf0: 0a 23 0a 70 72 6f 63 20 6d 61 69 6e 20 7b 61 72  .#.proc main {ar
6c00: 67 76 7d 20 7b 0a 0a 20 20 23 20 50 72 6f 63 65  gv} {..  # Proce
6c10: 73 73 20 61 6e 79 20 63 6f 6d 6d 61 6e 64 20 6c  ss any command l
6c20: 69 6e 65 20 6f 70 74 69 6f 6e 73 2e 0a 20 20 73  ine options..  s
6c30: 65 74 20 3a 3a 45 58 54 52 41 43 4f 4e 46 49 47  et ::EXTRACONFIG
6c40: 20 7b 7d 0a 20 20 70 72 6f 63 65 73 73 5f 6f 70   {}.  process_op
6c50: 74 69 6f 6e 73 20 24 61 72 67 76 0a 20 20 69 66  tions $argv.  if
6c60: 20 7b 21 24 3a 3a 44 52 59 52 55 4e 7d 20 63 68   {!$::DRYRUN} ch
6c70: 65 63 6b 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 0a  eck_uncommitted.
6c80: 20 20 50 55 54 53 20 5b 73 74 72 69 6e 67 20 72    PUTS [string r
6c90: 65 70 65 61 74 20 2a 20 37 39 5d 0a 0a 20 20 73  epeat * 79]..  s
6ca0: 65 74 20 3a 3a 4e 45 52 52 20 30 0a 20 20 73 65  et ::NERR 0.  se
6cb0: 74 20 3a 3a 4e 54 45 53 54 20 30 0a 20 20 73 65  t ::NTEST 0.  se
6cc0: 74 20 3a 3a 4e 54 45 53 54 43 41 53 45 20 30 0a  t ::NTESTCASE 0.
6cd0: 20 20 73 65 74 20 3a 3a 4e 45 52 52 43 41 53 45    set ::NERRCASE
6ce0: 20 30 0a 20 20 73 65 74 20 3a 3a 53 51 4c 49 54   0.  set ::SQLIT
6cf0: 45 5f 56 45 52 53 49 4f 4e 20 7b 7d 0a 20 20 73  E_VERSION {}.  s
6d00: 65 74 20 53 54 41 52 54 54 49 4d 45 20 5b 63 6c  et STARTTIME [cl
6d10: 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 20 20 66  ock seconds].  f
6d20: 6f 72 65 61 63 68 20 7b 7a 43 6f 6e 66 69 67 20  oreach {zConfig 
6d30: 74 61 72 67 65 74 7d 20 24 3a 3a 43 4f 4e 46 49  target} $::CONFI
6d40: 47 4c 49 53 54 20 7b 0a 20 20 20 20 69 66 20 7b  GLIST {.    if {
6d50: 24 3a 3a 4d 53 56 43 20 26 26 20 28 24 7a 43 6f  $::MSVC && ($zCo
6d60: 6e 66 69 67 20 65 71 20 22 53 61 6e 69 74 69 7a  nfig eq "Sanitiz
6d70: 65 22 20 7c 7c 20 22 63 68 65 63 6b 73 79 6d 62  e" || "checksymb
6d80: 6f 6c 73 22 20 69 6e 20 24 74 61 72 67 65 74 0a  ols" in $target.
6d90: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 22 76             || "v
6da0: 61 6c 67 72 69 6e 64 74 65 73 74 22 20 69 6e 20  algrindtest" in 
6db0: 24 74 61 72 67 65 74 29 7d 20 7b 0a 20 20 20 20  $target)} {.    
6dc0: 20 20 50 55 54 53 20 22 53 6b 69 70 70 69 6e 67    PUTS "Skipping
6dd0: 20 24 7a 43 6f 6e 66 69 67 20 2f 20 24 74 61 72   $zConfig / $tar
6de0: 67 65 74 20 66 6f 72 20 4d 53 56 43 2e 2e 2e 22  get for MSVC..."
6df0: 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a  .      continue.
6e00: 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 24 74      }.    if {$t
6e10: 61 72 67 65 74 20 6e 65 20 22 63 68 65 63 6b 73  arget ne "checks
6e20: 79 6d 62 6f 6c 73 22 7d 20 7b 0a 20 20 20 20 20  ymbols"} {.     
6e30: 20 73 77 69 74 63 68 20 2d 2d 20 24 3a 3a 51 55   switch -- $::QU
6e40: 49 43 4b 20 7b 0a 20 20 20 20 20 20 20 20 20 31  ICK {.         1
6e50: 20 7b 73 65 74 20 74 61 72 67 65 74 20 71 75 69   {set target qui
6e60: 63 6b 74 65 73 74 7d 0a 20 20 20 20 20 20 20 20  cktest}.        
6e70: 20 32 20 7b 73 65 74 20 74 61 72 67 65 74 20 73   2 {set target s
6e80: 6d 6f 6b 65 74 65 73 74 7d 0a 20 20 20 20 20 20  moketest}.      
6e90: 7d 0a 20 20 20 20 20 20 69 66 20 7b 24 3a 3a 42  }.      if {$::B
6ea0: 55 49 4c 44 4f 4e 4c 59 7d 20 7b 0a 20 20 20 20  UILDONLY} {.    
6eb0: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 20 74      set target t
6ec0: 65 73 74 66 69 78 74 75 72 65 0a 20 20 20 20 20  estfixture.     
6ed0: 20 20 20 69 66 20 7b 24 3a 3a 74 63 6c 5f 70 6c     if {$::tcl_pl
6ee0: 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29  atform(platform)
6ef0: 3d 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 20  =="windows"} {. 
6f00: 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20           append 
6f10: 74 61 72 67 65 74 20 2e 65 78 65 0a 20 20 20 20  target .exe.    
6f20: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
6f30: 20 20 7d 0a 20 20 20 20 73 65 74 20 63 6f 6e 66    }.    set conf
6f40: 69 67 5f 6f 70 74 69 6f 6e 73 20 5b 63 6f 6e 63  ig_options [conc
6f50: 61 74 20 24 3a 3a 43 6f 6e 66 69 67 73 28 24 7a  at $::Configs($z
6f60: 43 6f 6e 66 69 67 29 20 24 3a 3a 45 58 54 52 41  Config) $::EXTRA
6f70: 43 4f 4e 46 49 47 5d 0a 0a 20 20 20 20 69 6e 63  CONFIG]..    inc
6f80: 72 20 4e 54 45 53 54 0a 20 20 20 20 61 64 64 5f  r NTEST.    add_
6f90: 74 65 73 74 5f 73 75 69 74 65 20 61 6c 6c 20 24  test_suite all $
6fa0: 7a 43 6f 6e 66 69 67 20 24 74 61 72 67 65 74 20  zConfig $target 
6fb0: 24 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 0a  $config_options.
6fc0: 0a 20 20 20 20 23 20 49 66 20 74 68 65 20 63 6f  .    # If the co
6fd0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 63 6c  nfiguration incl
6fe0: 75 64 65 64 20 74 68 65 20 53 51 4c 49 54 45 5f  uded the SQLITE_
6ff0: 44 45 42 55 47 20 6f 70 74 69 6f 6e 2c 20 74 68  DEBUG option, th
7000: 65 6e 20 72 65 6d 6f 76 65 0a 20 20 20 20 23 20  en remove.    # 
7010: 69 74 20 61 6e 64 20 72 75 6e 20 76 65 72 79 71  it and run veryq
7020: 75 69 63 6b 2e 74 65 73 74 2e 20 49 66 20 69 74  uick.test. If it
7030: 20 64 69 64 20 6e 6f 74 20 69 6e 63 6c 75 64 65   did not include
7040: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 45 42 55   the SQLITE_DEBU
7050: 47 20 6f 70 74 69 6f 6e 0a 20 20 20 20 23 20 61  G option.    # a
7060: 64 64 20 69 74 20 61 6e 64 20 72 75 6e 20 76 65  dd it and run ve
7070: 72 79 71 75 69 63 6b 2e 74 65 73 74 2e 0a 20 20  ryquick.test..  
7080: 20 20 69 66 20 7b 24 74 61 72 67 65 74 21 3d 22    if {$target!="
7090: 63 68 65 63 6b 73 79 6d 62 6f 6c 73 22 20 26 26  checksymbols" &&
70a0: 20 24 74 61 72 67 65 74 21 3d 22 76 61 6c 67 72   $target!="valgr
70b0: 69 6e 64 74 65 73 74 22 0a 20 20 20 20 20 20 20  indtest".       
70c0: 20 20 20 20 26 26 20 24 74 61 72 67 65 74 21 3d      && $target!=
70d0: 22 66 75 7a 7a 6f 6f 6d 74 65 73 74 22 20 26 26  "fuzzoomtest" &&
70e0: 20 21 24 3a 3a 42 55 49 4c 44 4f 4e 4c 59 20 26   !$::BUILDONLY &
70f0: 26 20 24 3a 3a 51 55 49 43 4b 3c 32 7d 20 7b 0a  & $::QUICK<2} {.
7100: 20 20 20 20 20 20 73 65 74 20 64 65 62 75 67 5f        set debug_
7110: 69 64 78 20 5b 6c 73 65 61 72 63 68 20 2d 67 6c  idx [lsearch -gl
7120: 6f 62 20 24 63 6f 6e 66 69 67 5f 6f 70 74 69 6f  ob $config_optio
7130: 6e 73 20 2d 44 53 51 4c 49 54 45 5f 44 45 42 55  ns -DSQLITE_DEBU
7140: 47 2a 5d 0a 20 20 20 20 20 20 73 65 74 20 78 74  G*].      set xt
7150: 61 72 67 65 74 20 24 74 61 72 67 65 74 0a 20 20  arget $target.  
7160: 20 20 20 20 72 65 67 73 75 62 20 2d 61 6c 6c 20      regsub -all 
7170: 7b 66 75 6c 6c 74 65 73 74 5b 61 2d 7a 5d 2a 7d  {fulltest[a-z]*}
7180: 20 24 78 74 61 72 67 65 74 20 74 65 73 74 20 78   $xtarget test x
7190: 74 61 72 67 65 74 0a 20 20 20 20 20 20 72 65 67  target.      reg
71a0: 73 75 62 20 2d 61 6c 6c 20 7b 66 75 7a 7a 6f 6f  sub -all {fuzzoo
71b0: 6d 74 65 73 74 7d 20 24 78 74 61 72 67 65 74 20  mtest} $xtarget 
71c0: 66 75 7a 7a 74 65 73 74 20 78 74 61 72 67 65 74  fuzztest xtarget
71d0: 0a 20 20 20 20 20 20 69 66 20 7b 24 64 65 62 75  .      if {$debu
71e0: 67 5f 69 64 78 20 3c 20 30 7d 20 7b 0a 20 20 20  g_idx < 0} {.   
71f0: 20 20 20 20 20 69 6e 63 72 20 4e 54 45 53 54 0a       incr NTEST.
7200: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63          append c
7210: 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 20 22 20  onfig_options " 
7220: 2d 44 53 51 4c 49 54 45 5f 44 45 42 55 47 3d 31  -DSQLITE_DEBUG=1
7230: 20 2d 44 53 51 4c 49 54 45 5f 45 58 54 52 41 5f   -DSQLITE_EXTRA_
7240: 49 46 4e 55 4c 4c 52 4f 57 3d 31 22 0a 20 20 20  IFNULLROW=1".   
7250: 20 20 20 20 20 61 64 64 5f 74 65 73 74 5f 73 75       add_test_su
7260: 69 74 65 20 61 6c 6c 20 22 24 7b 7a 43 6f 6e 66  ite all "${zConf
7270: 69 67 7d 5f 64 65 62 75 67 22 20 24 78 74 61 72  ig}_debug" $xtar
7280: 67 65 74 20 24 63 6f 6e 66 69 67 5f 6f 70 74 69  get $config_opti
7290: 6f 6e 73 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ons.      } else
72a0: 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20   {.        incr 
72b0: 4e 54 45 53 54 0a 20 20 20 20 20 20 20 20 72 65  NTEST.        re
72c0: 67 73 75 62 20 7b 20 2a 2d 44 53 51 4c 49 54 45  gsub { *-DSQLITE
72d0: 5f 4d 45 4d 44 45 42 55 47 5b 5e 20 5d 2a 20 2a  _MEMDEBUG[^ ]* *
72e0: 7d 20 24 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e  } $config_option
72f0: 73 20 7b 20 7d 20 63 6f 6e 66 69 67 5f 6f 70 74  s { } config_opt
7300: 69 6f 6e 73 0a 20 20 20 20 20 20 20 20 72 65 67  ions.        reg
7310: 73 75 62 20 7b 20 2a 2d 44 53 51 4c 49 54 45 5f  sub { *-DSQLITE_
7320: 44 45 42 55 47 5b 5e 20 5d 2a 20 2a 7d 20 24 63  DEBUG[^ ]* *} $c
7330: 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 20 7b 20  onfig_options { 
7340: 7d 20 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73  } config_options
7350: 0a 20 20 20 20 20 20 20 20 61 64 64 5f 74 65 73  .        add_tes
7360: 74 5f 73 75 69 74 65 20 61 6c 6c 20 22 24 7b 7a  t_suite all "${z
7370: 43 6f 6e 66 69 67 7d 5f 6e 64 65 62 75 67 22 20  Config}_ndebug" 
7380: 24 78 74 61 72 67 65 74 20 24 63 6f 6e 66 69 67  $xtarget $config
7390: 5f 6f 70 74 69 6f 6e 73 0a 20 20 20 20 20 20 7d  _options.      }
73a0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 72 75  .    }.  }..  ru
73b0: 6e 5f 61 6c 6c 5f 74 65 73 74 5f 73 75 69 74 65  n_all_test_suite
73c0: 73 20 24 61 6c 6c 0a 0a 20 20 73 65 74 20 65 6c  s $all..  set el
73d0: 61 70 73 65 74 69 6d 65 20 5b 65 78 70 72 20 7b  apsetime [expr {
73e0: 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 2d  [clock seconds]-
73f0: 24 53 54 41 52 54 54 49 4d 45 7d 5d 0a 20 20 73  $STARTTIME}].  s
7400: 65 74 20 68 72 20 5b 65 78 70 72 20 7b 24 65 6c  et hr [expr {$el
7410: 61 70 73 65 74 69 6d 65 2f 33 36 30 30 7d 5d 0a  apsetime/3600}].
7420: 20 20 73 65 74 20 6d 69 6e 20 5b 65 78 70 72 20    set min [expr 
7430: 7b 28 24 65 6c 61 70 73 65 74 69 6d 65 2f 36 30  {($elapsetime/60
7440: 29 25 36 30 7d 5d 0a 20 20 73 65 74 20 73 65 63  )%60}].  set sec
7450: 20 5b 65 78 70 72 20 7b 24 65 6c 61 70 73 65 74   [expr {$elapset
7460: 69 6d 65 25 36 30 7d 5d 0a 20 20 73 65 74 20 65  ime%60}].  set e
7470: 74 69 6d 65 20 5b 66 6f 72 6d 61 74 20 28 25 30  time [format (%0
7480: 32 64 3a 25 30 32 64 3a 25 30 32 64 29 20 24 68  2d:%02d:%02d) $h
7490: 72 20 24 6d 69 6e 20 24 73 65 63 5d 0a 20 20 69  r $min $sec].  i
74a0: 66 20 7b 24 3a 3a 4a 4f 42 53 3e 31 7d 20 7b 61  f {$::JOBS>1} {a
74b0: 70 70 65 6e 64 20 65 74 69 6d 65 20 22 20 24 3a  ppend etime " $:
74c0: 3a 4a 4f 42 53 20 63 6f 72 65 73 22 7d 0a 20 20  :JOBS cores"}.  
74d0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63  if {[catch {exec
74e0: 20 68 6f 73 74 6e 61 6d 65 7d 20 48 4e 41 4d 45   hostname} HNAME
74f0: 5d 3d 3d 30 7d 20 7b 61 70 70 65 6e 64 20 65 74  ]==0} {append et
7500: 69 6d 65 20 22 20 6f 6e 20 24 48 4e 41 4d 45 22  ime " on $HNAME"
7510: 7d 0a 20 20 50 55 54 53 20 5b 73 74 72 69 6e 67  }.  PUTS [string
7520: 20 72 65 70 65 61 74 20 2a 20 37 39 5d 0a 20 20   repeat * 79].  
7530: 69 6e 63 72 20 3a 3a 4e 45 52 52 43 41 53 45 20  incr ::NERRCASE 
7540: 24 3a 3a 4e 45 52 52 0a 20 20 50 55 54 53 20 22  $::NERR.  PUTS "
7550: 24 3a 3a 4e 45 52 52 43 41 53 45 20 66 61 69 6c  $::NERRCASE fail
7560: 75 72 65 73 20 6f 75 74 20 6f 66 20 24 3a 3a 4e  ures out of $::N
7570: 54 45 53 54 43 41 53 45 20 74 65 73 74 73 20 69  TESTCASE tests i
7580: 6e 20 24 65 74 69 6d 65 22 0a 20 20 69 66 20 7b  n $etime".  if {
7590: 24 3a 3a 53 51 4c 49 54 45 5f 56 45 52 53 49 4f  $::SQLITE_VERSIO
75a0: 4e 20 6e 65 20 22 22 7d 20 7b 0a 20 20 20 20 50  N ne ""} {.    P
75b0: 55 54 53 20 22 53 51 4c 69 74 65 20 24 3a 3a 53  UTS "SQLite $::S
75c0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 22 0a 20  QLITE_VERSION". 
75d0: 20 7d 0a 7d 0a 0a 6d 61 69 6e 20 24 61 72 67 76   }.}..main $argv
75e0: 0a                                               .