/ Hex Artifact Content
Login

Artifact 975449bf742b8bb9025208292208af816a1fcb58:


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 73 72 63 64 69 72 20 20 20  .    --srcdir   
0160: 54 4f 50 2d 4f 46 2d 53 51 4c 49 54 45 2d 54 52  TOP-OF-SQLITE-TR
0170: 45 45 20 20 20 20 20 20 28 73 65 65 20 62 65 6c  EE      (see bel
0180: 6f 77 29 0a 20 20 20 20 2d 2d 70 6c 61 74 66 6f  ow).    --platfo
0190: 72 6d 20 50 4c 41 54 46 4f 52 4d 20 20 20 20 20  rm PLATFORM     
01a0: 20 20 20 20 20 20 20 20 20 20 20 28 73 65 65 20             (see 
01b0: 62 65 6c 6f 77 29 0a 20 20 20 20 2d 2d 63 6f 6e  below).    --con
01c0: 66 69 67 20 20 20 43 4f 4e 46 49 47 4e 41 4d 45  fig   CONFIGNAME
01d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 52                (R
01e0: 75 6e 20 6f 6e 6c 79 20 43 4f 4e 46 49 47 4e 41  un only CONFIGNA
01f0: 4d 45 29 0a 20 20 20 20 2d 2d 71 75 69 63 6b 20  ME).    --quick 
0200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0210: 20 20 20 20 20 20 20 20 20 20 20 28 52 75 6e 20             (Run 
0220: 22 76 65 72 79 71 75 69 63 6b 2e 74 65 73 74 22  "veryquick.test"
0230: 20 6f 6e 6c 79 29 0a 20 20 20 20 2d 2d 76 65 72   only).    --ver
0240: 79 71 75 69 63 6b 20 20 20 20 20 20 20 20 20 20  yquick          
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 52                (R
0260: 75 6e 20 22 6d 61 6b 65 20 73 6d 6f 6b 65 74 65  un "make smokete
0270: 73 74 22 20 6f 6e 6c 79 29 0a 20 20 20 20 2d 2d  st" only).    --
0280: 6d 73 76 63 20 20 20 20 20 20 20 20 20 20 20 20  msvc            
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 28 55 73 65 20 4d 53 56 43 20 61 73 20 74 68   (Use MSVC as th
02b0: 65 20 63 6f 6d 70 69 6c 65 72 29 0a 20 20 20 20  e compiler).    
02c0: 2d 2d 62 75 69 6c 64 6f 6e 6c 79 20 20 20 20 20  --buildonly     
02d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02e0: 20 20 20 28 4a 75 73 74 20 62 75 69 6c 64 20 74     (Just build t
02f0: 65 73 74 66 69 78 74 75 72 65 20 2d 20 64 6f 20  estfixture - do 
0300: 6e 6f 74 20 72 75 6e 29 0a 20 20 20 20 2d 2d 64  not run).    --d
0310: 72 79 72 75 6e 20 20 20 20 20 20 20 20 20 20 20  ryrun           
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 28 50 72 69 6e 74 20 77 68 61 74 20 77 6f 75 6c  (Print what woul
0340: 64 20 68 61 76 65 20 68 61 70 70 65 6e 65 64 29  d have happened)
0350: 0a 20 20 20 20 2d 2d 69 6e 66 6f 20 20 20 20 20  .    --info     
0360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0370: 20 20 20 20 20 20 20 20 28 53 68 6f 77 20 64 69          (Show di
0380: 61 67 6e 6f 73 74 69 63 20 69 6e 66 6f 29 0a 20  agnostic info). 
0390: 20 20 20 2d 2d 77 69 74 68 2d 74 63 6c 3d 44 49     --with-tcl=DI
03a0: 52 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  R               
03b0: 20 20 20 20 20 20 28 55 73 65 20 54 43 4c 20 62        (Use TCL b
03c0: 75 69 6c 64 20 61 74 20 44 49 52 29 0a 20 20 20  uild at DIR).   
03d0: 20 2d 2d 6a 6f 62 73 20 20 20 20 20 4e 20 20 20   --jobs     N   
03e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03f0: 20 20 20 20 28 55 73 65 20 4e 20 70 72 6f 63 65      (Use N proce
0400: 73 73 65 73 20 2d 20 64 65 66 61 75 6c 74 20 31  sses - default 1
0410: 29 0a 20 20 20 20 2d 2d 70 72 6f 67 72 65 73 73  ).    --progress
0420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0430: 20 20 20 20 20 20 20 20 20 28 53 68 6f 77 20 70           (Show p
0440: 72 6f 67 72 65 73 73 20 6d 65 73 73 61 67 65 73  rogress messages
0450: 29 0a 0a 54 68 65 20 64 65 66 61 75 6c 74 20 76  )..The default v
0460: 61 6c 75 65 20 66 6f 72 20 2d 2d 73 72 63 64 69  alue for --srcdi
0470: 72 20 69 73 20 74 68 65 20 70 61 72 65 6e 74 20  r is the parent 
0480: 6f 66 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  of the directory
0490: 20 68 6f 6c 64 69 6e 67 0a 74 68 69 73 20 73 63   holding.this sc
04a0: 72 69 70 74 2e 0a 0a 54 68 65 20 73 63 72 69 70  ript...The scrip
04b0: 74 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65  t determines the
04c0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66   default value f
04d0: 6f 72 20 2d 2d 70 6c 61 74 66 6f 72 6d 20 75 73  or --platform us
04e0: 69 6e 67 20 74 68 65 0a 24 74 63 6c 5f 70 6c 61  ing the.$tcl_pla
04f0: 74 66 6f 72 6d 28 6f 73 29 20 61 6e 64 20 24 74  tform(os) and $t
0500: 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68  cl_platform(mach
0510: 69 6e 65 29 20 76 61 72 69 61 62 6c 65 73 2e 20  ine) variables. 
0520: 20 53 75 70 70 6f 72 74 65 64 0a 70 6c 61 74 66   Supported.platf
0530: 6f 72 6d 73 20 61 72 65 20 22 4c 69 6e 75 78 2d  orms are "Linux-
0540: 78 38 36 22 2c 20 22 4c 69 6e 75 78 2d 78 38 36  x86", "Linux-x86
0550: 5f 36 34 22 2c 20 22 44 61 72 77 69 6e 2d 69 33  _64", "Darwin-i3
0560: 38 36 22 2c 0a 22 44 61 72 77 69 6e 2d 78 38 36  86",."Darwin-x86
0570: 5f 36 34 22 2c 20 22 57 69 6e 64 6f 77 73 20 4e  _64", "Windows N
0580: 54 2d 69 6e 74 65 6c 22 2c 20 61 6e 64 20 22 57  T-intel", and "W
0590: 69 6e 64 6f 77 73 20 4e 54 2d 61 6d 64 36 34 22  indows NT-amd64"
05a0: 2e 0a 0a 45 76 65 72 79 20 74 65 73 74 20 62 65  ...Every test be
05b0: 67 69 6e 73 20 77 69 74 68 20 61 20 66 72 65 73  gins with a fres
05c0: 68 20 72 75 6e 20 6f 66 20 74 68 65 20 63 6f 6e  h run of the con
05d0: 66 69 67 75 72 65 20 73 63 72 69 70 74 20 61 74  figure script at
05e0: 20 74 68 65 20 74 6f 70 0a 6f 66 20 74 68 65 20   the top.of the 
05f0: 53 51 4c 69 74 65 20 73 6f 75 72 63 65 20 74 72  SQLite source tr
0600: 65 65 2e 0a 7d 0a 0a 23 20 52 65 74 75 72 6e 20  ee..}..# Return 
0610: 61 20 74 69 6d 65 73 74 61 6d 70 20 6f 66 20 74  a timestamp of t
0620: 68 65 20 66 6f 72 6d 20 48 48 3a 4d 4d 3a 53 53  he form HH:MM:SS
0630: 0a 23 0a 70 72 6f 63 20 6e 6f 77 20 7b 7d 20 7b  .#.proc now {} {
0640: 0a 20 20 72 65 74 75 72 6e 20 5b 63 6c 6f 63 6b  .  return [clock
0650: 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73   format [clock s
0660: 65 63 6f 6e 64 73 5d 20 2d 66 6f 72 6d 61 74 20  econds] -format 
0670: 25 48 3a 25 4d 3a 25 53 5d 0a 7d 0a 0a 23 20 4f  %H:%M:%S].}..# O
0680: 6d 69 74 20 63 6f 6d 6d 65 6e 74 73 20 28 74 65  mit comments (te
0690: 78 74 20 62 65 74 77 65 65 6e 20 23 20 61 6e 64  xt between # and
06a0: 20 5c 6e 29 20 69 6e 20 61 20 6c 6f 6e 67 20 6d   \n) in a long m
06b0: 75 6c 74 69 2d 6c 69 6e 65 20 73 74 72 69 6e 67  ulti-line string
06c0: 2e 0a 23 0a 70 72 6f 63 20 73 74 72 69 70 5f 63  ..#.proc strip_c
06d0: 6f 6d 6d 65 6e 74 73 20 7b 69 6e 7d 20 7b 0a 20  omments {in} {. 
06e0: 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 23 5b   regsub -all {#[
06f0: 5e 5c 6e 5d 2a 5c 6e 7d 20 24 69 6e 20 7b 7d 20  ^\n]*\n} $in {} 
0700: 6f 75 74 0a 20 20 72 65 74 75 72 6e 20 24 6f 75  out.  return $ou
0710: 74 0a 7d 0a 0a 61 72 72 61 79 20 73 65 74 20 3a  t.}..array set :
0720: 3a 43 6f 6e 66 69 67 73 20 5b 73 74 72 69 70 5f  :Configs [strip_
0730: 63 6f 6d 6d 65 6e 74 73 20 7b 0a 20 20 22 44 65  comments {.  "De
0740: 66 61 75 6c 74 22 20 7b 0a 20 20 20 20 2d 4f 32  fault" {.    -O2
0750: 0a 20 20 20 20 2d 2d 64 69 73 61 62 6c 65 2d 61  .    --disable-a
0760: 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 2d 2d 64 69  malgamation --di
0770: 73 61 62 6c 65 2d 73 68 61 72 65 64 0a 20 20 7d  sable-shared.  }
0780: 0a 20 20 22 53 61 6e 69 74 69 7a 65 22 20 7b 0a  .  "Sanitize" {.
0790: 20 20 20 20 43 43 3d 63 6c 61 6e 67 20 2d 66 73      CC=clang -fs
07a0: 61 6e 69 74 69 7a 65 3d 75 6e 64 65 66 69 6e 65  anitize=undefine
07b0: 64 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  d.    -DSQLITE_E
07c0: 4e 41 42 4c 45 5f 53 54 41 54 34 0a 20 20 7d 0a  NABLE_STAT4.  }.
07d0: 20 20 22 48 61 76 65 2d 4e 6f 74 22 20 7b 0a 20    "Have-Not" {. 
07e0: 20 20 20 23 20 54 68 65 20 22 48 61 76 65 2d 4e     # The "Have-N
07f0: 6f 74 22 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ot" configuratio
0800: 6e 20 73 65 74 73 20 61 6c 6c 20 70 6f 73 73 69  n sets all possi
0810: 62 6c 65 20 2d 55 48 41 56 45 5f 66 65 61 74 75  ble -UHAVE_featu
0820: 72 65 20 6f 70 74 69 6f 6e 73 0a 20 20 20 20 23  re options.    #
0830: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 76 65 72   in order to ver
0840: 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64  ify that the cod
0850: 65 20 77 6f 72 6b 73 20 65 76 65 6e 20 6f 6e 20  e works even on 
0860: 70 6c 61 74 66 6f 72 6d 73 20 74 68 61 74 20 6c  platforms that l
0870: 61 63 6b 0a 20 20 20 20 23 20 74 68 65 73 65 20  ack.    # these 
0880: 73 75 70 70 6f 72 74 20 73 65 72 76 69 63 65 73  support services
0890: 2e 0a 20 20 20 20 2d 44 48 41 56 45 5f 46 44 41  ..    -DHAVE_FDA
08a0: 54 41 53 59 4e 43 3d 30 0a 20 20 20 20 2d 44 48  TASYNC=0.    -DH
08b0: 41 56 45 5f 47 4d 54 49 4d 45 5f 52 3d 30 0a 20  AVE_GMTIME_R=0. 
08c0: 20 20 20 2d 44 48 41 56 45 5f 49 53 4e 41 4e 3d     -DHAVE_ISNAN=
08d0: 30 0a 20 20 20 20 2d 44 48 41 56 45 5f 4c 4f 43  0.    -DHAVE_LOC
08e0: 41 4c 54 49 4d 45 5f 52 3d 30 0a 20 20 20 20 2d  ALTIME_R=0.    -
08f0: 44 48 41 56 45 5f 4c 4f 43 41 4c 54 49 4d 45 5f  DHAVE_LOCALTIME_
0900: 53 3d 30 0a 20 20 20 20 2d 44 48 41 56 45 5f 4d  S=0.    -DHAVE_M
0910: 41 4c 4c 4f 43 5f 55 53 41 42 4c 45 5f 53 49 5a  ALLOC_USABLE_SIZ
0920: 45 3d 30 0a 20 20 20 20 2d 44 48 41 56 45 5f 53  E=0.    -DHAVE_S
0930: 54 52 43 48 52 4e 55 4c 3d 30 0a 20 20 20 20 2d  TRCHRNUL=0.    -
0940: 44 48 41 56 45 5f 55 53 4c 45 45 50 3d 30 0a 20  DHAVE_USLEEP=0. 
0950: 20 20 20 2d 44 48 41 56 45 5f 55 54 49 4d 45 3d     -DHAVE_UTIME=
0960: 30 0a 20 20 7d 0a 20 20 22 55 6e 6c 6f 63 6b 2d  0.  }.  "Unlock-
0970: 4e 6f 74 69 66 79 22 20 7b 0a 20 20 20 20 2d 4f  Notify" {.    -O
0980: 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  2.    -DSQLITE_E
0990: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
09a0: 49 46 59 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  IFY.    -DSQLITE
09b0: 5f 54 48 52 45 41 44 53 41 46 45 0a 20 20 20 20  _THREADSAFE.    
09c0: 2d 44 53 51 4c 49 54 45 5f 54 43 4c 5f 44 45 46  -DSQLITE_TCL_DEF
09d0: 41 55 4c 54 5f 46 55 4c 4c 4d 55 54 45 58 3d 31  AULT_FULLMUTEX=1
09e0: 0a 20 20 7d 0a 20 20 22 53 65 63 75 72 65 2d 44  .  }.  "Secure-D
09f0: 65 6c 65 74 65 22 20 7b 0a 20 20 20 20 2d 4f 32  elete" {.    -O2
0a00: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 53 45  .    -DSQLITE_SE
0a10: 43 55 52 45 5f 44 45 4c 45 54 45 3d 31 0a 20 20  CURE_DELETE=1.  
0a20: 20 20 2d 44 53 51 4c 49 54 45 5f 53 4f 55 4e 44    -DSQLITE_SOUND
0a30: 45 58 3d 31 0a 20 20 7d 0a 20 20 22 55 70 64 61  EX=1.  }.  "Upda
0a40: 74 65 2d 44 65 6c 65 74 65 2d 4c 69 6d 69 74 22  te-Delete-Limit"
0a50: 20 7b 0a 20 20 20 20 2d 4f 32 0a 20 20 20 20 2d   {.    -O2.    -
0a60: 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  DSQLITE_DEFAULT_
0a70: 46 49 4c 45 5f 46 4f 52 4d 41 54 3d 34 0a 20 20  FILE_FORMAT=4.  
0a80: 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c    -DSQLITE_ENABL
0a90: 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f  E_UPDATE_DELETE_
0aa0: 4c 49 4d 49 54 3d 31 0a 20 20 20 20 2d 44 53 51  LIMIT=1.    -DSQ
0ab0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
0ac0: 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20  _SCANSTATUS.    
0ad0: 2d 44 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f  -DSQLITE_LIKE_DO
0ae0: 45 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53  ESNT_MATCH_BLOBS
0af0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e  .    -DSQLITE_EN
0b00: 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54  ABLE_CURSOR_HINT
0b10: 53 0a 20 20 20 20 2d 2d 65 6e 61 62 6c 65 2d 6a  S.    --enable-j
0b20: 73 6f 6e 31 0a 20 20 7d 0a 20 20 22 43 68 65 63  son1.  }.  "Chec
0b30: 6b 2d 53 79 6d 62 6f 6c 73 22 20 7b 0a 20 20 20  k-Symbols" {.   
0b40: 20 2d 44 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42   -DSQLITE_MEMDEB
0b50: 55 47 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  UG=1.    -DSQLIT
0b60: 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 5f 50 41  E_ENABLE_FTS3_PA
0b70: 52 45 4e 54 48 45 53 49 53 3d 31 0a 20 20 20 20  RENTHESIS=1.    
0b80: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
0b90: 46 54 53 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c  FTS3=1.    -DSQL
0ba0: 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52 45 45  ITE_ENABLE_RTREE
0bb0: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
0bc0: 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 3d 31  ENABLE_MEMSYS5=1
0bd0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e  .    -DSQLITE_EN
0be0: 41 42 4c 45 5f 4d 45 4d 53 59 53 33 3d 31 0a 20  ABLE_MEMSYS3=1. 
0bf0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
0c00: 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d 45 54 41 44 41  LE_COLUMN_METADA
0c10: 54 41 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  TA=1.    -DSQLIT
0c20: 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
0c30: 44 45 4c 45 54 45 5f 4c 49 4d 49 54 3d 31 0a 20  DELETE_LIMIT=1. 
0c40: 20 20 20 2d 44 53 51 4c 49 54 45 5f 53 45 43 55     -DSQLITE_SECU
0c50: 52 45 5f 44 45 4c 45 54 45 3d 31 0a 20 20 20 20  RE_DELETE=1.    
0c60: 2d 44 53 51 4c 49 54 45 5f 53 4f 55 4e 44 45 58  -DSQLITE_SOUNDEX
0c70: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
0c80: 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52  ENABLE_ATOMIC_WR
0c90: 49 54 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  ITE=1.    -DSQLI
0ca0: 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  TE_ENABLE_MEMORY
0cb0: 5f 4d 41 4e 41 47 45 4d 45 4e 54 3d 31 0a 20 20  _MANAGEMENT=1.  
0cc0: 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c    -DSQLITE_ENABL
0cd0: 45 5f 4f 56 45 52 53 49 5a 45 5f 43 45 4c 4c 5f  E_OVERSIZE_CELL_
0ce0: 43 48 45 43 4b 3d 31 0a 20 20 20 20 2d 44 53 51  CHECK=1.    -DSQ
0cf0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
0d00: 34 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45  4.    -DSQLITE_E
0d10: 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53  NABLE_STMT_SCANS
0d20: 54 41 54 55 53 0a 20 20 20 20 2d 2d 65 6e 61 62  TATUS.    --enab
0d30: 6c 65 2d 6a 73 6f 6e 31 20 2d 2d 65 6e 61 62 6c  le-json1 --enabl
0d40: 65 2d 66 74 73 35 0a 20 20 7d 0a 20 20 22 44 65  e-fts5.  }.  "De
0d50: 62 75 67 2d 4f 6e 65 22 20 7b 0a 20 20 20 20 2d  bug-One" {.    -
0d60: 2d 64 69 73 61 62 6c 65 2d 73 68 61 72 65 64 0a  -disable-shared.
0d70: 20 20 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53 51      -O2.    -DSQ
0d80: 4c 49 54 45 5f 44 45 42 55 47 3d 31 0a 20 20 20  LITE_DEBUG=1.   
0d90: 20 2d 44 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42   -DSQLITE_MEMDEB
0da0: 55 47 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  UG=1.    -DSQLIT
0db0: 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 3d 31 0a 20  E_MUTEX_NOOP=1. 
0dc0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 54 43 4c 5f     -DSQLITE_TCL_
0dd0: 44 45 46 41 55 4c 54 5f 46 55 4c 4c 4d 55 54 45  DEFAULT_FULLMUTE
0de0: 58 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  X=1.    -DSQLITE
0df0: 5f 45 4e 41 42 4c 45 5f 46 54 53 33 3d 31 0a 20  _ENABLE_FTS3=1. 
0e00: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
0e10: 4c 45 5f 52 54 52 45 45 3d 31 0a 20 20 20 20 2d  LE_RTREE=1.    -
0e20: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d  DSQLITE_ENABLE_M
0e30: 45 4d 53 59 53 35 3d 31 0a 20 20 20 20 2d 44 53  EMSYS5=1.    -DS
0e40: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
0e50: 53 59 53 33 3d 31 0a 20 20 20 20 2d 44 53 51 4c  SYS3=1.    -DSQL
0e60: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
0e70: 4e 5f 4d 45 54 41 44 41 54 41 3d 31 0a 20 20 20  N_METADATA=1.   
0e80: 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
0e90: 5f 53 54 41 54 34 0a 20 20 20 20 2d 44 53 51 4c  _STAT4.    -DSQL
0ea0: 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
0eb0: 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 20 20 2d 44  N_COLUMNS.    -D
0ec0: 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
0ed0: 48 45 44 3d 31 32 35 0a 20 20 7d 0a 20 20 22 46  HED=125.  }.  "F
0ee0: 61 73 74 2d 4f 6e 65 22 20 7b 0a 20 20 20 20 2d  ast-One" {.    -
0ef0: 4f 36 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  O6.    -DSQLITE_
0f00: 45 4e 41 42 4c 45 5f 46 54 53 34 3d 31 0a 20 20  ENABLE_FTS4=1.  
0f10: 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c    -DSQLITE_ENABL
0f20: 45 5f 52 54 52 45 45 3d 31 0a 20 20 20 20 2d 44  E_RTREE=1.    -D
0f30: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
0f40: 41 54 34 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  AT4.    -DSQLITE
0f50: 5f 45 4e 41 42 4c 45 5f 52 42 55 0a 20 20 20 20  _ENABLE_RBU.    
0f60: 2d 44 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  -DSQLITE_MAX_ATT
0f70: 41 43 48 45 44 3d 31 32 35 0a 20 20 20 20 2d 44  ACHED=125.    -D
0f80: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 3d  LONGDOUBLE_TYPE=
0f90: 64 6f 75 62 6c 65 0a 20 20 7d 0a 20 20 22 44 65  double.  }.  "De
0fa0: 76 69 63 65 2d 4f 6e 65 22 20 7b 0a 20 20 20 20  vice-One" {.    
0fb0: 2d 4f 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  -O2.    -DSQLITE
0fc0: 5f 44 45 42 55 47 3d 31 0a 20 20 20 20 2d 44 53  _DEBUG=1.    -DS
0fd0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 41 55  QLITE_DEFAULT_AU
0fe0: 54 4f 56 41 43 55 55 4d 3d 31 0a 20 20 20 20 2d  TOVACUUM=1.    -
0ff0: 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f  DSQLITE_DEFAULT_
1000: 43 41 43 48 45 5f 53 49 5a 45 3d 36 34 0a 20 20  CACHE_SIZE=64.  
1010: 20 20 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55    -DSQLITE_DEFAU
1020: 4c 54 5f 50 41 47 45 5f 53 49 5a 45 3d 31 30 32  LT_PAGE_SIZE=102
1030: 34 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44  4.    -DSQLITE_D
1040: 45 46 41 55 4c 54 5f 54 45 4d 50 5f 43 41 43 48  EFAULT_TEMP_CACH
1050: 45 5f 53 49 5a 45 3d 33 32 0a 20 20 20 20 2d 44  E_SIZE=32.    -D
1060: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 4c  SQLITE_DISABLE_L
1070: 46 53 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  FS=1.    -DSQLIT
1080: 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
1090: 57 52 49 54 45 3d 31 0a 20 20 20 20 2d 44 53 51  WRITE=1.    -DSQ
10a0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52  LITE_ENABLE_IOTR
10b0: 41 43 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  ACE=1.    -DSQLI
10c0: 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  TE_ENABLE_MEMORY
10d0: 5f 4d 41 4e 41 47 45 4d 45 4e 54 3d 31 0a 20 20  _MANAGEMENT=1.  
10e0: 20 20 2d 44 53 51 4c 49 54 45 5f 4d 41 58 5f 50    -DSQLITE_MAX_P
10f0: 41 47 45 5f 53 49 5a 45 3d 34 30 39 36 0a 20 20  AGE_SIZE=4096.  
1100: 20 20 2d 44 53 51 4c 49 54 45 5f 4f 4d 49 54 5f    -DSQLITE_OMIT_
1110: 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 3d 31  LOAD_EXTENSION=1
1120: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4f 4d  .    -DSQLITE_OM
1130: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
1140: 42 41 43 4b 3d 31 0a 20 20 20 20 2d 44 53 51 4c  BACK=1.    -DSQL
1150: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
1160: 54 41 42 4c 45 3d 31 0a 20 20 20 20 2d 44 53 51  TABLE=1.    -DSQ
1170: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
1180: 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 20 20 2d  EN_COLUMNS.    -
1190: 44 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f  DSQLITE_TEMP_STO
11a0: 52 45 3d 33 0a 20 20 20 20 2d 2d 65 6e 61 62 6c  RE=3.    --enabl
11b0: 65 2d 6a 73 6f 6e 31 0a 20 20 7d 0a 20 20 22 44  e-json1.  }.  "D
11c0: 65 76 69 63 65 2d 54 77 6f 22 20 7b 0a 20 20 20  evice-Two" {.   
11d0: 20 2d 44 53 51 4c 49 54 45 5f 34 5f 42 59 54 45   -DSQLITE_4_BYTE
11e0: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 3d  _ALIGNED_MALLOC=
11f0: 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44  1.    -DSQLITE_D
1200: 45 46 41 55 4c 54 5f 41 55 54 4f 56 41 43 55 55  EFAULT_AUTOVACUU
1210: 4d 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  M=1.    -DSQLITE
1220: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
1230: 49 5a 45 3d 31 30 30 30 0a 20 20 20 20 2d 44 53  IZE=1000.    -DS
1240: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4c 4f  QLITE_DEFAULT_LO
1250: 43 4b 49 4e 47 5f 4d 4f 44 45 3d 30 0a 20 20 20  CKING_MODE=0.   
1260: 20 2d 44 53 51 4c 49 54 45 5f 44 45 46 41 55 4c   -DSQLITE_DEFAUL
1270: 54 5f 50 41 47 45 5f 53 49 5a 45 3d 31 30 32 34  T_PAGE_SIZE=1024
1280: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 44 45  .    -DSQLITE_DE
1290: 46 41 55 4c 54 5f 54 45 4d 50 5f 43 41 43 48 45  FAULT_TEMP_CACHE
12a0: 5f 53 49 5a 45 3d 31 30 30 30 0a 20 20 20 20 2d  _SIZE=1000.    -
12b0: 44 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f  DSQLITE_DISABLE_
12c0: 4c 46 53 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  LFS=1.    -DSQLI
12d0: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 3d 31  TE_ENABLE_FTS3=1
12e0: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e  .    -DSQLITE_EN
12f0: 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41  ABLE_MEMORY_MANA
1300: 47 45 4d 45 4e 54 3d 31 0a 20 20 20 20 2d 44 53  GEMENT=1.    -DS
1310: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52  QLITE_ENABLE_RTR
1320: 45 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54  EE=1.    -DSQLIT
1330: 45 5f 4d 41 58 5f 43 4f 4d 50 4f 55 4e 44 5f 53  E_MAX_COMPOUND_S
1340: 45 4c 45 43 54 3d 35 30 0a 20 20 20 20 2d 44 53  ELECT=50.    -DS
1350: 51 4c 49 54 45 5f 4d 41 58 5f 50 41 47 45 5f 53  QLITE_MAX_PAGE_S
1360: 49 5a 45 3d 33 32 37 36 38 0a 20 20 20 20 2d 44  IZE=32768.    -D
1370: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
1380: 45 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  E=1.    -DSQLITE
1390: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 33 0a 20 20  _TEMP_STORE=3.  
13a0: 20 20 2d 44 53 51 4c 49 54 45 5f 54 48 52 45 41    -DSQLITE_THREA
13b0: 44 53 41 46 45 3d 32 0a 20 20 20 20 2d 2d 65 6e  DSAFE=2.    --en
13c0: 61 62 6c 65 2d 6a 73 6f 6e 31 20 2d 2d 65 6e 61  able-json1 --ena
13d0: 62 6c 65 2d 66 74 73 35 0a 20 20 7d 0a 20 20 22  ble-fts5.  }.  "
13e0: 4c 6f 63 6b 69 6e 67 2d 53 74 79 6c 65 22 20 7b  Locking-Style" {
13f0: 0a 20 20 20 20 2d 4f 32 0a 20 20 20 20 2d 44 53  .    -O2.    -DS
1400: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
1410: 4b 49 4e 47 5f 53 54 59 4c 45 3d 31 0a 20 20 7d  KING_STYLE=1.  }
1420: 0a 20 20 22 4f 53 2d 58 22 20 7b 0a 20 20 20 20  .  "OS-X" {.    
1430: 2d 4f 31 20 20 20 23 20 41 76 6f 69 64 20 61 20  -O1   # Avoid a 
1440: 63 6f 6d 70 69 6c 65 72 20 62 75 67 20 69 6e 20  compiler bug in 
1450: 67 63 63 20 34 2e 32 2e 31 20 62 75 69 6c 64 20  gcc 4.2.1 build 
1460: 35 36 35 38 0a 20 20 20 20 2d 44 53 51 4c 49 54  5658.    -DSQLIT
1470: 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
1480: 4e 53 49 4f 4e 3d 31 0a 20 20 20 20 2d 44 53 51  NSION=1.    -DSQ
1490: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
14a0: 53 54 41 54 55 53 3d 30 0a 20 20 20 20 2d 44 53  STATUS=0.    -DS
14b0: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
14c0: 3d 32 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =2.    -DSQLITE_
14d0: 4f 53 5f 55 4e 49 58 3d 31 0a 20 20 20 20 2d 44  OS_UNIX=1.    -D
14e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4a 53  SQLITE_ENABLE_JS
14f0: 4f 4e 31 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49  ON1=1.    -DSQLI
1500: 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e  TE_ENABLE_LOCKIN
1510: 47 5f 53 54 59 4c 45 3d 31 0a 20 20 20 20 2d 44  G_STYLE=1.    -D
1520: 55 53 45 5f 50 52 45 41 44 3d 31 0a 20 20 20 20  USE_PREAD=1.    
1530: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
1540: 52 54 52 45 45 3d 31 0a 20 20 20 20 2d 44 53 51  RTREE=1.    -DSQ
1550: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
1560: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
1570: 45 4e 41 42 4c 45 5f 46 54 53 33 5f 50 41 52 45  ENABLE_FTS3_PARE
1580: 4e 54 48 45 53 49 53 3d 31 0a 20 20 20 20 2d 44  NTHESIS=1.    -D
1590: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43  SQLITE_DEFAULT_C
15a0: 41 43 48 45 5f 53 49 5a 45 3d 31 30 30 30 0a 20  ACHE_SIZE=1000. 
15b0: 20 20 20 2d 44 53 51 4c 49 54 45 5f 4d 41 58 5f     -DSQLITE_MAX_
15c0: 4c 45 4e 47 54 48 3d 32 31 34 37 34 38 33 36 34  LENGTH=214748364
15d0: 35 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4d  5.    -DSQLITE_M
15e0: 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
15f0: 45 52 3d 35 30 30 30 30 30 0a 20 20 20 20 2d 44  ER=500000.    -D
1600: 53 51 4c 49 54 45 5f 44 45 42 55 47 3d 31 0a 20  SQLITE_DEBUG=1. 
1610: 20 20 20 2d 44 53 51 4c 49 54 45 5f 50 52 45 46     -DSQLITE_PREF
1620: 45 52 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47  ER_PROXY_LOCKING
1630: 3d 31 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  =1.    -DSQLITE_
1640: 45 4e 41 42 4c 45 5f 41 50 49 5f 41 52 4d 4f 52  ENABLE_API_ARMOR
1650: 3d 31 0a 20 20 20 20 2d 2d 65 6e 61 62 6c 65 2d  =1.    --enable-
1660: 6a 73 6f 6e 31 20 2d 2d 65 6e 61 62 6c 65 2d 66  json1 --enable-f
1670: 74 73 35 0a 20 20 7d 0a 20 20 22 45 78 74 72 61  ts5.  }.  "Extra
1680: 2d 52 6f 62 75 73 74 6e 65 73 73 22 20 7b 0a 20  -Robustness" {. 
1690: 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42     -DSQLITE_ENAB
16a0: 4c 45 5f 4f 56 45 52 53 49 5a 45 5f 43 45 4c 4c  LE_OVERSIZE_CELL
16b0: 5f 43 48 45 43 4b 3d 31 0a 20 20 20 20 2d 44 53  _CHECK=1.    -DS
16c0: 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
16d0: 45 44 3d 36 32 0a 20 20 7d 0a 20 20 22 44 65 76  ED=62.  }.  "Dev
16e0: 6b 69 74 22 20 7b 0a 20 20 20 20 2d 44 53 51 4c  kit" {.    -DSQL
16f0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
1700: 5f 46 4f 52 4d 41 54 3d 34 0a 20 20 20 20 2d 44  _FORMAT=4.    -D
1710: 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1720: 48 45 44 3d 33 30 0a 20 20 20 20 2d 44 53 51 4c  HED=30.    -DSQL
1730: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
1740: 4e 5f 4d 45 54 41 44 41 54 41 0a 20 20 20 20 2d  N_METADATA.    -
1750: 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46  DSQLITE_ENABLE_F
1760: 54 53 34 0a 20 20 20 20 2d 44 53 51 4c 49 54 45  TS4.    -DSQLITE
1770: 5f 45 4e 41 42 4c 45 5f 46 54 53 34 5f 50 41 52  _ENABLE_FTS4_PAR
1780: 45 4e 54 48 45 53 49 53 0a 20 20 20 20 2d 44 53  ENTHESIS.    -DS
1790: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 46 54  QLITE_DISABLE_FT
17a0: 53 34 5f 44 45 46 45 52 52 45 44 0a 20 20 20 20  S4_DEFERRED.    
17b0: 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  -DSQLITE_ENABLE_
17c0: 52 54 52 45 45 0a 20 20 20 20 2d 2d 65 6e 61 62  RTREE.    --enab
17d0: 6c 65 2d 6a 73 6f 6e 31 20 2d 2d 65 6e 61 62 6c  le-json1 --enabl
17e0: 65 2d 66 74 73 35 0a 20 20 7d 0a 20 20 22 4e 6f  e-fts5.  }.  "No
17f0: 2d 6c 6f 6f 6b 61 73 69 64 65 22 20 7b 0a 20 20  -lookaside" {.  
1800: 20 20 2d 44 53 51 4c 49 54 45 5f 54 45 53 54 5f    -DSQLITE_TEST_
1810: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 3d 31  REALLOC_STRESS=1
1820: 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 4f 4d  .    -DSQLITE_OM
1830: 49 54 5f 4c 4f 4f 4b 41 53 49 44 45 3d 31 0a 20  IT_LOOKASIDE=1. 
1840: 20 20 20 2d 44 48 41 56 45 5f 55 53 4c 45 45 50     -DHAVE_USLEEP
1850: 3d 31 0a 20 20 7d 0a 20 20 22 56 61 6c 67 72 69  =1.  }.  "Valgri
1860: 6e 64 22 20 7b 0a 20 20 20 20 2d 44 53 51 4c 49  nd" {.    -DSQLI
1870: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a  TE_ENABLE_STAT4.
1880: 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41      -DSQLITE_ENA
1890: 42 4c 45 5f 46 54 53 34 0a 20 20 20 20 2d 44 53  BLE_FTS4.    -DS
18a0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 52 54 52  QLITE_ENABLE_RTR
18b0: 45 45 0a 20 20 20 20 2d 44 53 51 4c 49 54 45 5f  EE.    -DSQLITE_
18c0: 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
18d0: 4c 55 4d 4e 53 0a 20 20 20 20 2d 2d 65 6e 61 62  LUMNS.    --enab
18e0: 6c 65 2d 6a 73 6f 6e 31 0a 20 20 7d 0a 0a 20 20  le-json1.  }..  
18f0: 23 20 54 68 65 20 6e 65 78 74 20 67 72 6f 75 70  # The next group
1900: 20 6f 66 20 63 6f 6e 66 69 67 75 72 61 74 69 6f   of configuratio
1910: 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79  ns are used only
1920: 20 62 79 20 74 68 65 0a 20 20 23 20 46 61 69 6c   by the.  # Fail
1930: 75 72 65 2d 44 65 74 65 63 74 69 6f 6e 20 70 6c  ure-Detection pl
1940: 61 74 66 6f 72 6d 2e 20 20 54 68 65 79 20 61 72  atform.  They ar
1950: 65 20 61 6c 6c 20 74 68 65 20 73 61 6d 65 2c 20  e all the same, 
1960: 62 75 74 20 77 65 20 6e 65 65 64 0a 20 20 23 20  but we need.  # 
1970: 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 73 20  different names 
1980: 66 6f 72 20 74 68 65 6d 20 61 6c 6c 20 73 6f 20  for them all so 
1990: 74 68 61 74 20 74 68 65 79 20 72 65 73 75 6c 74  that they result
19a0: 73 20 61 70 70 65 61 72 20 69 6e 20 73 65 70 61  s appear in sepa
19b0: 72 61 74 65 0a 20 20 23 20 73 75 62 64 69 72 65  rate.  # subdire
19c0: 63 74 6f 72 69 65 73 2e 0a 20 20 23 0a 20 20 46  ctories..  #.  F
19d0: 61 69 6c 30 20 7b 2d 4f 30 7d 0a 20 20 46 61 69  ail0 {-O0}.  Fai
19e0: 6c 32 20 7b 2d 4f 30 7d 0a 20 20 46 61 69 6c 33  l2 {-O0}.  Fail3
19f0: 20 7b 2d 4f 30 7d 0a 20 20 46 61 69 6c 34 20 7b   {-O0}.  Fail4 {
1a00: 2d 4f 30 7d 0a 20 20 46 75 7a 7a 46 61 69 6c 31  -O0}.  FuzzFail1
1a10: 20 7b 2d 4f 30 7d 0a 20 20 46 75 7a 7a 46 61 69   {-O0}.  FuzzFai
1a20: 6c 32 20 7b 2d 4f 30 7d 0a 7d 5d 0a 0a 61 72 72  l2 {-O0}.}]..arr
1a30: 61 79 20 73 65 74 20 3a 3a 50 6c 61 74 66 6f 72  ay set ::Platfor
1a40: 6d 73 20 5b 73 74 72 69 70 5f 63 6f 6d 6d 65 6e  ms [strip_commen
1a50: 74 73 20 7b 0a 20 20 4c 69 6e 75 78 2d 78 38 36  ts {.  Linux-x86
1a60: 5f 36 34 20 7b 0a 20 20 20 20 22 43 68 65 63 6b  _64 {.    "Check
1a70: 2d 53 79 6d 62 6f 6c 73 22 20 20 20 20 20 20 20  -Symbols"       
1a80: 20 20 20 20 63 68 65 63 6b 73 79 6d 62 6f 6c 73      checksymbols
1a90: 0a 20 20 20 20 22 46 61 73 74 2d 4f 6e 65 22 20  .    "Fast-One" 
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1ab0: 75 7a 7a 74 65 73 74 0a 20 20 20 20 22 44 65 62  uzztest.    "Deb
1ac0: 75 67 2d 4f 6e 65 22 20 20 20 20 20 20 20 20 20  ug-One"         
1ad0: 20 20 20 20 20 20 22 6d 70 74 65 73 74 20 74 65        "mptest te
1ae0: 73 74 22 0a 20 20 20 20 22 48 61 76 65 2d 4e 6f  st".    "Have-No
1af0: 74 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t"              
1b00: 20 20 74 65 73 74 0a 20 20 20 20 22 53 65 63 75    test.    "Secu
1b10: 72 65 2d 44 65 6c 65 74 65 22 20 20 20 20 20 20  re-Delete"      
1b20: 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22 55       test.    "U
1b30: 6e 6c 6f 63 6b 2d 4e 6f 74 69 66 79 22 20 20 20  nlock-Notify"   
1b40: 20 20 20 20 20 20 20 20 22 51 55 49 43 4b 54 45          "QUICKTE
1b50: 53 54 5f 49 4e 43 4c 55 44 45 3d 6e 6f 74 69 66  ST_INCLUDE=notif
1b60: 79 32 2e 74 65 73 74 20 74 65 73 74 22 0a 20 20  y2.test test".  
1b70: 20 20 22 55 70 64 61 74 65 2d 44 65 6c 65 74 65    "Update-Delete
1b80: 2d 4c 69 6d 69 74 22 20 20 20 20 20 74 65 73 74  -Limit"     test
1b90: 0a 20 20 20 20 22 45 78 74 72 61 2d 52 6f 62 75  .    "Extra-Robu
1ba0: 73 74 6e 65 73 73 22 20 20 20 20 20 20 20 20 74  stness"        t
1bb0: 65 73 74 0a 20 20 20 20 22 44 65 76 69 63 65 2d  est.    "Device-
1bc0: 54 77 6f 22 20 20 20 20 20 20 20 20 20 20 20 20  Two"            
1bd0: 20 20 74 65 73 74 0a 20 20 20 20 22 4e 6f 2d 6c    test.    "No-l
1be0: 6f 6f 6b 61 73 69 64 65 22 20 20 20 20 20 20 20  ookaside"       
1bf0: 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22 44       test.    "D
1c00: 65 76 6b 69 74 22 20 20 20 20 20 20 20 20 20 20  evkit"          
1c10: 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20 20          test.   
1c20: 20 22 53 61 6e 69 74 69 7a 65 22 20 20 20 20 20   "Sanitize"     
1c30: 20 20 20 20 20 20 20 20 20 20 20 7b 51 55 49 43             {QUIC
1c40: 4b 54 45 53 54 5f 4f 4d 49 54 3d 66 75 6e 63 34  KTEST_OMIT=func4
1c50: 2e 74 65 73 74 2c 6e 61 6e 2e 74 65 73 74 20 74  .test,nan.test t
1c60: 65 73 74 7d 0a 20 20 20 20 22 44 65 76 69 63 65  est}.    "Device
1c70: 2d 4f 6e 65 22 20 20 20 20 20 20 20 20 20 20 20  -One"           
1c80: 20 20 20 66 75 6c 6c 74 65 73 74 0a 20 20 20 20     fulltest.    
1c90: 22 44 65 66 61 75 6c 74 22 20 20 20 20 20 20 20  "Default"       
1ca0: 20 20 20 20 20 20 20 20 20 20 22 74 68 72 65 61            "threa
1cb0: 64 74 65 73 74 20 66 75 6c 6c 74 65 73 74 22 0a  dtest fulltest".
1cc0: 20 20 20 20 22 56 61 6c 67 72 69 6e 64 22 20 20      "Valgrind"  
1cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 61                va
1ce0: 6c 67 72 69 6e 64 74 65 73 74 0a 20 20 7d 0a 20  lgrindtest.  }. 
1cf0: 20 4c 69 6e 75 78 2d 69 36 38 36 20 7b 0a 20 20   Linux-i686 {.  
1d00: 20 20 22 44 65 76 6b 69 74 22 20 20 20 20 20 20    "Devkit"      
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74              test
1d20: 0a 20 20 20 20 22 48 61 76 65 2d 4e 6f 74 22 20  .    "Have-Not" 
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d40: 65 73 74 0a 20 20 20 20 22 55 6e 6c 6f 63 6b 2d  est.    "Unlock-
1d50: 4e 6f 74 69 66 79 22 20 20 20 20 20 20 20 20 20  Notify"         
1d60: 20 20 22 51 55 49 43 4b 54 45 53 54 5f 49 4e 43    "QUICKTEST_INC
1d70: 4c 55 44 45 3d 6e 6f 74 69 66 79 32 2e 74 65 73  LUDE=notify2.tes
1d80: 74 20 74 65 73 74 22 0a 20 20 20 20 22 44 65 76  t test".    "Dev
1d90: 69 63 65 2d 4f 6e 65 22 20 20 20 20 20 20 20 20  ice-One"        
1da0: 20 20 20 20 20 20 74 65 73 74 0a 20 20 20 20 22        test.    "
1db0: 44 65 76 69 63 65 2d 54 77 6f 22 20 20 20 20 20  Device-Two"     
1dc0: 20 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20           test.  
1dd0: 20 20 22 44 65 66 61 75 6c 74 22 20 20 20 20 20    "Default"     
1de0: 20 20 20 20 20 20 20 20 20 20 20 20 22 74 68 72              "thr
1df0: 65 61 64 74 65 73 74 20 66 75 6c 6c 74 65 73 74  eadtest fulltest
1e00: 22 0a 20 20 7d 0a 20 20 44 61 72 77 69 6e 2d 69  ".  }.  Darwin-i
1e10: 33 38 36 20 7b 0a 20 20 20 20 22 4c 6f 63 6b 69  386 {.    "Locki
1e20: 6e 67 2d 53 74 79 6c 65 22 20 20 20 20 20 20 20  ng-Style"       
1e30: 20 20 20 20 22 6d 70 74 65 73 74 20 74 65 73 74      "mptest test
1e40: 22 0a 20 20 20 20 22 48 61 76 65 2d 4e 6f 74 22  ".    "Have-Not"
1e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e60: 74 65 73 74 0a 20 20 20 20 22 4f 53 2d 58 22 20  test.    "OS-X" 
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e80: 20 20 20 22 74 68 72 65 61 64 74 65 73 74 20 66     "threadtest f
1e90: 75 6c 6c 74 65 73 74 22 0a 20 20 7d 0a 20 20 44  ulltest".  }.  D
1ea0: 61 72 77 69 6e 2d 78 38 36 5f 36 34 20 7b 0a 20  arwin-x86_64 {. 
1eb0: 20 20 20 22 4c 6f 63 6b 69 6e 67 2d 53 74 79 6c     "Locking-Styl
1ec0: 65 22 20 20 20 20 20 20 20 20 20 20 20 22 6d 70  e"           "mp
1ed0: 74 65 73 74 20 74 65 73 74 22 0a 20 20 20 20 22  test test".    "
1ee0: 48 61 76 65 2d 4e 6f 74 22 20 20 20 20 20 20 20  Have-Not"       
1ef0: 20 20 20 20 20 20 20 20 20 74 65 73 74 0a 20 20           test.  
1f00: 20 20 22 4f 53 2d 58 22 20 20 20 20 20 20 20 20    "OS-X"        
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 22 74 68 72              "thr
1f20: 65 61 64 74 65 73 74 20 66 75 6c 6c 74 65 73 74  eadtest fulltest
1f30: 22 0a 20 20 7d 0a 20 20 22 57 69 6e 64 6f 77 73  ".  }.  "Windows
1f40: 20 4e 54 2d 69 6e 74 65 6c 22 20 7b 0a 20 20 20   NT-intel" {.   
1f50: 20 22 48 61 76 65 2d 4e 6f 74 22 20 20 20 20 20   "Have-Not"     
1f60: 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 0a             test.
1f70: 20 20 20 20 22 44 65 66 61 75 6c 74 22 20 20 20      "Default"   
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d                "m
1f90: 70 74 65 73 74 20 66 75 6c 6c 74 65 73 74 6f 6e  ptest fullteston
1fa0: 6c 79 22 0a 20 20 7d 0a 20 20 22 57 69 6e 64 6f  ly".  }.  "Windo
1fb0: 77 73 20 4e 54 2d 61 6d 64 36 34 22 20 7b 0a 20  ws NT-amd64" {. 
1fc0: 20 20 20 22 48 61 76 65 2d 4e 6f 74 22 20 20 20     "Have-Not"   
1fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
1fe0: 74 0a 20 20 20 20 22 44 65 66 61 75 6c 74 22 20  t.    "Default" 
1ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2000: 22 6d 70 74 65 73 74 20 66 75 6c 6c 74 65 73 74  "mptest fulltest
2010: 6f 6e 6c 79 22 0a 20 20 7d 0a 0a 20 20 23 20 54  only".  }..  # T
2020: 68 65 20 46 61 69 6c 75 72 65 2d 44 65 74 65 63  he Failure-Detec
2030: 74 69 6f 6e 20 70 6c 61 74 66 6f 72 6d 20 72 75  tion platform ru
2040: 6e 73 20 76 61 72 69 6f 75 73 20 74 65 73 74 73  ns various tests
2050: 20 74 68 61 74 20 64 65 6c 69 62 65 72 61 74 65   that deliberate
2060: 6c 79 0a 20 20 23 20 66 61 69 6c 2e 20 20 54 68  ly.  # fail.  Th
2070: 69 73 20 69 73 20 75 73 65 64 20 61 73 20 61 20  is is used as a 
2080: 74 65 73 74 20 6f 66 20 74 68 69 73 20 73 63 72  test of this scr
2090: 69 70 74 20 74 6f 20 76 65 72 69 66 79 20 74 68  ipt to verify th
20a0: 61 74 20 74 68 69 73 20 73 63 72 69 70 74 0a 20  at this script. 
20b0: 20 23 20 63 6f 72 72 65 63 74 6c 79 20 69 64 65   # correctly ide
20c0: 6e 74 69 66 69 65 73 20 66 61 69 6c 75 72 65 73  ntifies failures
20d0: 2e 0a 20 20 23 0a 20 20 46 61 69 6c 75 72 65 2d  ..  #.  Failure-
20e0: 44 65 74 65 63 74 69 6f 6e 20 7b 0a 20 20 20 20  Detection {.    
20f0: 46 61 69 6c 30 20 20 20 20 20 22 54 45 53 54 5f  Fail0     "TEST_
2100: 46 41 49 4c 55 52 45 3d 30 20 74 65 73 74 22 0a  FAILURE=0 test".
2110: 20 20 20 20 53 61 6e 69 74 69 7a 65 20 20 22 54      Sanitize  "T
2120: 45 53 54 5f 46 41 49 4c 55 52 45 3d 31 20 74 65  EST_FAILURE=1 te
2130: 73 74 22 0a 20 20 20 20 46 61 69 6c 32 20 20 20  st".    Fail2   
2140: 20 20 22 54 45 53 54 5f 46 41 49 4c 55 52 45 3d    "TEST_FAILURE=
2150: 32 20 76 61 6c 67 72 69 6e 64 74 65 73 74 22 0a  2 valgrindtest".
2160: 20 20 20 20 46 61 69 6c 33 20 20 20 20 20 22 54      Fail3     "T
2170: 45 53 54 5f 46 41 49 4c 55 52 45 3d 33 20 76 61  EST_FAILURE=3 va
2180: 6c 67 72 69 6e 64 74 65 73 74 22 0a 20 20 20 20  lgrindtest".    
2190: 46 61 69 6c 34 20 20 20 20 20 22 54 45 53 54 5f  Fail4     "TEST_
21a0: 46 41 49 4c 55 52 45 3d 34 20 74 65 73 74 22 0a  FAILURE=4 test".
21b0: 20 20 20 20 46 75 7a 7a 46 61 69 6c 31 20 22 54      FuzzFail1 "T
21c0: 45 53 54 5f 46 41 49 4c 55 52 45 3d 35 20 74 65  EST_FAILURE=5 te
21d0: 73 74 22 0a 20 20 20 20 46 75 7a 7a 46 61 69 6c  st".    FuzzFail
21e0: 32 20 22 54 45 53 54 5f 46 41 49 4c 55 52 45 3d  2 "TEST_FAILURE=
21f0: 35 20 76 61 6c 67 72 69 6e 64 74 65 73 74 22 0a  5 valgrindtest".
2200: 20 20 7d 0a 7d 5d 0a 0a 0a 23 20 45 6e 64 20 6f    }.}]...# End o
2210: 66 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  f configuration 
2220: 73 65 63 74 69 6f 6e 2e 0a 23 23 23 23 23 23 23  section..#######
2230: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2270: 23 23 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  ##.#############
2280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22b0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 20  ############..# 
22c0: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 76 65  Configuration ve
22d0: 72 69 66 69 63 61 74 69 6f 6e 3a 20 43 68 65 63  rification: Chec
22e0: 6b 20 74 68 61 74 20 65 61 63 68 20 65 6e 74 72  k that each entr
22f0: 79 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  y in the list of
2300: 20 63 6f 6e 66 69 67 73 0a 23 20 73 70 65 63 69   configs.# speci
2310: 66 69 65 64 20 66 6f 72 20 65 61 63 68 20 70 6c  fied for each pl
2320: 61 74 66 6f 72 6d 73 20 65 78 69 73 74 73 2e 0a  atforms exists..
2330: 23 0a 66 6f 72 65 61 63 68 20 7b 6b 65 79 20 76  #.foreach {key v
2340: 61 6c 75 65 7d 20 5b 61 72 72 61 79 20 67 65 74  alue} [array get
2350: 20 3a 3a 50 6c 61 74 66 6f 72 6d 73 5d 20 7b 0a   ::Platforms] {.
2360: 20 20 66 6f 72 65 61 63 68 20 7b 76 20 74 7d 20    foreach {v t} 
2370: 24 76 61 6c 75 65 20 7b 0a 20 20 20 20 69 66 20  $value {.    if 
2380: 7b 30 3d 3d 5b 69 6e 66 6f 20 65 78 69 73 74 73  {0==[info exists
2390: 20 3a 3a 43 6f 6e 66 69 67 73 28 24 76 29 5d 7d   ::Configs($v)]}
23a0: 20 7b 0a 20 20 20 20 20 20 70 75 74 73 20 73 74   {.      puts st
23b0: 64 65 72 72 20 22 4e 6f 20 73 75 63 68 20 63 6f  derr "No such co
23c0: 6e 66 69 67 75 72 61 74 69 6f 6e 3a 20 5c 22 24  nfiguration: \"$
23d0: 76 5c 22 22 0a 20 20 20 20 20 20 65 78 69 74 20  v\"".      exit 
23e0: 2d 31 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a  -1.    }.  }.}..
23f0: 23 20 4f 75 74 70 75 74 20 6c 6f 67 2e 20 20 20  # Output log.   
2400: 44 69 73 61 62 6c 65 64 20 66 6f 72 20 73 6c 61  Disabled for sla
2410: 76 65 20 69 6e 74 65 72 70 72 65 74 65 72 73 2e  ve interpreters.
2420: 0a 23 0a 69 66 20 7b 5b 6c 69 6e 64 65 78 20 24  .#.if {[lindex $
2430: 61 72 67 76 20 65 6e 64 5d 21 3d 22 2d 2d 73 6c  argv end]!="--sl
2440: 61 76 65 22 7d 20 7b 0a 20 20 73 65 74 20 4c 4f  ave"} {.  set LO
2450: 47 20 5b 6f 70 65 6e 20 72 65 6c 65 61 73 65 74  G [open releaset
2460: 65 73 74 2d 6f 75 74 2e 74 78 74 20 77 5d 0a 20  est-out.txt w]. 
2470: 20 70 72 6f 63 20 50 55 54 53 20 7b 74 78 74 7d   proc PUTS {txt}
2480: 20 7b 0a 20 20 20 20 70 75 74 73 20 24 74 78 74   {.    puts $txt
2490: 0a 20 20 20 20 70 75 74 73 20 24 3a 3a 4c 4f 47  .    puts $::LOG
24a0: 20 24 74 78 74 0a 20 20 20 20 66 6c 75 73 68 20   $txt.    flush 
24b0: 24 3a 3a 4c 4f 47 0a 20 20 7d 0a 20 20 70 72 6f  $::LOG.  }.  pro
24c0: 63 20 50 55 54 53 4e 4e 4c 20 7b 74 78 74 7d 20  c PUTSNNL {txt} 
24d0: 7b 0a 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65  {.    puts -none
24e0: 77 6c 69 6e 65 20 24 74 78 74 0a 20 20 20 20 70  wline $txt.    p
24f0: 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24  uts -nonewline $
2500: 3a 3a 4c 4f 47 20 24 74 78 74 0a 20 20 20 20 66  ::LOG $txt.    f
2510: 6c 75 73 68 20 24 3a 3a 4c 4f 47 0a 20 20 7d 0a  lush $::LOG.  }.
2520: 20 20 70 72 6f 63 20 50 55 54 53 45 52 52 20 7b    proc PUTSERR {
2530: 74 78 74 7d 20 7b 0a 20 20 20 20 70 75 74 73 20  txt} {.    puts 
2540: 73 74 64 65 72 72 20 24 74 78 74 0a 20 20 20 20  stderr $txt.    
2550: 70 75 74 73 20 24 3a 3a 4c 4f 47 20 24 74 78 74  puts $::LOG $txt
2560: 0a 20 20 20 20 66 6c 75 73 68 20 24 3a 3a 4c 4f  .    flush $::LO
2570: 47 0a 20 20 7d 0a 20 20 70 75 74 73 20 24 4c 4f  G.  }.  puts $LO
2580: 47 20 22 24 61 72 67 76 30 20 24 61 72 67 76 22  G "$argv0 $argv"
2590: 0a 20 20 73 65 74 20 74 6d 30 20 5b 63 6c 6f 63  .  set tm0 [cloc
25a0: 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20  k format [clock 
25b0: 73 65 63 6f 6e 64 73 5d 20 2d 66 6f 72 6d 61 74  seconds] -format
25c0: 20 7b 25 59 2d 25 6d 2d 25 64 20 25 48 3a 25 4d   {%Y-%m-%d %H:%M
25d0: 3a 25 53 7d 20 2d 67 6d 74 20 31 5d 0a 20 20 70  :%S} -gmt 1].  p
25e0: 75 74 73 20 24 4c 4f 47 20 22 73 74 61 72 74 2d  uts $LOG "start-
25f0: 74 69 6d 65 3a 20 24 74 6d 30 20 55 54 43 22 0a  time: $tm0 UTC".
2600: 7d 20 65 6c 73 65 20 7b 0a 20 20 70 72 6f 63 20  } else {.  proc 
2610: 50 55 54 53 20 7b 74 78 74 7d 20 7b 0a 20 20 20  PUTS {txt} {.   
2620: 20 70 75 74 73 20 24 74 78 74 0a 20 20 7d 0a 20   puts $txt.  }. 
2630: 20 70 72 6f 63 20 50 55 54 53 4e 4e 4c 20 7b 74   proc PUTSNNL {t
2640: 78 74 7d 20 7b 0a 20 20 20 20 70 75 74 73 20 2d  xt} {.    puts -
2650: 6e 6f 6e 65 77 6c 69 6e 65 20 24 74 78 74 0a 20  nonewline $txt. 
2660: 20 7d 0a 20 20 70 72 6f 63 20 50 55 54 53 45 52   }.  proc PUTSER
2670: 52 20 7b 74 78 74 7d 20 7b 0a 20 20 20 20 70 75  R {txt} {.    pu
2680: 74 73 20 73 74 64 65 72 72 20 24 74 78 74 0a 20  ts stderr $txt. 
2690: 20 7d 0a 7d 0a 0a 23 20 4f 70 65 6e 20 74 68 65   }.}..# Open the
26a0: 20 66 69 6c 65 20 24 6c 6f 67 66 69 6c 65 20 61   file $logfile a
26b0: 6e 64 20 6c 6f 6f 6b 20 66 6f 72 20 61 20 72 65  nd look for a re
26c0: 70 6f 72 74 20 6f 6e 20 74 68 65 20 6e 75 6d 62  port on the numb
26d0: 65 72 20 6f 66 20 65 72 72 6f 72 73 0a 23 20 61  er of errors.# a
26e0: 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  nd the number of
26f0: 20 74 65 73 74 20 63 61 73 65 73 20 72 75 6e 2e   test cases run.
2700: 20 20 41 64 64 20 74 68 65 73 65 20 76 61 6c 75    Add these valu
2710: 65 73 20 74 6f 20 74 68 65 20 67 6c 6f 62 61 6c  es to the global
2720: 0a 23 20 24 3a 3a 4e 45 52 52 43 41 53 45 20 61  .# $::NERRCASE a
2730: 6e 64 20 24 3a 3a 4e 54 45 53 54 43 41 53 45 20  nd $::NTESTCASE 
2740: 76 61 72 69 61 62 6c 65 73 2e 0a 23 0a 23 20 49  variables..#.# I
2750: 66 20 61 6e 79 20 65 72 72 6f 72 73 20 6f 63 63  f any errors occ
2760: 75 72 2c 20 74 68 65 6e 20 77 72 69 74 65 20 69  ur, then write i
2770: 6e 74 6f 20 24 65 72 72 6d 73 67 56 61 72 20 74  nto $errmsgVar t
2780: 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 61 70  he text of an ap
2790: 70 72 6f 70 72 69 61 74 65 0a 23 20 6f 6e 65 2d  propriate.# one-
27a0: 6c 69 6e 65 20 65 72 72 6f 72 20 6d 65 73 73 61  line error messa
27b0: 67 65 20 74 6f 20 73 68 6f 77 20 6f 6e 20 74 68  ge to show on th
27c0: 65 20 6f 75 74 70 75 74 2e 0a 23 0a 70 72 6f 63  e output..#.proc
27d0: 20 63 6f 75 6e 74 5f 74 65 73 74 73 5f 61 6e 64   count_tests_and
27e0: 5f 65 72 72 6f 72 73 20 7b 6c 6f 67 66 69 6c 65  _errors {logfile
27f0: 20 72 63 56 61 72 20 65 72 72 6d 73 67 56 61 72   rcVar errmsgVar
2800: 7d 20 7b 0a 20 20 69 66 20 7b 24 3a 3a 44 52 59  } {.  if {$::DRY
2810: 52 55 4e 7d 20 72 65 74 75 72 6e 0a 20 20 75 70  RUN} return.  up
2820: 76 61 72 20 31 20 24 72 63 56 61 72 20 72 63 20  var 1 $rcVar rc 
2830: 24 65 72 72 6d 73 67 56 61 72 20 65 72 72 6d 73  $errmsgVar errms
2840: 67 0a 20 20 73 65 74 20 66 64 20 5b 6f 70 65 6e  g.  set fd [open
2850: 20 24 6c 6f 67 66 69 6c 65 20 72 62 5d 0a 20 20   $logfile rb].  
2860: 73 65 74 20 73 65 65 6e 20 30 0a 20 20 77 68 69  set seen 0.  whi
2870: 6c 65 20 7b 21 5b 65 6f 66 20 24 66 64 5d 7d 20  le {![eof $fd]} 
2880: 7b 0a 20 20 20 20 73 65 74 20 6c 69 6e 65 20 5b  {.    set line [
2890: 67 65 74 73 20 24 66 64 5d 0a 20 20 20 20 69 66  gets $fd].    if
28a0: 20 7b 5b 72 65 67 65 78 70 20 7b 28 5c 64 2b 29   {[regexp {(\d+)
28b0: 20 65 72 72 6f 72 73 20 6f 75 74 20 6f 66 20 28   errors out of (
28c0: 5c 64 2b 29 20 74 65 73 74 73 7d 20 24 6c 69 6e  \d+) tests} $lin
28d0: 65 20 61 6c 6c 20 6e 65 72 72 20 6e 74 65 73 74  e all nerr ntest
28e0: 5d 7d 20 7b 0a 20 20 20 20 20 20 69 6e 63 72 20  ]} {.      incr 
28f0: 3a 3a 4e 45 52 52 43 41 53 45 20 24 6e 65 72 72  ::NERRCASE $nerr
2900: 0a 20 20 20 20 20 20 69 6e 63 72 20 3a 3a 4e 54  .      incr ::NT
2910: 45 53 54 43 41 53 45 20 24 6e 74 65 73 74 0a 20  ESTCASE $ntest. 
2920: 20 20 20 20 20 73 65 74 20 73 65 65 6e 20 31 0a       set seen 1.
2930: 20 20 20 20 20 20 69 66 20 7b 24 6e 65 72 72 3e        if {$nerr>
2940: 30 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74  0} {.        set
2950: 20 72 63 20 31 0a 20 20 20 20 20 20 20 20 73 65   rc 1.        se
2960: 74 20 65 72 72 6d 73 67 20 24 6c 69 6e 65 0a 20  t errmsg $line. 
2970: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
2980: 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 72 75   if {[regexp {ru
2990: 6e 74 69 6d 65 20 65 72 72 6f 72 3a 20 2b 28 2e  ntime error: +(.
29a0: 2a 29 7d 20 24 6c 69 6e 65 20 61 6c 6c 20 6d 73  *)} $line all ms
29b0: 67 5d 7d 20 7b 0a 20 20 20 20 20 20 23 20 73 6b  g]} {.      # sk
29c0: 69 70 20 6f 76 65 72 20 22 76 61 6c 75 65 20 69  ip over "value i
29d0: 73 20 6f 75 74 73 69 64 65 20 72 61 6e 67 65 22  s outside range"
29e0: 20 65 72 72 6f 72 73 0a 20 20 20 20 20 20 69 66   errors.      if
29f0: 20 7b 5b 72 65 67 65 78 70 20 7b 76 61 6c 75 65   {[regexp {value
2a00: 20 2e 2a 20 69 73 20 6f 75 74 73 69 64 65 20 74   .* is outside t
2a10: 68 65 20 72 61 6e 67 65 20 6f 66 20 72 65 70 72  he range of repr
2a20: 65 73 65 6e 74 61 62 6c 65 7d 20 24 6c 69 6e 65  esentable} $line
2a30: 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 20 23 20  ]} {.         # 
2a40: 6e 6f 6f 70 0a 20 20 20 20 20 20 7d 20 65 6c 73  noop.      } els
2a50: 65 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 63 72  e {.        incr
2a60: 20 3a 3a 4e 45 52 52 43 41 53 45 0a 20 20 20 20   ::NERRCASE.    
2a70: 20 20 20 20 69 66 20 7b 24 72 63 3d 3d 30 7d 20      if {$rc==0} 
2a80: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  {.          set 
2a90: 72 63 20 31 0a 20 20 20 20 20 20 20 20 20 20 73  rc 1.          s
2aa0: 65 74 20 65 72 72 6d 73 67 20 24 6d 73 67 0a 20  et errmsg $msg. 
2ab0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
2ac0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 20 7b 5b  .    }.    if {[
2ad0: 72 65 67 65 78 70 20 7b 66 61 74 61 6c 20 65 72  regexp {fatal er
2ae0: 72 6f 72 20 2b 28 2e 2a 29 7d 20 24 6c 69 6e 65  ror +(.*)} $line
2af0: 20 61 6c 6c 20 6d 73 67 5d 7d 20 7b 0a 20 20 20   all msg]} {.   
2b00: 20 20 20 69 6e 63 72 20 3a 3a 4e 45 52 52 43 41     incr ::NERRCA
2b10: 53 45 0a 20 20 20 20 20 20 69 66 20 7b 24 72 63  SE.      if {$rc
2b20: 3d 3d 30 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  ==0} {.        s
2b30: 65 74 20 72 63 20 31 0a 20 20 20 20 20 20 20 20  et rc 1.        
2b40: 73 65 74 20 65 72 72 6d 73 67 20 24 6d 73 67 0a  set errmsg $msg.
2b50: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2b60: 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b 45    if {[regexp {E
2b70: 52 52 4f 52 20 53 55 4d 4d 41 52 59 3a 20 28 5c  RROR SUMMARY: (\
2b80: 64 2b 29 20 65 72 72 6f 72 73 2e 2a 7d 20 24 6c  d+) errors.*} $l
2b90: 69 6e 65 20 61 6c 6c 20 63 6e 74 5d 20 26 26 20  ine all cnt] && 
2ba0: 24 63 6e 74 3e 30 7d 20 7b 0a 20 20 20 20 20 20  $cnt>0} {.      
2bb0: 69 6e 63 72 20 3a 3a 4e 45 52 52 43 41 53 45 0a  incr ::NERRCASE.
2bc0: 20 20 20 20 20 20 69 66 20 7b 24 72 63 3d 3d 30        if {$rc==0
2bd0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
2be0: 72 63 20 31 0a 20 20 20 20 20 20 20 20 73 65 74  rc 1.        set
2bf0: 20 65 72 72 6d 73 67 20 24 61 6c 6c 0a 20 20 20   errmsg $all.   
2c00: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
2c10: 66 20 7b 5b 72 65 67 65 78 70 20 7b 5e 56 45 52  f {[regexp {^VER
2c20: 53 49 4f 4e 3a 20 33 5c 2e 5c 64 2b 2e 5c 64 2b  SION: 3\.\d+.\d+
2c30: 7d 20 24 6c 69 6e 65 5d 7d 20 7b 0a 20 20 20 20  } $line]} {.    
2c40: 20 20 73 65 74 20 76 20 5b 73 74 72 69 6e 67 20    set v [string 
2c50: 72 61 6e 67 65 20 24 6c 69 6e 65 20 39 20 65 6e  range $line 9 en
2c60: 64 5d 0a 20 20 20 20 20 20 69 66 20 7b 24 3a 3a  d].      if {$::
2c70: 53 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 20 65  SQLITE_VERSION e
2c80: 71 20 22 22 7d 20 7b 0a 20 20 20 20 20 20 20 20  q ""} {.        
2c90: 73 65 74 20 3a 3a 53 51 4c 49 54 45 5f 56 45 52  set ::SQLITE_VER
2ca0: 53 49 4f 4e 20 24 76 0a 20 20 20 20 20 20 7d 20  SION $v.      } 
2cb0: 65 6c 73 65 69 66 20 7b 24 3a 3a 53 51 4c 49 54  elseif {$::SQLIT
2cc0: 45 5f 56 45 52 53 49 4f 4e 20 6e 65 20 24 76 7d  E_VERSION ne $v}
2cd0: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 72   {.        set r
2ce0: 63 20 31 0a 20 20 20 20 20 20 20 20 73 65 74 20  c 1.        set 
2cf0: 65 72 72 6d 73 67 20 22 76 65 72 73 69 6f 6e 20  errmsg "version 
2d00: 63 6f 6e 66 6c 69 63 74 3a 20 7b 24 3a 3a 53 51  conflict: {$::SQ
2d10: 4c 49 54 45 5f 56 45 52 53 49 4f 4e 7d 20 76 73  LITE_VERSION} vs
2d20: 2e 20 7b 24 76 7d 22 0a 20 20 20 20 20 20 7d 0a  . {$v}".      }.
2d30: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 63 6c 6f 73      }.  }.  clos
2d40: 65 20 24 66 64 0a 20 20 69 66 20 7b 24 3a 3a 42  e $fd.  if {$::B
2d50: 55 49 4c 44 4f 4e 4c 59 7d 20 7b 0a 20 20 20 20  UILDONLY} {.    
2d60: 69 6e 63 72 20 3a 3a 4e 54 45 53 54 43 41 53 45  incr ::NTESTCASE
2d70: 0a 20 20 20 20 69 66 20 7b 24 72 63 21 3d 30 7d  .    if {$rc!=0}
2d80: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 65 72 72   {.      set err
2d90: 6d 73 67 20 22 42 75 69 6c 64 20 66 61 69 6c 65  msg "Build faile
2da0: 64 22 0a 20 20 20 20 7d 0a 20 20 7d 20 65 6c 73  d".    }.  } els
2db0: 65 69 66 20 7b 21 24 73 65 65 6e 7d 20 7b 0a 20  eif {!$seen} {. 
2dc0: 20 20 20 73 65 74 20 72 63 20 31 0a 20 20 20 20     set rc 1.    
2dd0: 73 65 74 20 65 72 72 6d 73 67 20 22 54 65 73 74  set errmsg "Test
2de0: 20 64 69 64 20 6e 6f 74 20 63 6f 6d 70 6c 65 74   did not complet
2df0: 65 22 0a 20 20 20 20 69 66 20 7b 5b 66 69 6c 65  e".    if {[file
2e00: 20 72 65 61 64 61 62 6c 65 20 63 6f 72 65 5d 7d   readable core]}
2e10: 20 7b 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20   {.      append 
2e20: 65 72 72 6d 73 67 20 22 20 2d 20 63 6f 72 65 20  errmsg " - core 
2e30: 66 69 6c 65 20 65 78 69 73 74 73 22 0a 20 20 20  file exists".   
2e40: 20 7d 0a 20 20 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d   }.  }.}..#-----
2e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e90: 2d 2d 2d 2d 2d 0a 23 20 54 68 69 73 20 63 6f 6d  -----.# This com
2ea0: 6d 61 6e 64 20 69 73 20 69 6e 76 6f 6b 65 64 20  mand is invoked 
2eb0: 61 73 20 74 68 65 20 5b 6d 61 69 6e 5d 20 72 6f  as the [main] ro
2ec0: 75 74 69 6e 65 20 66 6f 72 20 73 63 72 69 70 74  utine for script
2ed0: 73 20 72 75 6e 20 77 69 74 68 20 74 68 65 0a 23  s run with the.#
2ee0: 20 22 2d 2d 73 6c 61 76 65 22 20 6f 70 74 69 6f   "--slave" optio
2ef0: 6e 2e 0a 23 0a 23 20 46 6f 72 20 65 61 63 68 20  n..#.# For each 
2f00: 74 65 73 74 20 28 69 2e 65 2e 20 22 63 6f 6e 66  test (i.e. "conf
2f10: 69 67 75 72 65 20 26 26 20 6d 61 6b 65 20 74 65  igure && make te
2f20: 73 74 22 20 65 78 65 63 75 74 69 6f 6e 29 2c 20  st" execution), 
2f30: 74 68 65 20 6d 61 73 74 65 72 0a 23 20 70 72 6f  the master.# pro
2f40: 63 65 73 73 20 73 70 61 77 6e 73 20 61 20 70 72  cess spawns a pr
2f50: 6f 63 65 73 73 20 77 69 74 68 20 74 68 65 20 2d  ocess with the -
2f60: 2d 73 6c 61 76 65 20 6f 70 74 69 6f 6e 2e 20 49  -slave option. I
2f70: 74 20 77 72 69 74 65 73 20 74 77 6f 20 6c 69 6e  t writes two lin
2f80: 65 73 0a 23 20 74 6f 20 74 68 65 20 73 6c 61 76  es.# to the slav
2f90: 65 73 20 73 74 64 69 6e 2e 20 54 68 65 20 66 69  es stdin. The fi
2fa0: 72 73 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73  rst contains a s
2fb0: 69 6e 67 6c 65 20 62 6f 6f 6c 65 61 6e 20 76 61  ingle boolean va
2fc0: 6c 75 65 20 2d 20 74 68 65 0a 23 20 76 61 6c 75  lue - the.# valu
2fd0: 65 20 6f 66 20 3a 3a 54 52 41 43 45 20 74 6f 20  e of ::TRACE to 
2fe0: 75 73 65 20 69 6e 20 74 68 65 20 73 6c 61 76 65  use in the slave
2ff0: 20 73 63 72 69 70 74 2e 20 54 68 65 20 73 65 63   script. The sec
3000: 6f 6e 64 20 6c 69 6e 65 20 63 6f 6e 74 61 69 6e  ond line contain
3010: 73 20 61 0a 23 20 6c 69 73 74 20 69 6e 20 74 68  s a.# list in th
3020: 65 20 73 61 6d 65 20 66 6f 72 6d 61 74 20 61 73  e same format as
3030: 20 65 61 63 68 20 65 6c 65 6d 65 6e 74 20 6f 66   each element of
3040: 20 74 68 65 20 6c 69 73 74 20 70 61 73 73 65 64   the list passed
3050: 20 74 6f 20 74 68 65 0a 23 20 5b 72 75 6e 5f 61   to the.# [run_a
3060: 6c 6c 5f 74 65 73 74 5f 73 75 69 74 65 73 5d 20  ll_test_suites] 
3070: 63 6f 6d 6d 61 6e 64 20 69 6e 20 74 68 65 20 6d  command in the m
3080: 61 73 74 65 72 20 70 72 6f 63 65 73 73 2e 0a 23  aster process..#
3090: 0a 23 20 54 68 65 20 73 6c 61 76 65 20 74 68 65  .# The slave the
30a0: 6e 20 72 75 6e 73 20 74 68 65 20 22 63 6f 6e 66  n runs the "conf
30b0: 69 67 75 72 65 20 26 26 20 6d 61 6b 65 20 74 65  igure && make te
30c0: 73 74 22 20 63 6f 6d 6d 61 6e 64 73 20 73 70 65  st" commands spe
30d0: 63 69 66 69 65 64 2e 20 49 74 0a 23 20 65 78 69  cified. It.# exi
30e0: 74 73 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  ts successfully 
30f0: 69 66 20 74 68 65 20 74 65 73 74 73 20 70 61 73  if the tests pas
3100: 73 65 73 2c 20 6f 72 20 77 69 74 68 20 61 20 6e  ses, or with a n
3110: 6f 6e 2d 7a 65 72 6f 20 65 72 72 6f 72 20 63 6f  on-zero error co
3120: 64 65 0a 23 20 6f 74 68 65 72 77 69 73 65 2e 0a  de.# otherwise..
3130: 23 0a 70 72 6f 63 20 72 75 6e 5f 73 6c 61 76 65  #.proc run_slave
3140: 5f 74 65 73 74 20 7b 7d 20 7b 0a 20 20 23 20 52  _test {} {.  # R
3150: 65 61 64 20 67 6c 6f 62 61 6c 20 76 61 72 73 20  ead global vars 
3160: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 72  configuration fr
3170: 6f 6d 20 73 74 64 69 6e 2e 0a 20 20 73 65 74 20  om stdin..  set 
3180: 56 20 5b 67 65 74 73 20 73 74 64 69 6e 5d 0a 20  V [gets stdin]. 
3190: 20 66 6f 72 65 61 63 68 20 7b 3a 3a 54 52 41 43   foreach {::TRAC
31a0: 45 20 3a 3a 4d 53 56 43 20 3a 3a 44 52 59 52 55  E ::MSVC ::DRYRU
31b0: 4e 7d 20 24 56 20 7b 7d 0a 0a 20 20 23 20 52 65  N} $V {}..  # Re
31c0: 61 64 20 74 68 65 20 74 65 73 74 2d 73 75 69 74  ad the test-suit
31d0: 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
31e0: 66 72 6f 6d 20 73 74 64 69 6e 2e 0a 20 20 73 65  from stdin..  se
31f0: 74 20 54 20 5b 67 65 74 73 20 73 74 64 69 6e 5d  t T [gets stdin]
3200: 0a 20 20 66 6f 72 65 61 63 68 20 7b 74 69 74 6c  .  foreach {titl
3210: 65 20 64 69 72 20 63 6f 6e 66 69 67 4f 70 74 73  e dir configOpts
3220: 20 74 65 73 74 74 61 72 67 65 74 20 6d 61 6b 65   testtarget make
3230: 4f 70 74 73 20 63 66 6c 61 67 73 20 6f 70 74 73  Opts cflags opts
3240: 7d 20 24 54 20 7b 7d 0a 0a 20 20 23 20 43 72 65  } $T {}..  # Cre
3250: 61 74 65 20 61 6e 64 20 73 77 69 74 63 68 20 74  ate and switch t
3260: 6f 20 74 68 65 20 74 65 73 74 20 64 69 72 65 63  o the test direc
3270: 74 6f 72 79 2e 0a 20 20 73 65 74 20 3a 3a 65 6e  tory..  set ::en
3280: 76 28 53 51 4c 49 54 45 5f 54 4d 50 44 49 52 29  v(SQLITE_TMPDIR)
3290: 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65   [file normalize
32a0: 20 24 64 69 72 5d 0a 20 20 74 72 61 63 65 5f 63   $dir].  trace_c
32b0: 6d 64 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 64  md file mkdir $d
32c0: 69 72 0a 20 20 74 72 61 63 65 5f 63 6d 64 20 63  ir.  trace_cmd c
32d0: 64 20 24 64 69 72 0a 20 20 63 61 74 63 68 20 7b  d $dir.  catch {
32e0: 66 69 6c 65 20 64 65 6c 65 74 65 20 63 6f 72 65  file delete core
32f0: 7d 0a 20 20 63 61 74 63 68 20 7b 66 69 6c 65 20  }.  catch {file 
3300: 64 65 6c 65 74 65 20 74 65 73 74 2e 6c 6f 67 7d  delete test.log}
3310: 0a 0a 20 20 23 20 52 75 6e 20 74 68 65 20 22 2e  ..  # Run the ".
3320: 2f 63 6f 6e 66 69 67 75 72 65 20 26 26 20 6d 61  /configure && ma
3330: 6b 65 22 20 63 6f 6d 6d 61 6e 64 73 2e 0a 20 20  ke" commands..  
3340: 73 65 74 20 72 63 20 30 0a 20 20 73 65 74 20 72  set rc 0.  set r
3350: 63 20 5b 63 61 74 63 68 20 5b 63 6f 6e 66 69 67  c [catch [config
3360: 75 72 65 43 6f 6d 6d 61 6e 64 20 24 63 6f 6e 66  ureCommand $conf
3370: 69 67 4f 70 74 73 5d 5d 0a 20 20 69 66 20 7b 21  igOpts]].  if {!
3380: 24 72 63 7d 20 7b 0a 20 20 20 20 69 66 20 7b 5b  $rc} {.    if {[
3390: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e  info exists ::en
33a0: 76 28 54 43 4c 53 48 5f 43 4d 44 29 5d 7d 20 7b  v(TCLSH_CMD)]} {
33b0: 0a 20 20 20 20 20 20 73 65 74 20 73 61 76 65 64  .      set saved
33c0: 45 6e 76 28 54 43 4c 53 48 5f 43 4d 44 29 20 24  Env(TCLSH_CMD) $
33d0: 3a 3a 65 6e 76 28 54 43 4c 53 48 5f 43 4d 44 29  ::env(TCLSH_CMD)
33e0: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  .    } else {.  
33f0: 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d      unset -nocom
3400: 70 6c 61 69 6e 20 73 61 76 65 64 45 6e 76 28 54  plain savedEnv(T
3410: 43 4c 53 48 5f 43 4d 44 29 0a 20 20 20 20 7d 0a  CLSH_CMD).    }.
3420: 20 20 20 20 73 65 74 20 3a 3a 65 6e 76 28 54 43      set ::env(TC
3430: 4c 53 48 5f 43 4d 44 29 20 5b 66 69 6c 65 20 6e  LSH_CMD) [file n
3440: 61 74 69 76 65 6e 61 6d 65 20 5b 69 6e 66 6f 20  ativename [info 
3450: 6e 61 6d 65 6f 66 65 78 65 63 75 74 61 62 6c 65  nameofexecutable
3460: 5d 5d 0a 20 20 20 20 73 65 74 20 72 63 20 5b 63  ]].    set rc [c
3470: 61 74 63 68 20 5b 6d 61 6b 65 43 6f 6d 6d 61 6e  atch [makeComman
3480: 64 20 24 74 65 73 74 74 61 72 67 65 74 20 24 6d  d $testtarget $m
3490: 61 6b 65 4f 70 74 73 20 24 63 66 6c 61 67 73 20  akeOpts $cflags 
34a0: 24 6f 70 74 73 5d 5d 0a 20 20 20 20 69 66 20 7b  $opts]].    if {
34b0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 73 61 76  [info exists sav
34c0: 65 64 45 6e 76 28 54 43 4c 53 48 5f 43 4d 44 29  edEnv(TCLSH_CMD)
34d0: 5d 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  ]} {.      set :
34e0: 3a 65 6e 76 28 54 43 4c 53 48 5f 43 4d 44 29 20  :env(TCLSH_CMD) 
34f0: 24 73 61 76 65 64 45 6e 76 28 54 43 4c 53 48 5f  $savedEnv(TCLSH_
3500: 43 4d 44 29 0a 20 20 20 20 7d 20 65 6c 73 65 20  CMD).    } else 
3510: 7b 0a 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e  {.      unset -n
3520: 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76 28  ocomplain ::env(
3530: 54 43 4c 53 48 5f 43 4d 44 29 0a 20 20 20 20 7d  TCLSH_CMD).    }
3540: 0a 20 20 7d 0a 0a 20 20 23 20 45 78 69 73 20 73  .  }..  # Exis s
3550: 75 63 63 65 73 73 66 75 6c 6c 79 20 69 66 20 74  uccessfully if t
3560: 68 65 20 74 65 73 74 20 70 61 73 73 65 64 2c 20  he test passed, 
3570: 6f 72 20 77 69 74 68 20 61 20 6e 6f 6e 2d 7a 65  or with a non-ze
3580: 72 6f 20 65 72 72 6f 72 20 63 6f 64 65 0a 20 20  ro error code.  
3590: 23 20 6f 74 68 65 72 77 69 73 65 2e 0a 20 20 65  # otherwise..  e
35a0: 78 69 74 20 24 72 63 0a 7d 0a 0a 23 20 54 68 69  xit $rc.}..# Thi
35b0: 73 20 63 6f 6d 6d 61 6e 64 20 69 73 20 69 6e 76  s command is inv
35c0: 6f 6b 65 64 20 69 6e 20 74 68 65 20 6d 61 73 74  oked in the mast
35d0: 65 72 20 70 72 6f 63 65 73 73 20 65 61 63 68 20  er process each 
35e0: 74 69 6d 65 20 61 20 73 6c 61 76 65 0a 23 20 66  time a slave.# f
35f0: 69 6c 65 2d 64 65 73 63 72 69 70 74 6f 72 20 69  ile-descriptor i
3600: 73 20 72 65 61 64 61 62 6c 65 2e 0a 23 0a 70 72  s readable..#.pr
3610: 6f 63 20 73 6c 61 76 65 5f 66 69 6c 65 65 76 65  oc slave_fileeve
3620: 6e 74 20 7b 66 64 20 54 20 74 6d 31 7d 20 7b 0a  nt {fd T tm1} {.
3630: 20 20 67 6c 6f 62 61 6c 20 47 0a 20 20 66 6f 72    global G.  for
3640: 65 61 63 68 20 7b 74 69 74 6c 65 20 64 69 72 20  each {title dir 
3650: 63 6f 6e 66 69 67 4f 70 74 73 20 74 65 73 74 74  configOpts testt
3660: 61 72 67 65 74 20 6d 61 6b 65 4f 70 74 73 20 63  arget makeOpts c
3670: 66 6c 61 67 73 20 6f 70 74 73 7d 20 24 54 20 7b  flags opts} $T {
3680: 7d 0a 0a 20 20 69 66 20 7b 5b 65 6f 66 20 24 66  }..  if {[eof $f
3690: 64 5d 7d 20 7b 0a 20 20 20 20 66 63 6f 6e 66 69  d]} {.    fconfi
36a0: 67 75 72 65 20 24 66 64 20 2d 62 6c 6f 63 6b 69  gure $fd -blocki
36b0: 6e 67 20 31 0a 20 20 20 20 73 65 74 20 72 63 20  ng 1.    set rc 
36c0: 5b 63 61 74 63 68 20 7b 20 63 6c 6f 73 65 20 24  [catch { close $
36d0: 66 64 20 7d 5d 0a 0a 20 20 20 20 73 65 74 20 65  fd }]..    set e
36e0: 72 72 6d 73 67 20 7b 7d 0a 20 20 20 20 73 65 74  rrmsg {}.    set
36f0: 20 6c 6f 67 66 69 6c 65 20 5b 66 69 6c 65 20 6a   logfile [file j
3700: 6f 69 6e 20 24 64 69 72 20 74 65 73 74 2e 6c 6f  oin $dir test.lo
3710: 67 5d 0a 20 20 20 20 69 66 20 7b 5b 66 69 6c 65  g].    if {[file
3720: 20 65 78 69 73 74 73 20 24 6c 6f 67 66 69 6c 65   exists $logfile
3730: 5d 7d 20 7b 0a 20 20 20 20 20 20 63 6f 75 6e 74  ]} {.      count
3740: 5f 74 65 73 74 73 5f 61 6e 64 5f 65 72 72 6f 72  _tests_and_error
3750: 73 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69  s [file join $di
3760: 72 20 74 65 73 74 2e 6c 6f 67 5d 20 72 63 20 65  r test.log] rc e
3770: 72 72 6d 73 67 0a 20 20 20 20 7d 20 65 6c 73 65  rrmsg.    } else
3780: 69 66 20 7b 24 72 63 3d 3d 30 20 26 26 20 21 24  if {$rc==0 && !$
3790: 3a 3a 44 52 59 52 55 4e 7d 20 7b 0a 20 20 20 20  ::DRYRUN} {.    
37a0: 20 20 73 65 74 20 72 63 20 31 0a 20 20 20 20 20    set rc 1.     
37b0: 20 73 65 74 20 65 72 72 6d 73 67 20 22 6e 6f 20   set errmsg "no 
37c0: 74 65 73 74 2e 6c 6f 67 20 66 69 6c 65 2e 2e 2e  test.log file...
37d0: 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20  ".    }..    if 
37e0: 7b 21 24 3a 3a 54 52 41 43 45 7d 20 7b 0a 20 20  {!$::TRACE} {.  
37f0: 20 20 20 20 73 65 74 20 74 6d 32 20 5b 63 6c 6f      set tm2 [clo
3800: 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 20 20 20 20  ck seconds].    
3810: 20 20 73 65 74 20 68 6f 75 72 73 20 5b 65 78 70    set hours [exp
3820: 72 20 7b 28 24 74 6d 32 2d 24 74 6d 31 29 2f 33  r {($tm2-$tm1)/3
3830: 36 30 30 7d 5d 0a 20 20 20 20 20 20 73 65 74 20  600}].      set 
3840: 6d 69 6e 75 74 65 73 20 5b 65 78 70 72 20 7b 28  minutes [expr {(
3850: 28 24 74 6d 32 2d 24 74 6d 31 29 2f 36 30 29 25  ($tm2-$tm1)/60)%
3860: 36 30 7d 5d 0a 20 20 20 20 20 20 73 65 74 20 73  60}].      set s
3870: 65 63 6f 6e 64 73 20 5b 65 78 70 72 20 7b 28 24  econds [expr {($
3880: 74 6d 32 2d 24 74 6d 31 29 25 36 30 7d 5d 0a 20  tm2-$tm1)%60}]. 
3890: 20 20 20 20 20 73 65 74 20 74 6d 20 5b 66 6f 72       set tm [for
38a0: 6d 61 74 20 28 25 30 32 64 3a 25 30 32 64 3a 25  mat (%02d:%02d:%
38b0: 30 32 64 29 20 24 68 6f 75 72 73 20 24 6d 69 6e  02d) $hours $min
38c0: 75 74 65 73 20 24 73 65 63 6f 6e 64 73 5d 0a 0a  utes $seconds]..
38d0: 20 20 20 20 20 20 69 66 20 7b 24 72 63 7d 20 7b        if {$rc} {
38e0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 74 61  .        set sta
38f0: 74 75 73 20 46 41 49 4c 0a 20 20 20 20 20 20 20  tus FAIL.       
3900: 20 69 6e 63 72 20 3a 3a 4e 45 52 52 0a 20 20 20   incr ::NERR.   
3910: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
3920: 20 20 20 20 73 65 74 20 73 74 61 74 75 73 20 4f      set status O
3930: 6b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  k.      }..     
3940: 20 73 65 74 20 6e 20 5b 73 74 72 69 6e 67 20 6c   set n [string l
3950: 65 6e 67 74 68 20 24 74 69 74 6c 65 5d 0a 20 20  ength $title].  
3960: 20 20 20 20 69 66 20 7b 24 3a 3a 50 52 4f 47 52      if {$::PROGR
3970: 45 53 53 5f 4d 53 47 53 7d 20 7b 0a 20 20 20 20  ESS_MSGS} {.    
3980: 20 20 20 20 50 55 54 53 20 22 66 69 6e 69 73 68      PUTS "finish
3990: 65 64 3a 20 24 7b 74 69 74 6c 65 7d 5b 73 74 72  ed: ${title}[str
39a0: 69 6e 67 20 72 65 70 65 61 74 20 2e 20 5b 65 78  ing repeat . [ex
39b0: 70 72 20 7b 35 33 2d 24 6e 7d 5d 5d 20 24 73 74  pr {53-$n}]] $st
39c0: 61 74 75 73 20 24 74 6d 22 0a 20 20 20 20 20 20  atus $tm".      
39d0: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20  } else {.       
39e0: 20 50 55 54 53 20 22 24 7b 74 69 74 6c 65 7d 5b   PUTS "${title}[
39f0: 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 2e 20  string repeat . 
3a00: 5b 65 78 70 72 20 7b 36 33 2d 24 6e 7d 5d 5d 20  [expr {63-$n}]] 
3a10: 24 73 74 61 74 75 73 20 24 74 6d 22 0a 20 20 20  $status $tm".   
3a20: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 20 7b 24     }.      if {$
3a30: 65 72 72 6d 73 67 21 3d 22 22 7d 20 7b 50 55 54  errmsg!=""} {PUT
3a40: 53 20 22 20 20 20 20 20 24 65 72 72 6d 73 67 22  S "     $errmsg"
3a50: 7d 0a 20 20 20 20 20 20 66 6c 75 73 68 20 73 74  }.      flush st
3a60: 64 6f 75 74 0a 20 20 20 20 7d 0a 0a 20 20 20 20  dout.    }..    
3a70: 69 6e 63 72 20 47 28 6e 4a 6f 62 29 20 2d 31 0a  incr G(nJob) -1.
3a80: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73    } else {.    s
3a90: 65 74 20 6c 69 6e 65 20 5b 67 65 74 73 20 24 66  et line [gets $f
3aa0: 64 5d 0a 20 20 20 20 69 66 20 7b 5b 73 74 72 69  d].    if {[stri
3ab0: 6e 67 20 74 72 69 6d 20 24 6c 69 6e 65 5d 20 21  ng trim $line] !
3ac0: 3d 20 22 22 7d 20 7b 0a 20 20 20 20 20 20 70 75  = ""} {.      pu
3ad0: 74 73 20 22 54 72 61 63 65 20 20 20 3a 20 24 74  ts "Trace   : $t
3ae0: 69 74 6c 65 20 2d 20 5c 22 24 6c 69 6e 65 5c 22  itle - \"$line\"
3af0: 22 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 23  ".    }.  }.}..#
3b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65  ----------.# The
3b50: 20 6f 6e 6c 79 20 61 72 67 75 6d 65 6e 74 20 70   only argument p
3b60: 61 73 73 65 64 20 74 6f 20 74 68 69 73 20 66 75  assed to this fu
3b70: 6e 63 74 69 6f 6e 20 69 73 20 61 20 6c 69 73 74  nction is a list
3b80: 20 6f 66 20 74 65 73 74 2d 73 75 69 74 65 73 20   of test-suites 
3b90: 74 6f 0a 23 20 72 75 6e 2e 20 45 61 63 68 20 22  to.# run. Each "
3ba0: 74 65 73 74 2d 73 75 69 74 65 22 20 69 73 20 69  test-suite" is i
3bb0: 74 73 65 6c 66 20 61 20 6c 69 73 74 20 63 6f 6e  tself a list con
3bc0: 73 69 73 74 69 6e 67 20 6f 66 20 74 68 65 20 66  sisting of the f
3bd0: 6f 6c 6c 6f 77 69 6e 67 0a 23 20 65 6c 65 6d 65  ollowing.# eleme
3be0: 6e 74 73 3a 0a 23 0a 23 20 20 20 2a 20 54 65 73  nts:.#.#   * Tes
3bf0: 74 20 74 69 74 6c 65 20 28 66 6f 72 20 64 69 73  t title (for dis
3c00: 70 6c 61 79 29 2e 0a 23 20 20 20 2a 20 54 68 65  play)..#   * The
3c10: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 69 72   name of the dir
3c20: 65 63 74 6f 72 79 20 74 6f 20 72 75 6e 20 74 68  ectory to run th
3c30: 65 20 74 65 73 74 20 69 6e 2e 0a 23 20 20 20 2a  e test in..#   *
3c40: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 66 6f   The argument fo
3c50: 72 20 5b 63 6f 6e 66 69 67 75 72 65 43 6f 6d 6d  r [configureComm
3c60: 61 6e 64 5d 0a 23 20 20 20 2a 20 54 68 65 20 66  and].#   * The f
3c70: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 66 6f  irst argument fo
3c80: 72 20 5b 6d 61 6b 65 43 6f 6d 6d 61 6e 64 5d 0a  r [makeCommand].
3c90: 23 20 20 20 2a 20 54 68 65 20 73 65 63 6f 6e 64  #   * The second
3ca0: 20 61 72 67 75 6d 65 6e 74 20 66 6f 72 20 5b 6d   argument for [m
3cb0: 61 6b 65 43 6f 6d 6d 61 6e 64 5d 0a 23 20 20 20  akeCommand].#   
3cc0: 2a 20 54 68 65 20 74 68 69 72 64 20 61 72 67 75  * The third argu
3cd0: 6d 65 6e 74 20 66 6f 72 20 5b 6d 61 6b 65 43 6f  ment for [makeCo
3ce0: 6d 6d 61 6e 64 5d 0a 23 0a 70 72 6f 63 20 72 75  mmand].#.proc ru
3cf0: 6e 5f 61 6c 6c 5f 74 65 73 74 5f 73 75 69 74 65  n_all_test_suite
3d00: 73 20 7b 61 6c 6c 74 65 73 74 73 7d 20 7b 0a 20  s {alltests} {. 
3d10: 20 67 6c 6f 62 61 6c 20 47 0a 20 20 73 65 74 20   global G.  set 
3d20: 74 65 73 74 73 20 24 61 6c 6c 74 65 73 74 73 0a  tests $alltests.
3d30: 0a 20 20 73 65 74 20 47 28 6e 4a 6f 62 29 20 30  .  set G(nJob) 0
3d40: 0a 0a 20 20 77 68 69 6c 65 20 7b 5b 6c 6c 65 6e  ..  while {[llen
3d50: 67 74 68 20 24 74 65 73 74 73 5d 3e 30 20 7c 7c  gth $tests]>0 ||
3d60: 20 24 47 28 6e 4a 6f 62 29 3e 30 7d 20 7b 0a 20   $G(nJob)>0} {. 
3d70: 20 20 20 69 66 20 7b 24 47 28 6e 4a 6f 62 29 3e     if {$G(nJob)>
3d80: 3d 24 3a 3a 4a 4f 42 53 20 7c 7c 20 5b 6c 6c 65  =$::JOBS || [lle
3d90: 6e 67 74 68 20 24 74 65 73 74 73 5d 3d 3d 30 7d  ngth $tests]==0}
3da0: 20 7b 0a 20 20 20 20 20 20 76 77 61 69 74 20 47   {.      vwait G
3db0: 28 6e 4a 6f 62 29 0a 20 20 20 20 7d 0a 0a 20 20  (nJob).    }..  
3dc0: 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $
3dd0: 74 65 73 74 73 5d 3e 30 7d 20 7b 0a 20 20 20 20  tests]>0} {.    
3de0: 20 20 73 65 74 20 54 20 5b 6c 69 6e 64 65 78 20    set T [lindex 
3df0: 24 74 65 73 74 73 20 30 5d 0a 20 20 20 20 20 20  $tests 0].      
3e00: 73 65 74 20 74 65 73 74 73 20 5b 6c 72 61 6e 67  set tests [lrang
3e10: 65 20 24 74 65 73 74 73 20 31 20 65 6e 64 5d 0a  e $tests 1 end].
3e20: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 7b 74        foreach {t
3e30: 69 74 6c 65 20 64 69 72 20 63 6f 6e 66 69 67 4f  itle dir configO
3e40: 70 74 73 20 74 65 73 74 74 61 72 67 65 74 20 6d  pts testtarget m
3e50: 61 6b 65 4f 70 74 73 20 63 66 6c 61 67 73 20 6f  akeOpts cflags o
3e60: 70 74 73 7d 20 24 54 20 7b 7d 0a 20 20 20 20 20  pts} $T {}.     
3e70: 20 69 66 20 7b 24 3a 3a 50 52 4f 47 52 45 53 53   if {$::PROGRESS
3e80: 5f 4d 53 47 53 20 26 26 20 21 24 3a 3a 54 52 41  _MSGS && !$::TRA
3e90: 43 45 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65  CE} {.        se
3ea0: 74 20 6e 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67  t n [string leng
3eb0: 74 68 20 24 74 69 74 6c 65 5d 0a 20 20 20 20 20  th $title].     
3ec0: 20 20 20 50 55 54 53 20 22 73 74 61 72 74 69 6e     PUTS "startin
3ed0: 67 3a 20 24 7b 74 69 74 6c 65 7d 20 61 74 20 5b  g: ${title} at [
3ee0: 6e 6f 77 5d 22 0a 20 20 20 20 20 20 20 20 66 6c  now]".        fl
3ef0: 75 73 68 20 73 74 64 6f 75 74 0a 20 20 20 20 20  ush stdout.     
3f00: 20 7d 0a 0a 20 20 20 20 20 20 23 20 52 75 6e 20   }..      # Run 
3f10: 74 68 65 20 6a 6f 62 2e 0a 20 20 20 20 20 20 23  the job..      #
3f20: 0a 20 20 20 20 20 20 73 65 74 20 74 6d 31 20 5b  .      set tm1 [
3f30: 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 20  clock seconds]. 
3f40: 20 20 20 20 20 69 6e 63 72 20 47 28 6e 4a 6f 62       incr G(nJob
3f50: 29 0a 20 20 20 20 20 20 73 65 74 20 73 63 72 69  ).      set scri
3f60: 70 74 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69  pt [file normali
3f70: 7a 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d  ze [info script]
3f80: 5d 0a 20 20 20 20 20 20 73 65 74 20 66 64 20 5b  ].      set fd [
3f90: 6f 70 65 6e 20 22 7c 5b 69 6e 66 6f 20 6e 61 6d  open "|[info nam
3fa0: 65 6f 66 65 78 65 63 75 74 61 62 6c 65 5d 20 24  eofexecutable] $
3fb0: 73 63 72 69 70 74 20 2d 2d 73 6c 61 76 65 22 20  script --slave" 
3fc0: 72 2b 5d 0a 20 20 20 20 20 20 66 63 6f 6e 66 69  r+].      fconfi
3fd0: 67 75 72 65 20 24 66 64 20 2d 62 6c 6f 63 6b 69  gure $fd -blocki
3fe0: 6e 67 20 30 0a 20 20 20 20 20 20 66 69 6c 65 65  ng 0.      filee
3ff0: 76 65 6e 74 20 24 66 64 20 72 65 61 64 61 62 6c  vent $fd readabl
4000: 65 20 5b 6c 69 73 74 20 73 6c 61 76 65 5f 66 69  e [list slave_fi
4010: 6c 65 65 76 65 6e 74 20 24 66 64 20 24 54 20 24  leevent $fd $T $
4020: 74 6d 31 5d 0a 20 20 20 20 20 20 70 75 74 73 20  tm1].      puts 
4030: 24 66 64 20 5b 6c 69 73 74 20 24 3a 3a 54 52 41  $fd [list $::TRA
4040: 43 45 20 24 3a 3a 4d 53 56 43 20 24 3a 3a 44 52  CE $::MSVC $::DR
4050: 59 52 55 4e 5d 0a 20 20 20 20 20 20 70 75 74 73  YRUN].      puts
4060: 20 24 66 64 20 5b 6c 69 73 74 20 7b 2a 7d 24 54   $fd [list {*}$T
4070: 5d 0a 20 20 20 20 20 20 66 6c 75 73 68 20 24 66  ].      flush $f
4080: 64 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 70  d.    }.  }.}..p
4090: 72 6f 63 20 61 64 64 5f 74 65 73 74 5f 73 75 69  roc add_test_sui
40a0: 74 65 20 7b 6c 69 73 74 76 61 72 20 6e 61 6d 65  te {listvar name
40b0: 20 74 65 73 74 74 61 72 67 65 74 20 63 6f 6e 66   testtarget conf
40c0: 69 67 7d 20 7b 0a 20 20 75 70 76 61 72 20 24 6c  ig} {.  upvar $l
40d0: 69 73 74 76 61 72 20 61 6c 6c 74 65 73 74 73 0a  istvar alltests.
40e0: 0a 20 20 23 20 54 63 6c 20 76 61 72 69 61 62 6c  .  # Tcl variabl
40f0: 65 20 24 6f 70 74 73 20 69 73 20 75 73 65 64 20  e $opts is used 
4100: 74 6f 20 62 75 69 6c 64 20 75 70 20 74 68 65 20  to build up the 
4110: 76 61 6c 75 65 20 75 73 65 64 20 74 6f 20 73 65  value used to se
4120: 74 20 74 68 65 0a 20 20 23 20 4f 50 54 53 20 4d  t the.  # OPTS M
4130: 61 6b 65 66 69 6c 65 20 76 61 72 69 61 62 6c 65  akefile variable
4140: 2e 20 56 61 72 69 61 62 6c 65 20 24 63 66 6c 61  . Variable $cfla
4150: 67 73 20 68 6f 6c 64 73 20 74 68 65 20 76 61 6c  gs holds the val
4160: 75 65 20 66 6f 72 0a 20 20 23 20 43 46 4c 41 47  ue for.  # CFLAG
4170: 53 2e 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20  S. The makefile 
4180: 77 69 6c 6c 20 70 61 73 73 20 4f 50 54 53 20 74  will pass OPTS t
4190: 6f 20 62 6f 74 68 20 67 63 63 20 61 6e 64 20 6c  o both gcc and l
41a0: 65 6d 6f 6e 2c 20 62 75 74 0a 20 20 23 20 43 46  emon, but.  # CF
41b0: 4c 41 47 53 20 69 73 20 6f 6e 6c 79 20 70 61 73  LAGS is only pas
41c0: 73 65 64 20 74 6f 20 67 63 63 2e 0a 20 20 23 0a  sed to gcc..  #.
41d0: 20 20 73 65 74 20 6d 61 6b 65 4f 70 74 73 20 22    set makeOpts "
41e0: 22 0a 20 20 73 65 74 20 63 66 6c 61 67 73 20 5b  ".  set cflags [
41f0: 65 78 70 72 20 7b 24 3a 3a 4d 53 56 43 20 3f 20  expr {$::MSVC ? 
4200: 22 2d 5a 69 22 20 3a 20 22 2d 67 22 7d 5d 0a 20  "-Zi" : "-g"}]. 
4210: 20 73 65 74 20 6f 70 74 73 20 22 22 0a 20 20 73   set opts "".  s
4220: 65 74 20 74 69 74 6c 65 20 24 7b 6e 61 6d 65 7d  et title ${name}
4230: 28 24 74 65 73 74 74 61 72 67 65 74 29 0a 20 20  ($testtarget).  
4240: 73 65 74 20 63 6f 6e 66 69 67 4f 70 74 73 20 24  set configOpts $
4250: 3a 3a 57 49 54 48 54 43 4c 0a 0a 20 20 72 65 67  ::WITHTCL..  reg
4260: 73 75 62 20 2d 61 6c 6c 20 7b 23 5b 5e 5c 6e 5d  sub -all {#[^\n]
4270: 2a 5c 6e 7d 20 24 63 6f 6e 66 69 67 20 5c 6e 20  *\n} $config \n 
4280: 63 6f 6e 66 69 67 0a 20 20 66 6f 72 65 61 63 68  config.  foreach
4290: 20 61 72 67 20 24 63 6f 6e 66 69 67 20 7b 0a 20   arg $config {. 
42a0: 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 7b     if {[regexp {
42b0: 5e 2d 5b 55 44 5d 7d 20 24 61 72 67 5d 7d 20 7b  ^-[UD]} $arg]} {
42c0: 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6f  .      lappend o
42d0: 70 74 73 20 24 61 72 67 0a 20 20 20 20 7d 20 65  pts $arg.    } e
42e0: 6c 73 65 69 66 20 7b 5b 72 65 67 65 78 70 20 7b  lseif {[regexp {
42f0: 5e 5b 41 2d 5a 5d 2b 3d 7d 20 24 61 72 67 5d 7d  ^[A-Z]+=} $arg]}
4300: 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64   {.      lappend
4310: 20 74 65 73 74 74 61 72 67 65 74 20 24 61 72 67   testtarget $arg
4320: 0a 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b  .    } elseif {[
4330: 72 65 67 65 78 70 20 7b 5e 2d 2d 28 65 6e 61 62  regexp {^--(enab
4340: 6c 65 7c 64 69 73 61 62 6c 65 29 2d 7d 20 24 61  le|disable)-} $a
4350: 72 67 5d 7d 20 7b 0a 20 20 20 20 20 20 69 66 20  rg]} {.      if 
4360: 7b 24 3a 3a 4d 53 56 43 7d 20 7b 0a 20 20 20 20  {$::MSVC} {.    
4370: 20 20 20 20 69 66 20 7b 24 61 72 67 20 65 71 20      if {$arg eq 
4380: 22 2d 2d 64 69 73 61 62 6c 65 2d 61 6d 61 6c 67  "--disable-amalg
4390: 61 6d 61 74 69 6f 6e 22 7d 20 7b 0a 20 20 20 20  amation"} {.    
43a0: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 61        lappend ma
43b0: 6b 65 4f 70 74 73 20 55 53 45 5f 41 4d 41 4c 47  keOpts USE_AMALG
43c0: 41 4d 41 54 49 4f 4e 3d 30 0a 20 20 20 20 20 20  AMATION=0.      
43d0: 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20      continue.   
43e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
43f0: 66 20 7b 24 61 72 67 20 65 71 20 22 2d 2d 64 69  f {$arg eq "--di
4400: 73 61 62 6c 65 2d 73 68 61 72 65 64 22 7d 20 7b  sable-shared"} {
4410: 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65  .          lappe
4420: 6e 64 20 6d 61 6b 65 4f 70 74 73 20 55 53 45 5f  nd makeOpts USE_
4430: 43 52 54 5f 44 4c 4c 3d 30 20 44 59 4e 41 4d 49  CRT_DLL=0 DYNAMI
4440: 43 5f 53 48 45 4c 4c 3d 30 0a 20 20 20 20 20 20  C_SHELL=0.      
4450: 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20      continue.   
4460: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
4470: 66 20 7b 24 61 72 67 20 65 71 20 22 2d 2d 65 6e  f {$arg eq "--en
4480: 61 62 6c 65 2d 66 74 73 35 22 7d 20 7b 0a 20 20  able-fts5"} {.  
4490: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend 
44a0: 6f 70 74 73 20 2d 44 53 51 4c 49 54 45 5f 45 4e  opts -DSQLITE_EN
44b0: 41 42 4c 45 5f 46 54 53 35 0a 20 20 20 20 20 20  ABLE_FTS5.      
44c0: 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20      continue.   
44d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
44e0: 66 20 7b 24 61 72 67 20 65 71 20 22 2d 2d 65 6e  f {$arg eq "--en
44f0: 61 62 6c 65 2d 6a 73 6f 6e 31 22 7d 20 7b 0a 20  able-json1"} {. 
4500: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
4510: 20 6f 70 74 73 20 2d 44 53 51 4c 49 54 45 5f 45   opts -DSQLITE_E
4520: 4e 41 42 4c 45 5f 4a 53 4f 4e 31 0a 20 20 20 20  NABLE_JSON1.    
4530: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20        continue. 
4540: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4550: 20 69 66 20 7b 24 61 72 67 20 65 71 20 22 2d 2d   if {$arg eq "--
4560: 65 6e 61 62 6c 65 2d 73 68 61 72 65 64 22 7d 20  enable-shared"} 
4570: 7b 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70  {.          lapp
4580: 65 6e 64 20 6d 61 6b 65 4f 70 74 73 20 55 53 45  end makeOpts USE
4590: 5f 43 52 54 5f 44 4c 4c 3d 31 20 44 59 4e 41 4d  _CRT_DLL=1 DYNAM
45a0: 49 43 5f 53 48 45 4c 4c 3d 31 0a 20 20 20 20 20  IC_SHELL=1.     
45b0: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20       continue.  
45c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
45d0: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f        lappend co
45e0: 6e 66 69 67 4f 70 74 73 20 24 61 72 67 0a 20 20  nfigOpts $arg.  
45f0: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
4600: 20 69 66 20 7b 24 3a 3a 4d 53 56 43 7d 20 7b 0a   if {$::MSVC} {.
4610: 20 20 20 20 20 20 20 20 69 66 20 7b 24 61 72 67          if {$arg
4620: 20 65 71 20 22 2d 67 22 7d 20 7b 0a 20 20 20 20   eq "-g"} {.    
4630: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 66        lappend cf
4640: 6c 61 67 73 20 2d 5a 69 0a 20 20 20 20 20 20 20  lags -Zi.       
4650: 20 20 20 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20     continue.    
4660: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
4670: 20 7b 5b 72 65 67 65 78 70 20 2d 2d 20 7b 5e 2d   {[regexp -- {^-
4680: 4f 28 5c 64 2b 29 24 7d 20 24 61 72 67 20 61 6c  O(\d+)$} $arg al
4690: 6c 20 6c 65 76 65 6c 5d 7d 20 74 68 65 6e 20 7b  l level]} then {
46a0: 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65  .          lappe
46b0: 6e 64 20 6d 61 6b 65 4f 70 74 73 20 4f 50 54 49  nd makeOpts OPTI
46c0: 4d 49 5a 41 54 49 4f 4e 53 3d 24 6c 65 76 65 6c  MIZATIONS=$level
46d0: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69  .          conti
46e0: 6e 75 65 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  nue.        }.  
46f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 6c 61 70 70      }.      lapp
4700: 65 6e 64 20 63 66 6c 61 67 73 20 24 61 72 67 0a  end cflags $arg.
4710: 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 23 20 44      }.  }..  # D
4720: 69 73 61 62 6c 65 20 73 79 6e 63 20 74 6f 20 6d  isable sync to m
4730: 61 6b 65 20 74 65 73 74 69 6e 67 20 66 61 73 74  ake testing fast
4740: 65 72 2e 0a 20 20 23 0a 20 20 6c 61 70 70 65 6e  er..  #.  lappen
4750: 64 20 6f 70 74 73 20 2d 44 53 51 4c 49 54 45 5f  d opts -DSQLITE_
4760: 4e 4f 5f 53 59 4e 43 3d 31 0a 0a 20 20 23 20 53  NO_SYNC=1..  # S
4770: 6f 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ome configuratio
4780: 6e 73 20 61 6c 72 65 61 64 79 20 73 65 74 20 48  ns already set H
4790: 41 56 45 5f 55 53 4c 45 45 50 3b 20 69 6e 20 74  AVE_USLEEP; in t
47a0: 68 61 74 20 63 61 73 65 2c 20 73 6b 69 70 20 69  hat case, skip i
47b0: 74 2e 0a 20 20 23 0a 20 20 69 66 20 7b 5b 6c 73  t..  #.  if {[ls
47c0: 65 61 72 63 68 20 2d 72 65 67 65 78 70 20 24 6f  earch -regexp $o
47d0: 70 74 73 20 7b 5e 2d 44 48 41 56 45 5f 55 53 4c  pts {^-DHAVE_USL
47e0: 45 45 50 28 3f 3a 3d 7c 24 29 7d 5d 3d 3d 2d 31  EEP(?:=|$)}]==-1
47f0: 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  } {.    lappend 
4800: 6f 70 74 73 20 2d 44 48 41 56 45 5f 55 53 4c 45  opts -DHAVE_USLE
4810: 45 50 3d 31 0a 20 20 7d 0a 0a 20 20 23 20 41 64  EP=1.  }..  # Ad
4820: 64 20 74 68 65 20 64 65 66 69 6e 65 20 66 6f 72  d the define for
4830: 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2e 0a   this platform..
4840: 20 20 23 0a 20 20 69 66 20 7b 24 3a 3a 74 63 6c    #.  if {$::tcl
4850: 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f  _platform(platfo
4860: 72 6d 29 3d 3d 22 77 69 6e 64 6f 77 73 22 7d 20  rm)=="windows"} 
4870: 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 70  {.    lappend op
4880: 74 73 20 2d 44 53 51 4c 49 54 45 5f 4f 53 5f 57  ts -DSQLITE_OS_W
4890: 49 4e 3d 31 0a 20 20 7d 20 65 6c 73 65 20 7b 0a  IN=1.  } else {.
48a0: 20 20 20 20 6c 61 70 70 65 6e 64 20 6f 70 74 73      lappend opts
48b0: 20 2d 44 53 51 4c 49 54 45 5f 4f 53 5f 55 4e 49   -DSQLITE_OS_UNI
48c0: 58 3d 31 0a 20 20 7d 0a 0a 20 20 23 20 53 65 74  X=1.  }..  # Set
48d0: 20 74 68 65 20 73 75 62 2d 64 69 72 65 63 74 6f   the sub-directo
48e0: 72 79 20 74 6f 20 75 73 65 2e 0a 20 20 23 0a 20  ry to use..  #. 
48f0: 20 73 65 74 20 64 69 72 20 5b 73 74 72 69 6e 67   set dir [string
4900: 20 74 6f 6c 6f 77 65 72 20 5b 73 74 72 69 6e 67   tolower [string
4910: 20 6d 61 70 20 7b 2d 20 5f 20 22 20 22 20 5f 7d   map {- _ " " _}
4920: 20 24 6e 61 6d 65 5d 5d 0a 0a 20 20 23 20 4a 6f   $name]]..  # Jo
4930: 69 6e 20 6f 70 74 69 6f 6e 20 6c 69 73 74 73 20  in option lists 
4940: 69 6e 74 6f 20 73 74 72 69 6e 67 73 2c 20 75 73  into strings, us
4950: 69 6e 67 20 73 70 61 63 65 20 61 73 20 64 65 6c  ing space as del
4960: 69 6d 69 74 65 72 2e 0a 20 20 23 0a 20 20 73 65  imiter..  #.  se
4970: 74 20 6d 61 6b 65 4f 70 74 73 20 5b 6a 6f 69 6e  t makeOpts [join
4980: 20 24 6d 61 6b 65 4f 70 74 73 20 22 20 22 5d 0a   $makeOpts " "].
4990: 20 20 73 65 74 20 63 66 6c 61 67 73 20 20 20 5b    set cflags   [
49a0: 6a 6f 69 6e 20 24 63 66 6c 61 67 73 20 22 20 22  join $cflags " "
49b0: 5d 0a 20 20 73 65 74 20 6f 70 74 73 20 20 20 20  ].  set opts    
49c0: 20 5b 6a 6f 69 6e 20 24 6f 70 74 73 20 22 20 22   [join $opts " "
49d0: 5d 0a 0a 20 20 6c 61 70 70 65 6e 64 20 61 6c 6c  ]..  lappend all
49e0: 74 65 73 74 73 20 5b 6c 69 73 74 20 5c 0a 20 20  tests [list \.  
49f0: 20 20 20 20 24 74 69 74 6c 65 20 24 64 69 72 20      $title $dir 
4a00: 24 63 6f 6e 66 69 67 4f 70 74 73 20 24 74 65 73  $configOpts $tes
4a10: 74 74 61 72 67 65 74 20 24 6d 61 6b 65 4f 70 74  ttarget $makeOpt
4a20: 73 20 24 63 66 6c 61 67 73 20 24 6f 70 74 73 5d  s $cflags $opts]
4a30: 0a 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77  .}..# The follow
4a40: 69 6e 67 20 70 72 6f 63 65 64 75 72 65 20 72 65  ing procedure re
4a50: 74 75 72 6e 73 20 74 68 65 20 22 63 6f 6e 66 69  turns the "confi
4a60: 67 75 72 65 22 20 63 6f 6d 6d 61 6e 64 20 74 6f  gure" command to
4a70: 20 62 65 20 65 78 65 63 74 75 65 64 20 66 6f 72   be exectued for
4a80: 0a 23 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  .# the current p
4a90: 6c 61 74 66 6f 72 6d 2c 20 77 68 69 63 68 20 6d  latform, which m
4aa0: 61 79 20 62 65 20 57 69 6e 64 6f 77 73 20 28 76  ay be Windows (v
4ab0: 69 61 20 4d 69 6e 47 57 2c 20 65 74 63 29 2e 0a  ia MinGW, etc)..
4ac0: 23 0a 70 72 6f 63 20 63 6f 6e 66 69 67 75 72 65  #.proc configure
4ad0: 43 6f 6d 6d 61 6e 64 20 7b 6f 70 74 73 7d 20 7b  Command {opts} {
4ae0: 0a 20 20 69 66 20 7b 24 3a 3a 4d 53 56 43 7d 20  .  if {$::MSVC} 
4af0: 72 65 74 75 72 6e 20 5b 6c 69 73 74 5d 3b 20 23  return [list]; #
4b00: 20 54 68 69 73 20 69 73 20 6e 6f 74 20 6e 65 65   This is not nee
4b10: 64 65 64 20 66 6f 72 20 4d 53 56 43 2e 0a 20 20  ded for MSVC..  
4b20: 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  set result [list
4b30: 20 74 72 61 63 65 5f 63 6d 64 20 65 78 65 63 5d   trace_cmd exec]
4b40: 0a 20 20 69 66 20 7b 24 3a 3a 74 63 6c 5f 70 6c  .  if {$::tcl_pl
4b50: 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29  atform(platform)
4b60: 3d 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 20  =="windows"} {. 
4b70: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
4b80: 74 20 73 68 0a 20 20 7d 0a 20 20 6c 61 70 70 65  t sh.  }.  lappe
4b90: 6e 64 20 72 65 73 75 6c 74 20 24 3a 3a 53 52 43  nd result $::SRC
4ba0: 44 49 52 2f 63 6f 6e 66 69 67 75 72 65 20 2d 2d  DIR/configure --
4bb0: 65 6e 61 62 6c 65 2d 6c 6f 61 64 2d 65 78 74 65  enable-load-exte
4bc0: 6e 73 69 6f 6e 0a 20 20 66 6f 72 65 61 63 68 20  nsion.  foreach 
4bd0: 78 20 24 6f 70 74 73 20 7b 6c 61 70 70 65 6e 64  x $opts {lappend
4be0: 20 72 65 73 75 6c 74 20 24 78 7d 0a 20 20 6c 61   result $x}.  la
4bf0: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 3e 26 20  ppend result >& 
4c00: 74 65 73 74 2e 6c 6f 67 0a 7d 0a 0a 23 20 54 68  test.log.}..# Th
4c10: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 72 6f 63  e following proc
4c20: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68  edure returns th
4c30: 65 20 22 6d 61 6b 65 22 20 63 6f 6d 6d 61 6e 64  e "make" command
4c40: 20 74 6f 20 62 65 20 65 78 65 63 75 74 65 64 20   to be executed 
4c50: 66 6f 72 20 74 68 65 0a 23 20 73 70 65 63 69 66  for the.# specif
4c60: 69 65 64 20 74 61 72 67 65 74 73 2c 20 63 6f 6d  ied targets, com
4c70: 70 69 6c 65 72 20 66 6c 61 67 73 2c 20 61 6e 64  piler flags, and
4c80: 20 6f 70 74 69 6f 6e 73 2e 0a 23 0a 70 72 6f 63   options..#.proc
4c90: 20 6d 61 6b 65 43 6f 6d 6d 61 6e 64 20 7b 20 74   makeCommand { t
4ca0: 61 72 67 65 74 73 20 6d 61 6b 65 4f 70 74 73 20  argets makeOpts 
4cb0: 63 66 6c 61 67 73 20 6f 70 74 73 20 7d 20 7b 0a  cflags opts } {.
4cc0: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69    set result [li
4cd0: 73 74 20 74 72 61 63 65 5f 63 6d 64 20 65 78 65  st trace_cmd exe
4ce0: 63 5d 0a 20 20 69 66 20 7b 24 3a 3a 4d 53 56 43  c].  if {$::MSVC
4cf0: 7d 20 7b 0a 20 20 20 20 73 65 74 20 6e 6d 61 6b  } {.    set nmak
4d00: 65 44 69 72 20 5b 66 69 6c 65 20 6e 61 74 69 76  eDir [file nativ
4d10: 65 6e 61 6d 65 20 24 3a 3a 53 52 43 44 49 52 5d  ename $::SRCDIR]
4d20: 0a 20 20 20 20 73 65 74 20 6e 6d 61 6b 65 46 69  .    set nmakeFi
4d30: 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
4d40: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24  ame [file join $
4d50: 6e 6d 61 6b 65 44 69 72 20 4d 61 6b 65 66 69 6c  nmakeDir Makefil
4d60: 65 2e 6d 73 63 5d 5d 0a 20 20 20 20 6c 61 70 70  e.msc]].    lapp
4d70: 65 6e 64 20 72 65 73 75 6c 74 20 6e 6d 61 6b 65  end result nmake
4d80: 20 2f 66 20 24 6e 6d 61 6b 65 46 69 6c 65 20 54   /f $nmakeFile T
4d90: 4f 50 3d 24 6e 6d 61 6b 65 44 69 72 0a 20 20 7d  OP=$nmakeDir.  }
4da0: 20 65 6c 73 65 20 7b 0a 20 20 20 20 6c 61 70 70   else {.    lapp
4db0: 65 6e 64 20 72 65 73 75 6c 74 20 6d 61 6b 65 0a  end result make.
4dc0: 20 20 7d 0a 20 20 66 6f 72 65 61 63 68 20 6d 61    }.  foreach ma
4dd0: 6b 65 4f 70 74 20 24 6d 61 6b 65 4f 70 74 73 20  keOpt $makeOpts 
4de0: 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  {.    lappend re
4df0: 73 75 6c 74 20 24 6d 61 6b 65 4f 70 74 0a 20 20  sult $makeOpt.  
4e00: 7d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75  }.  lappend resu
4e10: 6c 74 20 63 6c 65 61 6e 0a 20 20 66 6f 72 65 61  lt clean.  forea
4e20: 63 68 20 74 61 72 67 65 74 20 24 74 61 72 67 65  ch target $targe
4e30: 74 73 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64  ts {.    lappend
4e40: 20 72 65 73 75 6c 74 20 24 74 61 72 67 65 74 0a   result $target.
4e50: 20 20 7d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65    }.  lappend re
4e60: 73 75 6c 74 20 43 46 4c 41 47 53 3d 24 63 66 6c  sult CFLAGS=$cfl
4e70: 61 67 73 20 4f 50 54 53 3d 24 6f 70 74 73 20 3e  ags OPTS=$opts >
4e80: 3e 26 20 74 65 73 74 2e 6c 6f 67 0a 7d 0a 0a 23  >& test.log.}..#
4e90: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70   The following p
4ea0: 72 6f 63 65 64 75 72 65 20 70 72 69 6e 74 73 20  rocedure prints 
4eb0: 69 74 73 20 61 72 67 75 6d 65 6e 74 73 20 69 66  its arguments if
4ec0: 20 3a 3a 54 52 41 43 45 20 69 73 20 74 72 75 65   ::TRACE is true
4ed0: 2e 0a 23 20 41 6e 64 20 69 74 20 65 78 65 63 75  ..# And it execu
4ee0: 74 65 73 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  tes the command 
4ef0: 6f 66 20 69 74 73 20 61 72 67 75 6d 65 6e 74 73  of its arguments
4f00: 20 69 6e 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   in the calling 
4f10: 63 6f 6e 74 65 78 74 0a 23 20 69 66 20 3a 3a 44  context.# if ::D
4f20: 52 59 52 55 4e 20 69 73 20 66 61 6c 73 65 2e 0a  RYRUN is false..
4f30: 23 0a 70 72 6f 63 20 74 72 61 63 65 5f 63 6d 64  #.proc trace_cmd
4f40: 20 7b 61 72 67 73 7d 20 7b 0a 20 20 69 66 20 7b   {args} {.  if {
4f50: 24 3a 3a 54 52 41 43 45 7d 20 7b 0a 20 20 20 20  $::TRACE} {.    
4f60: 50 55 54 53 20 24 61 72 67 73 0a 20 20 7d 0a 20  PUTS $args.  }. 
4f70: 20 73 65 74 20 72 65 73 20 22 22 0a 20 20 69 66   set res "".  if
4f80: 20 7b 21 24 3a 3a 44 52 59 52 55 4e 7d 20 7b 0a   {!$::DRYRUN} {.
4f90: 20 20 20 20 73 65 74 20 72 65 73 20 5b 75 70 6c      set res [upl
4fa0: 65 76 65 6c 20 31 20 24 61 72 67 73 5d 0a 20 20  evel 1 $args].  
4fb0: 7d 0a 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a  }.  return $res.
4fc0: 7d 0a 0a 0a 23 20 54 68 69 73 20 70 72 6f 63 20  }...# This proc 
4fd0: 70 72 6f 63 65 73 73 65 73 20 74 68 65 20 63 6f  processes the co
4fe0: 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f  mmand line optio
4ff0: 6e 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 69  ns passed to thi
5000: 73 20 73 63 72 69 70 74 2e 0a 23 20 43 75 72 72  s script..# Curr
5010: 65 6e 74 6c 79 20 74 68 65 20 6f 6e 6c 79 20 6f  ently the only o
5020: 70 74 69 6f 6e 20 73 75 70 70 6f 72 74 65 64 20  ption supported 
5030: 69 73 20 22 2d 6d 61 6b 65 66 69 6c 65 22 2c 20  is "-makefile", 
5040: 64 65 66 61 75 6c 74 0a 23 20 22 72 65 6c 65 61  default.# "relea
5050: 73 65 74 65 73 74 2e 6d 6b 22 2e 20 53 65 74 20  setest.mk". Set 
5060: 74 68 65 20 3a 3a 4d 41 4b 45 46 49 4c 45 20 76  the ::MAKEFILE v
5070: 61 72 69 61 62 6c 65 20 74 6f 20 74 68 65 20 76  ariable to the v
5080: 61 6c 75 65 20 6f 66 20 74 68 69 73 0a 23 20 6f  alue of this.# o
5090: 70 74 69 6f 6e 2e 0a 23 0a 70 72 6f 63 20 70 72  ption..#.proc pr
50a0: 6f 63 65 73 73 5f 6f 70 74 69 6f 6e 73 20 7b 61  ocess_options {a
50b0: 72 67 76 7d 20 7b 0a 20 20 73 65 74 20 3a 3a 53  rgv} {.  set ::S
50c0: 52 43 44 49 52 20 20 20 20 5b 66 69 6c 65 20 6e  RCDIR    [file n
50d0: 6f 72 6d 61 6c 69 7a 65 20 5b 66 69 6c 65 20 64  ormalize [file d
50e0: 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72  irname [file dir
50f0: 6e 61 6d 65 20 24 3a 3a 61 72 67 76 30 5d 5d 5d  name $::argv0]]]
5100: 0a 20 20 73 65 74 20 3a 3a 51 55 49 43 4b 20 20  .  set ::QUICK  
5110: 20 20 20 20 20 20 20 20 30 0a 20 20 73 65 74 20          0.  set 
5120: 3a 3a 4d 53 56 43 20 20 20 20 20 20 20 20 20 20  ::MSVC          
5130: 20 30 0a 20 20 73 65 74 20 3a 3a 42 55 49 4c 44   0.  set ::BUILD
5140: 4f 4e 4c 59 20 20 20 20 20 20 30 0a 20 20 73 65  ONLY      0.  se
5150: 74 20 3a 3a 44 52 59 52 55 4e 20 20 20 20 20 20  t ::DRYRUN      
5160: 20 20 20 30 0a 20 20 73 65 74 20 3a 3a 54 52 41     0.  set ::TRA
5170: 43 45 20 20 20 20 20 20 20 20 20 20 30 0a 20 20  CE          0.  
5180: 73 65 74 20 3a 3a 4a 4f 42 53 20 20 20 20 20 20  set ::JOBS      
5190: 20 20 20 20 20 31 0a 20 20 73 65 74 20 3a 3a 50       1.  set ::P
51a0: 52 4f 47 52 45 53 53 5f 4d 53 47 53 20 20 30 0a  ROGRESS_MSGS  0.
51b0: 20 20 73 65 74 20 3a 3a 57 49 54 48 54 43 4c 20    set ::WITHTCL 
51c0: 20 20 20 20 20 20 20 7b 7d 0a 20 20 73 65 74 20         {}.  set 
51d0: 63 6f 6e 66 69 67 20 7b 7d 0a 20 20 73 65 74 20  config {}.  set 
51e0: 70 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f  platform $::tcl_
51f0: 70 6c 61 74 66 6f 72 6d 28 6f 73 29 2d 24 3a 3a  platform(os)-$::
5200: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63  tcl_platform(mac
5210: 68 69 6e 65 29 0a 0a 20 20 66 6f 72 20 7b 73 65  hine)..  for {se
5220: 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 5b 6c 6c  t i 0} {$i < [ll
5230: 65 6e 67 74 68 20 24 61 72 67 76 5d 7d 20 7b 69  ength $argv]} {i
5240: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74  ncr i} {.    set
5250: 20 78 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 76   x [lindex $argv
5260: 20 24 69 5d 0a 20 20 20 20 69 66 20 7b 5b 72 65   $i].    if {[re
5270: 67 65 78 70 20 7b 5e 2d 2d 5b 61 2d 7a 5d 7d 20  gexp {^--[a-z]} 
5280: 24 78 5d 7d 20 7b 73 65 74 20 78 20 5b 73 74 72  $x]} {set x [str
5290: 69 6e 67 20 72 61 6e 67 65 20 24 78 20 31 20 65  ing range $x 1 e
52a0: 6e 64 5d 7d 0a 20 20 20 20 73 77 69 74 63 68 20  nd]}.    switch 
52b0: 2d 67 6c 6f 62 20 2d 2d 20 24 78 20 7b 0a 20 20  -glob -- $x {.  
52c0: 20 20 20 20 2d 73 6c 61 76 65 20 7b 0a 20 20 20      -slave {.   
52d0: 20 20 20 20 20 72 75 6e 5f 73 6c 61 76 65 5f 74       run_slave_t
52e0: 65 73 74 0a 20 20 20 20 20 20 20 20 65 78 69 74  est.        exit
52f0: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
5300: 2d 73 72 63 64 69 72 20 7b 0a 20 20 20 20 20 20  -srcdir {.      
5310: 20 20 69 6e 63 72 20 69 0a 20 20 20 20 20 20 20    incr i.       
5320: 20 73 65 74 20 3a 3a 53 52 43 44 49 52 20 5b 66   set ::SRCDIR [f
5330: 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 6c  ile normalize [l
5340: 69 6e 64 65 78 20 24 61 72 67 76 20 24 69 5d 5d  index $argv $i]]
5350: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
5360: 2d 70 6c 61 74 66 6f 72 6d 20 7b 0a 20 20 20 20  -platform {.    
5370: 20 20 20 20 69 6e 63 72 20 69 0a 20 20 20 20 20      incr i.     
5380: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20     set platform 
5390: 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20 24 69  [lindex $argv $i
53a0: 5d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ].      }..     
53b0: 20 2d 6a 6f 62 73 20 7b 0a 20 20 20 20 20 20 20   -jobs {.       
53c0: 20 69 6e 63 72 20 69 0a 20 20 20 20 20 20 20 20   incr i.        
53d0: 73 65 74 20 3a 3a 4a 4f 42 53 20 5b 6c 69 6e 64  set ::JOBS [lind
53e0: 65 78 20 24 61 72 67 76 20 24 69 5d 0a 20 20 20  ex $argv $i].   
53f0: 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d 70 72 6f     }..      -pro
5400: 67 72 65 73 73 20 7b 0a 20 20 20 20 20 20 20 20  gress {.        
5410: 73 65 74 20 3a 3a 50 52 4f 47 52 45 53 53 5f 4d  set ::PROGRESS_M
5420: 53 47 53 20 31 0a 20 20 20 20 20 20 7d 0a 0a 20  SGS 1.      }.. 
5430: 20 20 20 20 20 2d 71 75 69 63 6b 20 7b 0a 20 20       -quick {.  
5440: 20 20 20 20 20 20 73 65 74 20 3a 3a 51 55 49 43        set ::QUIC
5450: 4b 20 31 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  K 1.      }.    
5460: 20 20 2d 76 65 72 79 71 75 69 63 6b 20 7b 0a 20    -veryquick {. 
5470: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 51 55 49         set ::QUI
5480: 43 4b 20 32 0a 20 20 20 20 20 20 7d 0a 0a 20 20  CK 2.      }..  
5490: 20 20 20 20 2d 63 6f 6e 66 69 67 20 7b 0a 20 20      -config {.  
54a0: 20 20 20 20 20 20 69 6e 63 72 20 69 0a 20 20 20        incr i.   
54b0: 20 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67 20       set config 
54c0: 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20 24 69  [lindex $argv $i
54d0: 5d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ].      }..     
54e0: 20 2d 6d 73 76 63 20 7b 0a 20 20 20 20 20 20 20   -msvc {.       
54f0: 20 73 65 74 20 3a 3a 4d 53 56 43 20 31 0a 20 20   set ::MSVC 1.  
5500: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d 62 75      }..      -bu
5510: 69 6c 64 6f 6e 6c 79 20 7b 0a 20 20 20 20 20 20  ildonly {.      
5520: 20 20 73 65 74 20 3a 3a 42 55 49 4c 44 4f 4e 4c    set ::BUILDONL
5530: 59 20 31 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  Y 1.      }..   
5540: 20 20 20 2d 64 72 79 72 75 6e 20 7b 0a 20 20 20     -dryrun {.   
5550: 20 20 20 20 20 73 65 74 20 3a 3a 44 52 59 52 55       set ::DRYRU
5560: 4e 20 31 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  N 1.      }..   
5570: 20 20 20 2d 74 72 61 63 65 20 7b 0a 20 20 20 20     -trace {.    
5580: 20 20 20 20 73 65 74 20 3a 3a 54 52 41 43 45 20      set ::TRACE 
5590: 31 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  1.      }..     
55a0: 20 2d 69 6e 66 6f 20 7b 0a 20 20 20 20 20 20 20   -info {.       
55b0: 20 50 55 54 53 20 22 43 6f 6d 6d 61 6e 64 2d 6c   PUTS "Command-l
55c0: 69 6e 65 20 4f 70 74 69 6f 6e 73 3a 22 0a 20 20  ine Options:".  
55d0: 20 20 20 20 20 20 50 55 54 53 20 22 20 20 20 2d        PUTS "   -
55e0: 2d 73 72 63 64 69 72 20 24 3a 3a 53 52 43 44 49  -srcdir $::SRCDI
55f0: 52 22 0a 20 20 20 20 20 20 20 20 50 55 54 53 20  R".        PUTS 
5600: 22 20 20 20 2d 2d 70 6c 61 74 66 6f 72 6d 20 5b  "   --platform [
5610: 6c 69 73 74 20 24 70 6c 61 74 66 6f 72 6d 5d 22  list $platform]"
5620: 0a 20 20 20 20 20 20 20 20 50 55 54 53 20 22 20  .        PUTS " 
5630: 20 20 2d 2d 63 6f 6e 66 69 67 20 5b 6c 69 73 74    --config [list
5640: 20 24 63 6f 6e 66 69 67 5d 22 0a 20 20 20 20 20   $config]".     
5650: 20 20 20 69 66 20 7b 24 3a 3a 51 55 49 43 4b 7d     if {$::QUICK}
5660: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 20   {.          if 
5670: 7b 24 3a 3a 51 55 49 43 4b 3d 3d 31 7d 20 7b 50  {$::QUICK==1} {P
5680: 55 54 53 20 22 20 20 20 2d 2d 71 75 69 63 6b 22  UTS "   --quick"
5690: 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  }.          if {
56a0: 24 3a 3a 51 55 49 43 4b 3d 3d 32 7d 20 7b 50 55  $::QUICK==2} {PU
56b0: 54 53 20 22 20 20 20 2d 2d 76 65 72 79 71 75 69  TS "   --veryqui
56c0: 63 6b 22 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20  ck"}.        }. 
56d0: 20 20 20 20 20 20 20 69 66 20 7b 24 3a 3a 4d 53         if {$::MS
56e0: 56 43 7d 20 20 20 20 20 20 7b 50 55 54 53 20 22  VC}      {PUTS "
56f0: 20 20 20 2d 2d 6d 73 76 63 22 7d 0a 20 20 20 20     --msvc"}.    
5700: 20 20 20 20 69 66 20 7b 24 3a 3a 42 55 49 4c 44      if {$::BUILD
5710: 4f 4e 4c 59 7d 20 7b 50 55 54 53 20 22 20 20 20  ONLY} {PUTS "   
5720: 2d 2d 62 75 69 6c 64 6f 6e 6c 79 22 7d 0a 20 20  --buildonly"}.  
5730: 20 20 20 20 20 20 69 66 20 7b 24 3a 3a 44 52 59        if {$::DRY
5740: 52 55 4e 7d 20 20 20 20 7b 50 55 54 53 20 22 20  RUN}    {PUTS " 
5750: 20 20 2d 2d 64 72 79 72 75 6e 22 7d 0a 20 20 20    --dryrun"}.   
5760: 20 20 20 20 20 69 66 20 7b 24 3a 3a 54 52 41 43       if {$::TRAC
5770: 45 7d 20 20 20 20 20 7b 50 55 54 53 20 22 20 20  E}     {PUTS "  
5780: 20 2d 2d 74 72 61 63 65 22 7d 0a 20 20 20 20 20   --trace"}.     
5790: 20 20 20 50 55 54 53 20 22 5c 6e 41 76 61 69 6c     PUTS "\nAvail
57a0: 61 62 6c 65 20 2d 2d 70 6c 61 74 66 6f 72 6d 20  able --platform 
57b0: 6f 70 74 69 6f 6e 73 3a 22 0a 20 20 20 20 20 20  options:".      
57c0: 20 20 66 6f 72 65 61 63 68 20 79 20 5b 6c 73 6f    foreach y [lso
57d0: 72 74 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20  rt [array names 
57e0: 3a 3a 50 6c 61 74 66 6f 72 6d 73 5d 5d 20 7b 0a  ::Platforms]] {.
57f0: 20 20 20 20 20 20 20 20 20 20 50 55 54 53 20 22            PUTS "
5800: 20 20 20 5b 6c 69 73 74 20 24 79 5d 22 0a 20 20     [list $y]".  
5810: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5820: 50 55 54 53 20 22 5c 6e 41 76 61 69 6c 61 62 6c  PUTS "\nAvailabl
5830: 65 20 2d 2d 63 6f 6e 66 69 67 20 6f 70 74 69 6f  e --config optio
5840: 6e 73 3a 22 0a 20 20 20 20 20 20 20 20 66 6f 72  ns:".        for
5850: 65 61 63 68 20 79 20 5b 6c 73 6f 72 74 20 5b 61  each y [lsort [a
5860: 72 72 61 79 20 6e 61 6d 65 73 20 3a 3a 43 6f 6e  rray names ::Con
5870: 66 69 67 73 5d 5d 20 7b 0a 20 20 20 20 20 20 20  figs]] {.       
5880: 20 20 20 50 55 54 53 20 22 20 20 20 5b 6c 69 73     PUTS "   [lis
5890: 74 20 24 79 5d 22 0a 20 20 20 20 20 20 20 20 7d  t $y]".        }
58a0: 0a 20 20 20 20 20 20 20 20 65 78 69 74 0a 20 20  .        exit.  
58b0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2d 67 20      }..      -g 
58c0: 7b 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  {.        lappen
58d0: 64 20 3a 3a 45 58 54 52 41 43 4f 4e 46 49 47 20  d ::EXTRACONFIG 
58e0: 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20 24 69  [lindex $argv $i
58f0: 5d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ].      }..     
5900: 20 2d 77 69 74 68 2d 74 63 6c 3d 2a 20 7b 0a 20   -with-tcl=* {. 
5910: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 57 49 54         set ::WIT
5920: 48 54 43 4c 20 2d 24 78 0a 20 20 20 20 20 20 7d  HTCL -$x.      }
5930: 0a 0a 20 20 20 20 20 20 2d 44 2a 20 2d 0a 20 20  ..      -D* -.  
5940: 20 20 20 20 2d 4f 2a 20 2d 0a 20 20 20 20 20 20      -O* -.      
5950: 2d 65 6e 61 62 6c 65 2d 2a 20 2d 0a 20 20 20 20  -enable-* -.    
5960: 20 20 2d 64 69 73 61 62 6c 65 2d 2a 20 2d 0a 20    -disable-* -. 
5970: 20 20 20 20 20 2a 3d 2a 20 7b 0a 20 20 20 20 20       *=* {.     
5980: 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a 45 58 54     lappend ::EXT
5990: 52 41 43 4f 4e 46 49 47 20 5b 6c 69 6e 64 65 78  RACONFIG [lindex
59a0: 20 24 61 72 67 76 20 24 69 5d 0a 20 20 20 20 20   $argv $i].     
59b0: 20 7d 0a 0a 20 20 20 20 20 20 64 65 66 61 75 6c   }..      defaul
59c0: 74 20 7b 0a 20 20 20 20 20 20 20 20 50 55 54 53  t {.        PUTS
59d0: 45 52 52 20 22 22 0a 20 20 20 20 20 20 20 20 50  ERR "".        P
59e0: 55 54 53 45 52 52 20 5b 73 74 72 69 6e 67 20 74  UTSERR [string t
59f0: 72 69 6d 20 24 3a 3a 55 53 41 47 45 5f 4d 45 53  rim $::USAGE_MES
5a00: 53 41 47 45 5d 0a 20 20 20 20 20 20 20 20 65 78  SAGE].        ex
5a10: 69 74 20 2d 31 0a 20 20 20 20 20 20 7d 0a 20 20  it -1.      }.  
5a20: 20 20 7d 0a 20 20 7d 0a 0a 20 20 69 66 20 7b 30    }.  }..  if {0
5a30: 3d 3d 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  ==[info exists :
5a40: 3a 50 6c 61 74 66 6f 72 6d 73 28 24 70 6c 61 74  :Platforms($plat
5a50: 66 6f 72 6d 29 5d 7d 20 7b 0a 20 20 20 20 50 55  form)]} {.    PU
5a60: 54 53 20 22 55 6e 6b 6e 6f 77 6e 20 70 6c 61 74  TS "Unknown plat
5a70: 66 6f 72 6d 3a 20 24 70 6c 61 74 66 6f 72 6d 22  form: $platform"
5a80: 0a 20 20 20 20 50 55 54 53 4e 4e 4c 20 22 53 65  .    PUTSNNL "Se
5a90: 74 20 74 68 65 20 2d 70 6c 61 74 66 6f 72 6d 20  t the -platform 
5aa0: 6f 70 74 69 6f 6e 20 74 6f 20 22 0a 20 20 20 20  option to ".    
5ab0: 73 65 74 20 70 72 69 6e 74 20 5b 6c 69 73 74 5d  set print [list]
5ac0: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 70 20 5b  .    foreach p [
5ad0: 61 72 72 61 79 20 6e 61 6d 65 73 20 3a 3a 50 6c  array names ::Pl
5ae0: 61 74 66 6f 72 6d 73 5d 20 7b 0a 20 20 20 20 20  atforms] {.     
5af0: 20 6c 61 70 70 65 6e 64 20 70 72 69 6e 74 20 22   lappend print "
5b00: 5c 22 24 70 5c 22 22 0a 20 20 20 20 7d 0a 20 20  \"$p\"".    }.  
5b10: 20 20 6c 73 65 74 20 70 72 69 6e 74 20 65 6e 64    lset print end
5b20: 20 22 6f 72 20 5b 6c 69 6e 64 65 78 20 24 70 72   "or [lindex $pr
5b30: 69 6e 74 20 65 6e 64 5d 22 0a 20 20 20 20 50 55  int end]".    PU
5b40: 54 53 20 22 5b 6a 6f 69 6e 20 24 70 72 69 6e 74  TS "[join $print
5b50: 20 7b 2c 20 7d 5d 2e 22 0a 20 20 20 20 65 78 69   {, }].".    exi
5b60: 74 0a 20 20 7d 0a 0a 20 20 69 66 20 7b 24 63 6f  t.  }..  if {$co
5b70: 6e 66 69 67 21 3d 22 22 7d 20 7b 0a 20 20 20 20  nfig!=""} {.    
5b80: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 63 6f  if {[llength $co
5b90: 6e 66 69 67 5d 3d 3d 31 7d 20 7b 6c 61 70 70 65  nfig]==1} {lappe
5ba0: 6e 64 20 63 6f 6e 66 69 67 20 66 75 6c 6c 74 65  nd config fullte
5bb0: 73 74 7d 0a 20 20 20 20 73 65 74 20 3a 3a 43 4f  st}.    set ::CO
5bc0: 4e 46 49 47 4c 49 53 54 20 24 63 6f 6e 66 69 67  NFIGLIST $config
5bd0: 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20  .  } else {.    
5be0: 69 66 20 7b 24 3a 3a 4a 4f 42 53 3e 31 7d 20 7b  if {$::JOBS>1} {
5bf0: 0a 20 20 20 20 20 20 73 65 74 20 3a 3a 43 4f 4e  .      set ::CON
5c00: 46 49 47 4c 49 53 54 20 7b 7d 0a 20 20 20 20 20  FIGLIST {}.     
5c10: 20 66 6f 72 65 61 63 68 20 7b 74 61 72 67 65 74   foreach {target
5c20: 20 7a 43 6f 6e 66 69 67 7d 20 5b 6c 72 65 76 65   zConfig} [lreve
5c30: 72 73 65 20 24 3a 3a 50 6c 61 74 66 6f 72 6d 73  rse $::Platforms
5c40: 28 24 70 6c 61 74 66 6f 72 6d 29 5d 20 7b 0a 20  ($platform)] {. 
5c50: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 3a 3a         append ::
5c60: 43 4f 4e 46 49 47 4c 49 53 54 20 5b 66 6f 72 6d  CONFIGLIST [form
5c70: 61 74 20 22 20 20 20 20 25 2d 32 35 73 20 25 73  at "    %-25s %s
5c80: 5c 6e 22 20 5c 0a 20 20 20 20 20 20 20 20 20 20  \n" \.          
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ca0: 20 20 20 20 20 5b 6c 69 73 74 20 24 7a 43 6f 6e       [list $zCon
5cb0: 66 69 67 5d 20 5b 6c 69 73 74 20 24 74 61 72 67  fig] [list $targ
5cc0: 65 74 5d 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20  et]].      }.   
5cd0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20   } else {.      
5ce0: 73 65 74 20 3a 3a 43 4f 4e 46 49 47 4c 49 53 54  set ::CONFIGLIST
5cf0: 20 24 3a 3a 50 6c 61 74 66 6f 72 6d 73 28 24 70   $::Platforms($p
5d00: 6c 61 74 66 6f 72 6d 29 0a 20 20 20 20 7d 0a 20  latform).    }. 
5d10: 20 7d 0a 20 20 50 55 54 53 20 22 52 75 6e 6e 69   }.  PUTS "Runni
5d20: 6e 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ng the following
5d30: 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74   test configurat
5d40: 69 6f 6e 73 20 66 6f 72 20 24 70 6c 61 74 66 6f  ions for $platfo
5d50: 72 6d 3a 22 0a 20 20 50 55 54 53 20 22 20 20 20  rm:".  PUTS "   
5d60: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 3a   [string trim $:
5d70: 3a 43 4f 4e 46 49 47 4c 49 53 54 5d 22 0a 20 20  :CONFIGLIST]".  
5d80: 50 55 54 53 4e 4e 4c 20 22 46 6c 61 67 73 3a 22  PUTSNNL "Flags:"
5d90: 0a 20 20 69 66 20 7b 24 3a 3a 50 52 4f 47 52 45  .  if {$::PROGRE
5da0: 53 53 5f 4d 53 47 53 7d 20 7b 50 55 54 53 4e 4e  SS_MSGS} {PUTSNN
5db0: 4c 20 22 20 2d 2d 70 72 6f 67 72 65 73 73 22 7d  L " --progress"}
5dc0: 0a 20 20 69 66 20 7b 24 3a 3a 44 52 59 52 55 4e  .  if {$::DRYRUN
5dd0: 7d 20 7b 50 55 54 53 4e 4e 4c 20 22 20 2d 2d 64  } {PUTSNNL " --d
5de0: 72 79 72 75 6e 22 7d 0a 20 20 69 66 20 7b 24 3a  ryrun"}.  if {$:
5df0: 3a 42 55 49 4c 44 4f 4e 4c 59 7d 20 7b 50 55 54  :BUILDONLY} {PUT
5e00: 53 4e 4e 4c 20 22 20 2d 2d 62 75 69 6c 64 6f 6e  SNNL " --buildon
5e10: 6c 79 22 7d 0a 20 20 69 66 20 7b 24 3a 3a 4d 53  ly"}.  if {$::MS
5e20: 56 43 7d 20 7b 50 55 54 53 4e 4e 4c 20 22 20 2d  VC} {PUTSNNL " -
5e30: 2d 6d 73 76 63 22 7d 0a 20 20 73 77 69 74 63 68  -msvc"}.  switch
5e40: 20 2d 2d 20 24 3a 3a 51 55 49 43 4b 20 7b 0a 20   -- $::QUICK {. 
5e50: 20 20 20 20 31 20 7b 50 55 54 53 4e 4e 4c 20 22      1 {PUTSNNL "
5e60: 20 2d 2d 71 75 69 63 6b 22 7d 0a 20 20 20 20 20   --quick"}.     
5e70: 32 20 7b 50 55 54 53 4e 4e 4c 20 22 20 2d 2d 76  2 {PUTSNNL " --v
5e80: 65 72 79 71 75 69 63 6b 22 7d 0a 20 20 7d 0a 20  eryquick"}.  }. 
5e90: 20 69 66 20 7b 24 3a 3a 4a 4f 42 53 3e 31 7d 20   if {$::JOBS>1} 
5ea0: 7b 50 55 54 53 4e 4e 4c 20 22 20 2d 2d 6a 6f 62  {PUTSNNL " --job
5eb0: 73 20 24 3a 3a 4a 4f 42 53 22 7d 0a 20 20 50 55  s $::JOBS"}.  PU
5ec0: 54 53 20 22 22 0a 7d 0a 0a 23 20 4d 61 69 6e 20  TS "".}..# Main 
5ed0: 72 6f 75 74 69 6e 65 2e 0a 23 0a 70 72 6f 63 20  routine..#.proc 
5ee0: 6d 61 69 6e 20 7b 61 72 67 76 7d 20 7b 0a 0a 20  main {argv} {.. 
5ef0: 20 23 20 50 72 6f 63 65 73 73 20 61 6e 79 20 63   # Process any c
5f00: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69  ommand line opti
5f10: 6f 6e 73 2e 0a 20 20 73 65 74 20 3a 3a 45 58 54  ons..  set ::EXT
5f20: 52 41 43 4f 4e 46 49 47 20 7b 7d 0a 20 20 70 72  RACONFIG {}.  pr
5f30: 6f 63 65 73 73 5f 6f 70 74 69 6f 6e 73 20 24 61  ocess_options $a
5f40: 72 67 76 0a 20 20 50 55 54 53 20 5b 73 74 72 69  rgv.  PUTS [stri
5f50: 6e 67 20 72 65 70 65 61 74 20 2a 20 37 39 5d 0a  ng repeat * 79].
5f60: 0a 20 20 73 65 74 20 3a 3a 4e 45 52 52 20 30 0a  .  set ::NERR 0.
5f70: 20 20 73 65 74 20 3a 3a 4e 54 45 53 54 20 30 0a    set ::NTEST 0.
5f80: 20 20 73 65 74 20 3a 3a 4e 54 45 53 54 43 41 53    set ::NTESTCAS
5f90: 45 20 30 0a 20 20 73 65 74 20 3a 3a 4e 45 52 52  E 0.  set ::NERR
5fa0: 43 41 53 45 20 30 0a 20 20 73 65 74 20 3a 3a 53  CASE 0.  set ::S
5fb0: 51 4c 49 54 45 5f 56 45 52 53 49 4f 4e 20 7b 7d  QLITE_VERSION {}
5fc0: 0a 20 20 73 65 74 20 53 54 41 52 54 54 49 4d 45  .  set STARTTIME
5fd0: 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d   [clock seconds]
5fe0: 0a 20 20 66 6f 72 65 61 63 68 20 7b 7a 43 6f 6e  .  foreach {zCon
5ff0: 66 69 67 20 74 61 72 67 65 74 7d 20 24 3a 3a 43  fig target} $::C
6000: 4f 4e 46 49 47 4c 49 53 54 20 7b 0a 20 20 20 20  ONFIGLIST {.    
6010: 69 66 20 7b 24 3a 3a 4d 53 56 43 20 26 26 20 28  if {$::MSVC && (
6020: 24 7a 43 6f 6e 66 69 67 20 65 71 20 22 53 61 6e  $zConfig eq "San
6030: 69 74 69 7a 65 22 20 7c 7c 20 22 63 68 65 63 6b  itize" || "check
6040: 73 79 6d 62 6f 6c 73 22 20 69 6e 20 24 74 61 72  symbols" in $tar
6050: 67 65 74 0a 20 20 20 20 20 20 20 20 20 20 20 7c  get.           |
6060: 7c 20 22 76 61 6c 67 72 69 6e 64 74 65 73 74 22  | "valgrindtest"
6070: 20 69 6e 20 24 74 61 72 67 65 74 29 7d 20 7b 0a   in $target)} {.
6080: 20 20 20 20 20 20 50 55 54 53 20 22 53 6b 69 70        PUTS "Skip
6090: 70 69 6e 67 20 24 7a 43 6f 6e 66 69 67 20 2f 20  ping $zConfig / 
60a0: 24 74 61 72 67 65 74 20 66 6f 72 20 4d 53 56 43  $target for MSVC
60b0: 2e 2e 2e 22 0a 20 20 20 20 20 20 63 6f 6e 74 69  ...".      conti
60c0: 6e 75 65 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  nue.    }.    if
60d0: 20 7b 24 74 61 72 67 65 74 20 6e 65 20 22 63 68   {$target ne "ch
60e0: 65 63 6b 73 79 6d 62 6f 6c 73 22 7d 20 7b 0a 20  ecksymbols"} {. 
60f0: 20 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24       switch -- $
6100: 3a 3a 51 55 49 43 4b 20 7b 0a 20 20 20 20 20 20  ::QUICK {.      
6110: 20 20 20 31 20 7b 73 65 74 20 74 61 72 67 65 74     1 {set target
6120: 20 71 75 69 63 6b 74 65 73 74 7d 0a 20 20 20 20   quicktest}.    
6130: 20 20 20 20 20 32 20 7b 73 65 74 20 74 61 72 67       2 {set targ
6140: 65 74 20 73 6d 6f 6b 65 74 65 73 74 7d 0a 20 20  et smoketest}.  
6150: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 20 7b      }.      if {
6160: 24 3a 3a 42 55 49 4c 44 4f 4e 4c 59 7d 20 7b 0a  $::BUILDONLY} {.
6170: 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67          set targ
6180: 65 74 20 74 65 73 74 66 69 78 74 75 72 65 0a 20  et testfixture. 
6190: 20 20 20 20 20 20 20 69 66 20 7b 24 3a 3a 74 63         if {$::tc
61a0: 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66  l_platform(platf
61b0: 6f 72 6d 29 3d 3d 22 77 69 6e 64 6f 77 73 22 7d  orm)=="windows"}
61c0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70   {.          app
61d0: 65 6e 64 20 74 61 72 67 65 74 20 2e 65 78 65 0a  end target .exe.
61e0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
61f0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20  }.    }.    set 
6200: 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 20 5b  config_options [
6210: 63 6f 6e 63 61 74 20 24 3a 3a 43 6f 6e 66 69 67  concat $::Config
6220: 73 28 24 7a 43 6f 6e 66 69 67 29 20 24 3a 3a 45  s($zConfig) $::E
6230: 58 54 52 41 43 4f 4e 46 49 47 5d 0a 0a 20 20 20  XTRACONFIG]..   
6240: 20 69 6e 63 72 20 4e 54 45 53 54 0a 20 20 20 20   incr NTEST.    
6250: 61 64 64 5f 74 65 73 74 5f 73 75 69 74 65 20 61  add_test_suite a
6260: 6c 6c 20 24 7a 43 6f 6e 66 69 67 20 24 74 61 72  ll $zConfig $tar
6270: 67 65 74 20 24 63 6f 6e 66 69 67 5f 6f 70 74 69  get $config_opti
6280: 6f 6e 73 0a 0a 20 20 20 20 23 20 49 66 20 74 68  ons..    # If th
6290: 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
62a0: 69 6e 63 6c 75 64 65 64 20 74 68 65 20 53 51 4c  included the SQL
62b0: 49 54 45 5f 44 45 42 55 47 20 6f 70 74 69 6f 6e  ITE_DEBUG option
62c0: 2c 20 74 68 65 6e 20 72 65 6d 6f 76 65 0a 20 20  , then remove.  
62d0: 20 20 23 20 69 74 20 61 6e 64 20 72 75 6e 20 76    # it and run v
62e0: 65 72 79 71 75 69 63 6b 2e 74 65 73 74 2e 20 49  eryquick.test. I
62f0: 66 20 69 74 20 64 69 64 20 6e 6f 74 20 69 6e 63  f it did not inc
6300: 6c 75 64 65 20 74 68 65 20 53 51 4c 49 54 45 5f  lude the SQLITE_
6310: 44 45 42 55 47 20 6f 70 74 69 6f 6e 0a 20 20 20  DEBUG option.   
6320: 20 23 20 61 64 64 20 69 74 20 61 6e 64 20 72 75   # add it and ru
6330: 6e 20 76 65 72 79 71 75 69 63 6b 2e 74 65 73 74  n veryquick.test
6340: 2e 0a 20 20 20 20 69 66 20 7b 24 74 61 72 67 65  ..    if {$targe
6350: 74 21 3d 22 63 68 65 63 6b 73 79 6d 62 6f 6c 73  t!="checksymbols
6360: 22 20 26 26 20 24 74 61 72 67 65 74 21 3d 22 76  " && $target!="v
6370: 61 6c 67 72 69 6e 64 74 65 73 74 22 0a 20 20 20  algrindtest".   
6380: 20 20 20 20 20 20 20 20 26 26 20 24 74 61 72 67          && $targ
6390: 65 74 21 3d 22 66 75 7a 7a 6f 6f 6d 74 65 73 74  et!="fuzzoomtest
63a0: 22 20 26 26 20 21 24 3a 3a 42 55 49 4c 44 4f 4e  " && !$::BUILDON
63b0: 4c 59 20 26 26 20 24 3a 3a 51 55 49 43 4b 3c 32  LY && $::QUICK<2
63c0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 64 65  } {.      set de
63d0: 62 75 67 5f 69 64 78 20 5b 6c 73 65 61 72 63 68  bug_idx [lsearch
63e0: 20 2d 67 6c 6f 62 20 24 63 6f 6e 66 69 67 5f 6f   -glob $config_o
63f0: 70 74 69 6f 6e 73 20 2d 44 53 51 4c 49 54 45 5f  ptions -DSQLITE_
6400: 44 45 42 55 47 2a 5d 0a 20 20 20 20 20 20 73 65  DEBUG*].      se
6410: 74 20 78 74 61 72 67 65 74 20 24 74 61 72 67 65  t xtarget $targe
6420: 74 0a 20 20 20 20 20 20 72 65 67 73 75 62 20 2d  t.      regsub -
6430: 61 6c 6c 20 7b 66 75 6c 6c 74 65 73 74 5b 61 2d  all {fulltest[a-
6440: 7a 5d 2a 7d 20 24 78 74 61 72 67 65 74 20 74 65  z]*} $xtarget te
6450: 73 74 20 78 74 61 72 67 65 74 0a 20 20 20 20 20  st xtarget.     
6460: 20 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 66 75   regsub -all {fu
6470: 7a 7a 6f 6f 6d 74 65 73 74 7d 20 24 78 74 61 72  zzoomtest} $xtar
6480: 67 65 74 20 66 75 7a 7a 74 65 73 74 20 78 74 61  get fuzztest xta
6490: 72 67 65 74 0a 20 20 20 20 20 20 69 66 20 7b 24  rget.      if {$
64a0: 64 65 62 75 67 5f 69 64 78 20 3c 20 30 7d 20 7b  debug_idx < 0} {
64b0: 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20 4e 54  .        incr NT
64c0: 45 53 54 0a 20 20 20 20 20 20 20 20 61 70 70 65  EST.        appe
64d0: 6e 64 20 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e  nd config_option
64e0: 73 20 22 20 2d 44 53 51 4c 49 54 45 5f 44 45 42  s " -DSQLITE_DEB
64f0: 55 47 3d 31 22 0a 20 20 20 20 20 20 20 20 61 64  UG=1".        ad
6500: 64 5f 74 65 73 74 5f 73 75 69 74 65 20 61 6c 6c  d_test_suite all
6510: 20 22 24 7b 7a 43 6f 6e 66 69 67 7d 5f 64 65 62   "${zConfig}_deb
6520: 75 67 22 20 24 78 74 61 72 67 65 74 20 24 63 6f  ug" $xtarget $co
6530: 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 0a 20 20 20  nfig_options.   
6540: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20     } else {.    
6550: 20 20 20 20 69 6e 63 72 20 4e 54 45 53 54 0a 20      incr NTEST. 
6560: 20 20 20 20 20 20 20 72 65 67 73 75 62 20 7b 20         regsub { 
6570: 2a 2d 44 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  *-DSQLITE_MEMDEB
6580: 55 47 5b 5e 20 5d 2a 20 2a 7d 20 24 63 6f 6e 66  UG[^ ]* *} $conf
6590: 69 67 5f 6f 70 74 69 6f 6e 73 20 7b 20 7d 20 63  ig_options { } c
65a0: 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e 73 0a 20 20  onfig_options.  
65b0: 20 20 20 20 20 20 72 65 67 73 75 62 20 7b 20 2a        regsub { *
65c0: 2d 44 53 51 4c 49 54 45 5f 44 45 42 55 47 5b 5e  -DSQLITE_DEBUG[^
65d0: 20 5d 2a 20 2a 7d 20 24 63 6f 6e 66 69 67 5f 6f   ]* *} $config_o
65e0: 70 74 69 6f 6e 73 20 7b 20 7d 20 63 6f 6e 66 69  ptions { } confi
65f0: 67 5f 6f 70 74 69 6f 6e 73 0a 20 20 20 20 20 20  g_options.      
6600: 20 20 61 64 64 5f 74 65 73 74 5f 73 75 69 74 65    add_test_suite
6610: 20 61 6c 6c 20 22 24 7b 7a 43 6f 6e 66 69 67 7d   all "${zConfig}
6620: 5f 6e 64 65 62 75 67 22 20 24 78 74 61 72 67 65  _ndebug" $xtarge
6630: 74 20 24 63 6f 6e 66 69 67 5f 6f 70 74 69 6f 6e  t $config_option
6640: 73 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  s.      }.    }.
6650: 20 20 7d 0a 0a 20 20 72 75 6e 5f 61 6c 6c 5f 74    }..  run_all_t
6660: 65 73 74 5f 73 75 69 74 65 73 20 24 61 6c 6c 0a  est_suites $all.
6670: 0a 20 20 73 65 74 20 65 6c 61 70 73 65 74 69 6d  .  set elapsetim
6680: 65 20 5b 65 78 70 72 20 7b 5b 63 6c 6f 63 6b 20  e [expr {[clock 
6690: 73 65 63 6f 6e 64 73 5d 2d 24 53 54 41 52 54 54  seconds]-$STARTT
66a0: 49 4d 45 7d 5d 0a 20 20 73 65 74 20 68 72 20 5b  IME}].  set hr [
66b0: 65 78 70 72 20 7b 24 65 6c 61 70 73 65 74 69 6d  expr {$elapsetim
66c0: 65 2f 33 36 30 30 7d 5d 0a 20 20 73 65 74 20 6d  e/3600}].  set m
66d0: 69 6e 20 5b 65 78 70 72 20 7b 28 24 65 6c 61 70  in [expr {($elap
66e0: 73 65 74 69 6d 65 2f 36 30 29 25 36 30 7d 5d 0a  setime/60)%60}].
66f0: 20 20 73 65 74 20 73 65 63 20 5b 65 78 70 72 20    set sec [expr 
6700: 7b 24 65 6c 61 70 73 65 74 69 6d 65 25 36 30 7d  {$elapsetime%60}
6710: 5d 0a 20 20 73 65 74 20 65 74 69 6d 65 20 5b 66  ].  set etime [f
6720: 6f 72 6d 61 74 20 28 25 30 32 64 3a 25 30 32 64  ormat (%02d:%02d
6730: 3a 25 30 32 64 29 20 24 68 72 20 24 6d 69 6e 20  :%02d) $hr $min 
6740: 24 73 65 63 5d 0a 20 20 69 66 20 7b 24 3a 3a 4a  $sec].  if {$::J
6750: 4f 42 53 3e 31 7d 20 7b 61 70 70 65 6e 64 20 65  OBS>1} {append e
6760: 74 69 6d 65 20 22 20 24 3a 3a 4a 4f 42 53 20 63  time " $::JOBS c
6770: 6f 72 65 73 22 7d 0a 20 20 69 66 20 7b 5b 63 61  ores"}.  if {[ca
6780: 74 63 68 20 7b 65 78 65 63 20 68 6f 73 74 6e 61  tch {exec hostna
6790: 6d 65 7d 20 48 4e 41 4d 45 5d 3d 3d 30 7d 20 7b  me} HNAME]==0} {
67a0: 61 70 70 65 6e 64 20 65 74 69 6d 65 20 22 20 6f  append etime " o
67b0: 6e 20 24 48 4e 41 4d 45 22 7d 0a 20 20 50 55 54  n $HNAME"}.  PUT
67c0: 53 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74  S [string repeat
67d0: 20 2a 20 37 39 5d 0a 20 20 69 6e 63 72 20 3a 3a   * 79].  incr ::
67e0: 4e 45 52 52 43 41 53 45 20 24 3a 3a 4e 45 52 52  NERRCASE $::NERR
67f0: 0a 20 20 50 55 54 53 20 22 24 3a 3a 4e 45 52 52  .  PUTS "$::NERR
6800: 43 41 53 45 20 66 61 69 6c 75 72 65 73 20 6f 75  CASE failures ou
6810: 74 20 6f 66 20 24 3a 3a 4e 54 45 53 54 43 41 53  t of $::NTESTCAS
6820: 45 20 74 65 73 74 73 20 69 6e 20 24 65 74 69 6d  E tests in $etim
6830: 65 22 0a 20 20 69 66 20 7b 24 3a 3a 53 51 4c 49  e".  if {$::SQLI
6840: 54 45 5f 56 45 52 53 49 4f 4e 20 6e 65 20 22 22  TE_VERSION ne ""
6850: 7d 20 7b 0a 20 20 20 20 50 55 54 53 20 22 53 51  } {.    PUTS "SQ
6860: 4c 69 74 65 20 24 3a 3a 53 51 4c 49 54 45 5f 56  Lite $::SQLITE_V
6870: 45 52 53 49 4f 4e 22 0a 20 20 7d 0a 7d 0a 0a 6d  ERSION".  }.}..m
6880: 61 69 6e 20 24 61 72 67 76 0a                    ain $argv.