/ Hex Artifact Content
Login

Artifact 71c6f21afa2df91dd299ed317d5751fb628795fe:


0000: 0a 73 65 74 20 72 63 73 69 64 20 7b 24 49 64 3a  .set rcsid {$Id:
0010: 20 6f 6d 69 74 74 65 73 74 2e 74 63 6c 2c 76 20   omittest.tcl,v 
0020: 31 2e 38 20 32 30 30 38 2f 31 30 2f 31 33 20 31  1.8 2008/10/13 1
0030: 35 3a 33 35 3a 30 39 20 64 72 68 20 45 78 70 20  5:35:09 drh Exp 
0040: 24 7d 0a 0a 23 20 44 6f 63 75 6d 65 6e 74 61 74  $}..# Documentat
0050: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 73 63 72  ion for this scr
0060: 69 70 74 2e 20 54 68 69 73 20 6d 61 79 20 62 65  ipt. This may be
0070: 20 6f 75 74 70 75 74 20 74 6f 20 73 74 64 65 72   output to stder
0080: 72 0a 23 20 69 66 20 74 68 65 20 73 63 72 69 70  r.# if the scrip
0090: 74 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 6e 63  t is invoked inc
00a0: 6f 72 72 65 63 74 6c 79 2e 0a 73 65 74 20 3a 3a  orrectly..set ::
00b0: 55 53 41 47 45 5f 4d 45 53 53 41 47 45 20 7b 0a  USAGE_MESSAGE {.
00c0: 54 68 69 73 20 54 63 6c 20 73 63 72 69 70 74 20  This Tcl script 
00d0: 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20  is used to test 
00e0: 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6d 70  the various comp
00f0: 69 6c 65 20 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile time options
0100: 20 0a 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20   .available for 
0110: 6f 6d 69 74 74 69 6e 67 20 63 6f 64 65 20 28 74  omitting code (t
0120: 68 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 78  he SQLITE_OMIT_x
0130: 78 78 20 6f 70 74 69 6f 6e 73 29 2e 20 49 74 0a  xx options). It.
0140: 73 68 6f 75 6c 64 20 62 65 20 69 6e 76 6f 6b 65  should be invoke
0150: 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 0a 20  d as follows:.. 
0160: 20 20 20 3c 73 63 72 69 70 74 3e 20 3f 2d 6d 61     <script> ?-ma
0170: 6b 65 66 69 6c 65 20 50 41 54 48 2d 54 4f 2d 4d  kefile PATH-TO-M
0180: 41 4b 45 46 49 4c 45 3f 20 3f 2d 73 6b 69 70 5f  AKEFILE? ?-skip_
0190: 72 75 6e 3f 0a 0a 54 68 65 20 64 65 66 61 75 6c  run?..The defaul
01a0: 74 20 76 61 6c 75 65 20 66 6f 72 20 3a 3a 4d 41  t value for ::MA
01b0: 4b 45 46 49 4c 45 20 69 73 20 22 2e 2e 2f 4d 61  KEFILE is "../Ma
01c0: 6b 65 66 69 6c 65 2e 6c 69 6e 75 78 2e 67 63 63  kefile.linux.gcc
01d0: 22 2e 0a 0a 49 66 20 2d 73 6b 69 70 5f 72 75 6e  "...If -skip_run
01e0: 20 6f 70 74 69 6f 6e 20 69 73 20 67 69 76 65 6e   option is given
01f0: 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63   then only the c
0200: 6f 6d 70 69 6c 65 20 70 61 72 74 20 69 73 20 61  ompile part is a
0210: 74 74 65 6d 70 74 65 64 2e 0a 0a 54 68 69 73 20  ttempted...This 
0220: 73 63 72 69 70 74 20 62 75 69 6c 64 73 20 74 68  script builds th
0230: 65 20 74 65 73 74 66 69 78 74 75 72 65 20 70 72  e testfixture pr
0240: 6f 67 72 61 6d 20 61 6e 64 20 72 75 6e 73 20 74  ogram and runs t
0250: 68 65 20 53 51 4c 69 74 65 20 74 65 73 74 20 73  he SQLite test s
0260: 75 69 74 65 0a 6f 6e 63 65 20 77 69 74 68 20 65  uite.once with e
0270: 61 63 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ach SQLITE_OMIT_
0280: 20 6f 70 74 69 6f 6e 20 64 65 66 69 6e 65 64 20   option defined 
0290: 61 6e 64 20 74 68 65 6e 20 6f 6e 63 65 20 77 69  and then once wi
02a0: 74 68 20 61 6c 6c 20 6f 70 74 69 6f 6e 73 0a 64  th all options.d
02b0: 65 66 69 6e 65 64 20 74 6f 67 65 74 68 65 72 2e  efined together.
02c0: 20 45 61 63 68 20 72 75 6e 20 69 73 20 70 65 72   Each run is per
02d0: 66 6f 72 6d 65 64 20 69 6e 20 61 20 73 65 70 65  formed in a sepe
02e0: 72 61 74 65 20 64 69 72 65 63 74 6f 72 79 20 63  rate directory c
02f0: 72 65 61 74 65 64 0a 61 73 20 61 20 73 75 62 2d  reated.as a sub-
0300: 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65  directory of the
0310: 20 63 75 72 72 65 6e 74 20 64 69 72 65 63 74 6f   current directo
0320: 72 79 20 62 79 20 74 68 65 20 73 63 72 69 70 74  ry by the script
0330: 2e 20 54 68 65 20 6f 75 74 70 75 74 0a 6f 66 20  . The output.of 
0340: 74 68 65 20 62 75 69 6c 64 20 69 73 20 73 61 76  the build is sav
0350: 65 64 20 69 6e 20 3c 73 75 62 2d 64 69 72 65 63  ed in <sub-direc
0360: 74 6f 72 79 3e 2f 62 75 69 6c 64 2e 6c 6f 67 2e  tory>/build.log.
0370: 20 54 68 65 20 6f 75 74 70 75 74 20 6f 66 20 74   The output of t
0380: 68 65 0a 74 65 73 74 2d 73 75 69 74 65 20 69 73  he.test-suite is
0390: 20 73 61 76 65 64 20 69 6e 20 3c 73 75 62 2d 64   saved in <sub-d
03a0: 69 72 65 63 74 6f 72 79 3e 2f 74 65 73 74 2e 6c  irectory>/test.l
03b0: 6f 67 2e 0a 0a 41 6c 6d 6f 73 74 20 61 6e 79 20  og...Almost any 
03c0: 53 51 4c 69 74 65 20 6d 61 6b 65 66 69 6c 65 20  SQLite makefile 
03d0: 28 65 78 63 65 70 74 20 74 68 6f 73 65 20 67 65  (except those ge
03e0: 6e 65 72 61 74 65 64 20 62 79 20 63 6f 6e 66 69  nerated by confi
03f0: 67 75 72 65 20 2d 20 73 65 65 20 62 65 6c 6f 77  gure - see below
0400: 29 0a 73 68 6f 75 6c 64 20 77 6f 72 6b 2e 20 54  ).should work. T
0410: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70 72 6f  he following pro
0420: 70 65 72 74 69 65 73 20 61 72 65 20 72 65 71 75  perties are requ
0430: 69 72 65 64 3a 0a 0a 20 20 2a 20 54 68 65 20 6d  ired:..  * The m
0440: 61 6b 65 66 69 6c 65 20 73 68 6f 75 6c 64 20 73  akefile should s
0450: 75 70 70 6f 72 74 20 74 68 65 20 22 74 65 73 74  upport the "test
0460: 66 69 78 74 75 72 65 22 20 74 61 72 67 65 74 2e  fixture" target.
0470: 0a 20 20 2a 20 54 68 65 20 6d 61 6b 65 66 69 6c  .  * The makefil
0480: 65 20 73 68 6f 75 6c 64 20 73 75 70 70 6f 72 74  e should support
0490: 20 74 68 65 20 22 74 65 73 74 22 20 74 61 72 67   the "test" targ
04a0: 65 74 2e 0a 20 20 2a 20 54 68 65 20 6d 61 6b 65  et..  * The make
04b0: 66 69 6c 65 20 73 68 6f 75 6c 64 20 73 75 70 70  file should supp
04c0: 6f 72 74 20 74 68 65 20 76 61 72 69 61 62 6c 65  ort the variable
04d0: 20 22 4f 50 54 53 22 20 61 73 20 61 20 77 61 79   "OPTS" as a way
04e0: 20 74 6f 20 70 61 73 73 0a 20 20 20 20 6f 70 74   to pass.    opt
04f0: 69 6f 6e 73 20 66 72 6f 6d 20 74 68 65 20 6d 61  ions from the ma
0500: 6b 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  ke command line 
0510: 74 6f 20 6c 65 6d 6f 6e 20 61 6e 64 20 74 68 65  to lemon and the
0520: 20 43 20 63 6f 6d 70 69 6c 65 72 2e 0a 0a 4d 6f   C compiler...Mo
0530: 72 65 20 70 72 65 63 69 73 65 6c 79 2c 20 74 68  re precisely, th
0540: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 77 6f 20  e following two 
0550: 69 6e 76 6f 63 61 74 69 6f 6e 73 20 6d 75 73 74  invocations must
0560: 20 62 65 20 73 75 70 70 6f 72 74 65 64 3a 0a 0a   be supported:..
0570: 20 20 6d 61 6b 65 20 2d 66 20 24 3a 3a 4d 41 4b    make -f $::MAK
0580: 45 46 49 4c 45 20 74 65 73 74 66 69 78 74 75 72  EFILE testfixtur
0590: 65 20 4f 50 54 53 3d 22 2d 44 53 51 4c 49 54 45  e OPTS="-DSQLITE
05a0: 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
05b0: 3d 31 22 0a 20 20 6d 61 6b 65 20 2d 66 20 24 3a  =1".  make -f $:
05c0: 3a 4d 41 4b 45 46 49 4c 45 20 74 65 73 74 0a 0a  :MAKEFILE test..
05d0: 4d 61 6b 65 66 69 6c 65 73 20 67 65 6e 65 72 61  Makefiles genera
05e0: 74 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  ted by the sqlit
05f0: 65 20 63 6f 6e 66 69 67 75 72 65 20 70 72 6f 67  e configure prog
0600: 72 61 6d 20 63 61 6e 6e 6f 74 20 62 65 20 75 73  ram cannot be us
0610: 65 64 20 61 73 0a 74 68 65 79 20 64 6f 20 6e 6f  ed as.they do no
0620: 74 20 72 65 73 70 65 63 74 20 74 68 65 20 4f 50  t respect the OP
0630: 54 53 20 76 61 72 69 61 62 6c 65 2e 0a 7d 0a 0a  TS variable..}..
0640: 0a 23 20 42 75 69 6c 64 20 61 20 74 65 73 74 66  .# Build a testf
0650: 69 78 74 75 72 65 20 65 78 65 63 75 74 61 62 6c  ixture executabl
0660: 65 20 61 6e 64 20 72 75 6e 20 71 75 69 63 6b 2e  e and run quick.
0670: 74 65 73 74 20 75 73 69 6e 67 20 69 74 2e 20 54  test using it. T
0680: 68 65 20 66 69 72 73 74 0a 23 20 70 61 72 61 6d  he first.# param
0690: 65 74 65 72 20 69 73 20 74 68 65 20 6e 61 6d 65  eter is the name
06a0: 20 6f 66 20 74 68 65 20 64 69 72 65 63 74 6f 72   of the director
06b0: 79 20 74 6f 20 63 72 65 61 74 65 20 61 6e 64 20  y to create and 
06c0: 75 73 65 20 74 6f 20 72 75 6e 20 74 68 65 0a 23  use to run the.#
06d0: 20 74 65 73 74 20 69 6e 2e 20 54 68 65 20 73 65   test in. The se
06e0: 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 69  cond parameter i
06f0: 73 20 61 20 6c 69 73 74 20 6f 66 20 4f 4d 49 54  s a list of OMIT
0700: 20 73 79 6d 62 6f 6c 73 20 74 6f 20 64 65 66 69   symbols to defi
0710: 6e 65 0a 23 20 77 68 65 6e 20 64 6f 69 6e 67 20  ne.# when doing 
0720: 73 6f 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 3a  so. For example:
0730: 0a 23 0a 23 20 20 20 20 20 72 75 6e 5f 71 75 69  .#.#     run_qui
0740: 63 6b 5f 74 65 73 74 20 2f 74 6d 70 2f 74 65 73  ck_test /tmp/tes
0750: 74 64 69 72 20 7b 53 51 4c 49 54 45 5f 4f 4d 49  tdir {SQLITE_OMI
0760: 54 5f 54 52 49 47 47 45 52 20 53 51 4c 49 54 45  T_TRIGGER SQLITE
0770: 5f 4f 4d 49 54 5f 56 49 45 57 7d 0a 23 0a 23 0a  _OMIT_VIEW}.#.#.
0780: 70 72 6f 63 20 72 75 6e 5f 71 75 69 63 6b 5f 74  proc run_quick_t
0790: 65 73 74 20 7b 64 69 72 20 6f 6d 69 74 5f 73 79  est {dir omit_sy
07a0: 6d 62 6f 6c 5f 6c 69 73 74 7d 20 7b 0a 20 20 73  mbol_list} {.  s
07b0: 65 74 20 74 61 72 67 65 74 20 22 74 65 73 74 66  et target "testf
07c0: 69 78 74 75 72 65 22 0a 20 20 23 20 43 6f 6d 70  ixture".  # Comp
07d0: 69 6c 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ile the value of
07e0: 20 74 68 65 20 4f 50 54 53 20 4d 61 6b 65 66 69   the OPTS Makefi
07f0: 6c 65 20 76 61 72 69 61 62 6c 65 2e 0a 20 20 73  le variable..  s
0800: 65 74 20 6f 70 74 73 20 22 2d 44 53 51 4c 49 54  et opts "-DSQLIT
0810: 45 5f 4d 45 4d 44 45 42 55 47 20 2d 44 53 51 4c  E_MEMDEBUG -DSQL
0820: 49 54 45 5f 44 45 42 55 47 20 2d 44 53 51 4c 49  ITE_DEBUG -DSQLI
0830: 54 45 5f 4e 4f 5f 53 59 4e 43 22 20 0a 20 20 69  TE_NO_SYNC" .  i
0840: 66 20 7b 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f  f {$::tcl_platfo
0850: 72 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 77  rm(platform)=="w
0860: 69 6e 64 6f 77 73 22 7d 20 7b 0a 20 20 20 20 61  indows"} {.    a
0870: 70 70 65 6e 64 20 6f 70 74 73 20 22 20 2d 44 53  ppend opts " -DS
0880: 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 3d 31 22 0a  QLITE_OS_WIN=1".
0890: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 20 22      set target "
08a0: 74 65 73 74 66 69 78 74 75 72 65 2e 65 78 65 22  testfixture.exe"
08b0: 0a 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 3a 3a  .  } elseif {$::
08c0: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61  tcl_platform(pla
08d0: 74 66 6f 72 6d 29 3d 3d 22 6f 73 32 22 7d 20 7b  tform)=="os2"} {
08e0: 0a 20 20 20 20 61 70 70 65 6e 64 20 6f 70 74 73  .    append opts
08f0: 20 22 20 2d 44 53 51 4c 49 54 45 5f 4f 53 5f 4f   " -DSQLITE_OS_O
0900: 53 32 3d 31 22 0a 20 20 7d 20 65 6c 73 65 20 7b  S2=1".  } else {
0910: 0a 20 20 20 20 61 70 70 65 6e 64 20 6f 70 74 73  .    append opts
0920: 20 22 20 2d 44 53 51 4c 49 54 45 5f 4f 53 5f 55   " -DSQLITE_OS_U
0930: 4e 49 58 3d 31 22 0a 20 20 7d 0a 20 20 66 6f 72  NIX=1".  }.  for
0940: 65 61 63 68 20 73 79 6d 20 24 6f 6d 69 74 5f 73  each sym $omit_s
0950: 79 6d 62 6f 6c 5f 6c 69 73 74 20 7b 0a 20 20 20  ymbol_list {.   
0960: 20 61 70 70 65 6e 64 20 6f 70 74 73 20 22 20 2d   append opts " -
0970: 44 24 7b 73 79 6d 7d 3d 31 22 0a 20 20 7d 0a 0a  D${sym}=1".  }..
0980: 20 20 23 20 43 72 65 61 74 65 20 74 68 65 20 64    # Create the d
0990: 69 72 65 63 74 6f 72 79 20 61 6e 64 20 64 6f 20  irectory and do 
09a0: 74 68 65 20 62 75 69 6c 64 2e 20 49 66 20 61 6e  the build. If an
09b0: 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20 72 65   error occurs re
09c0: 74 75 72 6e 0a 20 20 23 20 65 61 72 6c 79 20 77  turn.  # early w
09d0: 69 74 68 6f 75 74 20 61 74 74 65 6d 70 74 69 6e  ithout attemptin
09e0: 67 20 74 6f 20 72 75 6e 20 74 68 65 20 74 65 73  g to run the tes
09f0: 74 20 73 75 69 74 65 2e 0a 20 20 66 69 6c 65 20  t suite..  file 
0a00: 6d 6b 64 69 72 20 24 64 69 72 0a 20 20 70 75 74  mkdir $dir.  put
0a10: 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 22 42 75  s -nonewline "Bu
0a20: 69 6c 64 69 6e 67 20 24 64 69 72 2e 2e 2e 22 0a  ilding $dir...".
0a30: 20 20 66 6c 75 73 68 20 73 74 64 6f 75 74 0a 63    flush stdout.c
0a40: 61 74 63 68 20 7b 0a 20 20 66 69 6c 65 20 63 6f  atch {.  file co
0a50: 70 79 20 2d 66 6f 72 63 65 20 2e 2f 63 6f 6e 66  py -force ./conf
0a60: 69 67 2e 68 20 24 64 69 72 0a 20 20 66 69 6c 65  ig.h $dir.  file
0a70: 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 2e 2f 6c   copy -force ./l
0a80: 69 62 74 6f 6f 6c 20 24 64 69 72 0a 7d 0a 20 20  ibtool $dir.}.  
0a90: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 0a  set rc [catch {.
0aa0: 20 20 20 20 65 78 65 63 20 6d 61 6b 65 20 2d 43      exec make -C
0ab0: 20 24 64 69 72 20 2d 66 20 24 3a 3a 4d 41 4b 45   $dir -f $::MAKE
0ac0: 46 49 4c 45 20 24 74 61 72 67 65 74 20 4f 50 54  FILE $target OPT
0ad0: 53 3d 24 6f 70 74 73 20 3e 26 20 24 64 69 72 2f  S=$opts >& $dir/
0ae0: 62 75 69 6c 64 2e 6c 6f 67 0a 20 20 7d 5d 0a 20  build.log.  }]. 
0af0: 20 69 66 20 7b 24 72 63 7d 20 7b 0a 20 20 20 20   if {$rc} {.    
0b00: 70 75 74 73 20 22 4e 6f 20 67 6f 6f 64 2e 20 53  puts "No good. S
0b10: 65 65 20 24 64 69 72 2f 62 75 69 6c 64 2e 6c 6f  ee $dir/build.lo
0b20: 67 2e 22 0a 20 20 20 20 72 65 74 75 72 6e 0a 20  g.".    return. 
0b30: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 70 75   } else {.    pu
0b40: 74 73 20 22 4f 6b 22 0a 20 20 7d 0a 20 20 0a 20  ts "Ok".  }.  . 
0b50: 20 23 20 43 72 65 61 74 65 20 61 6e 20 65 6d 70   # Create an emp
0b60: 74 79 20 66 69 6c 65 20 22 24 64 69 72 2f 73 71  ty file "$dir/sq
0b70: 6c 69 74 65 33 22 2e 20 54 68 69 73 20 69 73 20  lite3". This is 
0b80: 74 6f 20 74 72 69 63 6b 20 74 68 65 20 6d 61 6b  to trick the mak
0b90: 65 66 69 6c 65 20 6f 75 74 20 0a 20 20 23 20 6f  efile out .  # o
0ba0: 66 20 74 72 79 69 6e 67 20 74 6f 20 62 75 69 6c  f trying to buil
0bb0: 64 20 74 68 65 20 73 71 6c 69 74 65 20 73 68 65  d the sqlite she
0bc0: 6c 6c 2e 20 54 68 65 20 73 71 6c 69 74 65 20 73  ll. The sqlite s
0bd0: 68 65 6c 6c 20 77 6f 6e 27 74 20 62 75 69 6c 64  hell won't build
0be0: 20 0a 20 20 23 20 77 69 74 68 20 73 6f 6d 65 20   .  # with some 
0bf0: 6f 66 20 74 68 65 20 4f 4d 49 54 20 6f 70 74 69  of the OMIT opti
0c00: 6f 6e 73 20 28 69 2e 65 20 4f 4d 49 54 5f 43 4f  ons (i.e OMIT_CO
0c10: 4d 50 4c 45 54 45 29 2e 0a 20 20 73 65 74 20 73  MPLETE)..  set s
0c20: 71 6c 69 74 65 33 5f 64 75 6d 6d 79 20 24 64 69  qlite3_dummy $di
0c30: 72 2f 73 71 6c 69 74 65 33 0a 20 20 69 66 20 7b  r/sqlite3.  if {
0c40: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform(
0c50: 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 77 69 6e 64  platform)=="wind
0c60: 6f 77 73 22 20 7c 7c 20 24 3a 3a 74 63 6c 5f 70  ows" || $::tcl_p
0c70: 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d  latform(platform
0c80: 29 3d 3d 22 6f 73 32 22 7d 20 7b 0a 20 20 20 20  )=="os2"} {.    
0c90: 61 70 70 65 6e 64 20 73 71 6c 69 74 65 33 5f 64  append sqlite3_d
0ca0: 75 6d 6d 79 20 22 2e 65 78 65 22 0a 20 20 7d 0a  ummy ".exe".  }.
0cb0: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69    if {![file exi
0cc0: 73 74 73 20 24 73 71 6c 69 74 65 33 5f 64 75 6d  sts $sqlite3_dum
0cd0: 6d 79 5d 7d 20 7b 0a 20 20 20 20 73 65 74 20 77  my]} {.    set w
0ce0: 72 20 5b 6f 70 65 6e 20 24 73 71 6c 69 74 65 33  r [open $sqlite3
0cf0: 5f 64 75 6d 6d 79 20 77 5d 0a 20 20 20 20 70 75  _dummy w].    pu
0d00: 74 73 20 24 77 72 20 22 64 75 6d 6d 79 22 0a 20  ts $wr "dummy". 
0d10: 20 20 20 63 6c 6f 73 65 20 24 77 72 0a 20 20 7d     close $wr.  }
0d20: 0a 0a 20 20 69 66 20 7b 24 3a 3a 53 4b 49 50 5f  ..  if {$::SKIP_
0d30: 52 55 4e 7d 20 7b 0a 20 20 20 20 20 20 70 75 74  RUN} {.      put
0d40: 73 20 22 53 6b 69 70 20 74 65 73 74 69 6e 67 20  s "Skip testing 
0d50: 24 64 69 72 2e 22 0a 20 20 7d 20 65 6c 73 65 20  $dir.".  } else 
0d60: 7b 0a 20 20 20 20 23 20 52 75 6e 20 74 68 65 20  {.    # Run the 
0d70: 74 65 73 74 20 73 75 69 74 65 2e 0a 20 20 20 20  test suite..    
0d80: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
0d90: 22 54 65 73 74 69 6e 67 20 24 64 69 72 2e 2e 2e  "Testing $dir...
0da0: 22 0a 20 20 20 20 66 6c 75 73 68 20 73 74 64 6f  ".    flush stdo
0db0: 75 74 0a 20 20 20 20 73 65 74 20 72 63 20 5b 63  ut.    set rc [c
0dc0: 61 74 63 68 20 7b 0a 20 20 20 20 20 20 65 78 65  atch {.      exe
0dd0: 63 20 6d 61 6b 65 20 2d 43 20 24 64 69 72 20 2d  c make -C $dir -
0de0: 66 20 24 3a 3a 4d 41 4b 45 46 49 4c 45 20 74 65  f $::MAKEFILE te
0df0: 73 74 20 4f 50 54 53 3d 24 6f 70 74 73 20 3e 26  st OPTS=$opts >&
0e00: 20 24 64 69 72 2f 74 65 73 74 2e 6c 6f 67 0a 20   $dir/test.log. 
0e10: 20 20 20 7d 5d 0a 20 20 20 20 69 66 20 7b 24 72     }].    if {$r
0e20: 63 7d 20 7b 0a 20 20 20 20 20 20 70 75 74 73 20  c} {.      puts 
0e30: 22 4e 6f 20 67 6f 6f 64 2e 20 53 65 65 20 24 64  "No good. See $d
0e40: 69 72 2f 74 65 73 74 2e 6c 6f 67 2e 22 0a 20 20  ir/test.log.".  
0e50: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
0e60: 20 70 75 74 73 20 22 4f 6b 22 0a 20 20 20 20 7d   puts "Ok".    }
0e70: 0a 20 20 7d 0a 7d 0a 0a 0a 23 20 54 68 69 73 20  .  }.}...# This 
0e80: 70 72 6f 63 20 70 72 6f 63 65 73 73 65 73 20 74  proc processes t
0e90: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  he command line 
0ea0: 6f 70 74 69 6f 6e 73 20 70 61 73 73 65 64 20 74  options passed t
0eb0: 6f 20 74 68 69 73 20 73 63 72 69 70 74 2e 0a 23  o this script..#
0ec0: 20 43 75 72 72 65 6e 74 6c 79 20 74 68 65 20 6f   Currently the o
0ed0: 6e 6c 79 20 6f 70 74 69 6f 6e 20 73 75 70 70 6f  nly option suppo
0ee0: 72 74 65 64 20 69 73 20 22 2d 6d 61 6b 65 66 69  rted is "-makefi
0ef0: 6c 65 22 2c 20 64 65 66 61 75 6c 74 0a 23 20 22  le", default.# "
0f00: 2e 2e 2f 4d 61 6b 65 66 69 6c 65 2e 6c 69 6e 75  ../Makefile.linu
0f10: 78 2d 67 63 63 22 2e 20 53 65 74 20 74 68 65 20  x-gcc". Set the 
0f20: 3a 3a 4d 41 4b 45 46 49 4c 45 20 76 61 72 69 61  ::MAKEFILE varia
0f30: 62 6c 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ble to the value
0f40: 20 6f 66 20 74 68 69 73 0a 23 20 6f 70 74 69 6f   of this.# optio
0f50: 6e 2e 0a 23 0a 70 72 6f 63 20 70 72 6f 63 65 73  n..#.proc proces
0f60: 73 5f 6f 70 74 69 6f 6e 73 20 7b 61 72 67 76 7d  s_options {argv}
0f70: 20 7b 0a 20 20 69 66 20 7b 24 3a 3a 74 63 6c 5f   {.  if {$::tcl_
0f80: 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72  platform(platfor
0f90: 6d 29 3d 3d 22 77 69 6e 64 6f 77 73 22 20 7c 7c  m)=="windows" ||
0fa0: 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d   $::tcl_platform
0fb0: 28 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 6f 73 32  (platform)=="os2
0fc0: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 3a  "} {.      set :
0fd0: 3a 4d 41 4b 45 46 49 4c 45 20 2e 2f 4d 61 6b 65  :MAKEFILE ./Make
0fe0: 66 69 6c 65 20 20 20 20 20 20 20 20 20 20 20 20  file            
0ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 23 20               ;# 
1000: 44 65 66 61 75 6c 74 20 76 61 6c 75 65 0a 20 20  Default value.  
1010: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 73  } else {.      s
1020: 65 74 20 3a 3a 4d 41 4b 45 46 49 4c 45 20 2e 2f  et ::MAKEFILE ./
1030: 4d 61 6b 65 66 69 6c 65 2e 6c 69 6e 75 78 2d 67  Makefile.linux-g
1040: 63 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20  cc              
1050: 20 3b 23 20 44 65 66 61 75 6c 74 20 76 61 6c 75   ;# Default valu
1060: 65 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 53 4b  e.  }.  set ::SK
1070: 49 50 5f 52 55 4e 20 30 20 20 20 20 20 20 20 20  IP_RUN 0        
1080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 23                ;#
10a0: 20 44 65 66 61 75 6c 74 20 74 6f 20 61 74 74 65   Default to atte
10b0: 6d 70 74 20 74 65 73 74 0a 0a 20 20 66 6f 72 20  mpt test..  for 
10c0: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20  {set i 0} {$i < 
10d0: 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67 76 5d 7d  [llength $argv]}
10e0: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20   {incr i} {.    
10f0: 73 77 69 74 63 68 20 2d 2d 20 5b 6c 69 6e 64 65  switch -- [linde
1100: 78 20 24 61 72 67 76 20 24 69 5d 20 7b 0a 20 20  x $argv $i] {.  
1110: 20 20 20 20 2d 6d 61 6b 65 66 69 6c 65 20 7b 0a      -makefile {.
1120: 20 20 20 20 20 20 20 20 69 6e 63 72 20 69 0a 20          incr i. 
1130: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 4d 41 4b         set ::MAK
1140: 45 46 49 4c 45 20 5b 6c 69 6e 64 65 78 20 24 61  EFILE [lindex $a
1150: 72 67 76 20 24 69 5d 0a 20 20 20 20 20 20 7d 0a  rgv $i].      }.
1160: 20 20 0a 20 20 20 20 20 20 2d 73 6b 69 70 5f 72    .      -skip_r
1170: 75 6e 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 63  un {.        inc
1180: 72 20 69 0a 20 20 20 20 20 20 20 20 73 65 74 20  r i.        set 
1190: 3a 3a 53 4b 49 50 5f 52 55 4e 20 31 0a 20 20 20  ::SKIP_RUN 1.   
11a0: 20 20 20 7d 0a 0a 20 20 20 20 20 20 64 65 66 61     }..      defa
11b0: 75 6c 74 20 7b 0a 20 20 20 20 20 20 20 20 70 75  ult {.        pu
11c0: 74 73 20 73 74 64 65 72 72 20 5b 73 74 72 69 6e  ts stderr [strin
11d0: 67 20 74 72 69 6d 20 24 3a 3a 55 53 41 47 45 5f  g trim $::USAGE_
11e0: 4d 45 53 53 41 47 45 5d 0a 20 20 20 20 20 20 20  MESSAGE].       
11f0: 20 65 78 69 74 20 2d 31 0a 20 20 20 20 20 20 7d   exit -1.      }
1200: 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 3a  .    }.    set :
1210: 3a 4d 41 4b 45 46 49 4c 45 20 5b 66 69 6c 65 20  :MAKEFILE [file 
1220: 6e 6f 72 6d 61 6c 69 7a 65 20 24 3a 3a 4d 41 4b  normalize $::MAK
1230: 45 46 49 4c 45 5d 0a 20 20 7d 0a 7d 0a 0a 23 20  EFILE].  }.}..# 
1240: 4d 61 69 6e 20 72 6f 75 74 69 6e 65 2e 0a 23 0a  Main routine..#.
1250: 0a 70 72 6f 63 20 6d 61 69 6e 20 7b 61 72 67 76  .proc main {argv
1260: 7d 20 7b 0a 20 20 23 20 4c 69 73 74 20 6f 66 20  } {.  # List of 
1270: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 58 58 58 20  SQLITE_OMIT_XXX 
1280: 73 79 6d 62 6f 6c 73 20 73 75 70 70 6f 72 74 65  symbols supporte
1290: 64 20 62 79 20 53 51 4c 69 74 65 2e 0a 20 20 73  d by SQLite..  s
12a0: 65 74 20 3a 3a 4f 4d 49 54 5f 53 59 4d 42 4f 4c  et ::OMIT_SYMBOL
12b0: 53 20 5b 6c 69 73 74 20 5c 0a 20 20 20 20 53 51  S [list \.    SQ
12c0: 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
12d0: 41 42 4c 45 20 5c 0a 20 20 20 20 53 51 4c 49 54  ABLE \.    SQLIT
12e0: 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 20 5c  E_OMIT_ANALYZE \
12f0: 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  .    SQLITE_OMIT
1300: 5f 41 54 54 41 43 48 20 5c 0a 20 20 20 20 53 51  _ATTACH \.    SQ
1310: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
1320: 49 5a 41 54 49 4f 4e 20 5c 0a 20 20 20 20 53 51  IZATION \.    SQ
1330: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
1340: 43 52 45 4d 45 4e 54 20 5c 0a 20 20 20 20 53 51  CREMENT \.    SQ
1350: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
1360: 49 54 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f  IT \.    SQLITE_
1370: 4f 4d 49 54 5f 41 55 54 4f 4d 41 54 49 43 5f 49  OMIT_AUTOMATIC_I
1380: 4e 44 45 58 20 5c 0a 20 20 20 20 53 51 4c 49 54  NDEX \.    SQLIT
1390: 45 5f 4f 4d 49 54 5f 41 55 54 4f 52 45 53 45 54  E_OMIT_AUTORESET
13a0: 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d   \.    SQLITE_OM
13b0: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20 5c 0a  IT_AUTOVACUUM \.
13c0: 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f      SQLITE_OMIT_
13d0: 42 45 54 57 45 45 4e 5f 4f 50 54 49 4d 49 5a 41  BETWEEN_OPTIMIZA
13e0: 54 49 4f 4e 20 5c 0a 20 20 20 20 53 51 4c 49 54  TION \.    SQLIT
13f0: 45 5f 4f 4d 49 54 5f 42 4c 4f 42 5f 4c 49 54 45  E_OMIT_BLOB_LITE
1400: 52 41 4c 20 5c 0a 20 20 20 20 53 51 4c 49 54 45  RAL \.    SQLITE
1410: 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
1420: 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d   \.    SQLITE_OM
1430: 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 20  IT_BUILTIN_TEST 
1440: 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49  \.    SQLITE_OMI
1450: 54 5f 43 41 53 54 20 5c 0a 20 20 20 20 53 51 4c  T_CAST \.    SQL
1460: 49 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 20 5c  ITE_OMIT_CHECK \
1470: 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  .    SQLITE_OMIT
1480: 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
1490: 49 41 47 53 20 5c 0a 20 20 20 20 53 51 4c 49 54  IAGS \.    SQLIT
14a0: 45 5f 4f 4d 49 54 5f 43 4f 4d 50 4c 45 54 45 20  E_OMIT_COMPLETE 
14b0: 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49  \.    SQLITE_OMI
14c0: 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43  T_COMPOUND_SELEC
14d0: 54 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f  T \.    SQLITE_O
14e0: 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e  MIT_DATETIME_FUN
14f0: 43 53 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f  CS \.    SQLITE_
1500: 4f 4d 49 54 5f 44 45 43 4c 54 59 50 45 20 5c 0a  OMIT_DECLTYPE \.
1510: 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f      SQLITE_OMIT_
1520: 44 45 50 52 45 43 41 54 45 44 20 5c 0a 20 20 20  DEPRECATED \.   
1530: 20 78 78 78 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   xxxSQLITE_OMIT_
1540: 44 49 53 4b 49 4f 20 5c 0a 20 20 20 20 53 51 4c  DISKIO \.    SQL
1550: 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
1560: 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d   \.    SQLITE_OM
1570: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 20  IT_FLAG_PRAGMAS 
1580: 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49  \.    SQLITE_OMI
1590: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
15a0: 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d   \.    SQLITE_OM
15b0: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 5c  IT_FOREIGN_KEY \
15c0: 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  .    SQLITE_OMIT
15d0: 5f 47 45 54 5f 54 41 42 4c 45 20 5c 0a 20 20 20  _GET_TABLE \.   
15e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 43   SQLITE_OMIT_INC
15f0: 52 42 4c 4f 42 20 5c 0a 20 20 20 20 53 51 4c 49  RBLOB \.    SQLI
1600: 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
1610: 59 5f 43 48 45 43 4b 20 5c 0a 20 20 20 20 53 51  Y_CHECK \.    SQ
1620: 4c 49 54 45 5f 4f 4d 49 54 5f 4c 49 4b 45 5f 4f  LITE_OMIT_LIKE_O
1630: 50 54 49 4d 49 5a 41 54 49 4f 4e 20 5c 0a 20 20  PTIMIZATION \.  
1640: 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f    SQLITE_OMIT_LO
1650: 41 44 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0a 20  AD_EXTENSION \. 
1660: 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c     SQLITE_OMIT_L
1670: 4f 43 41 4c 54 49 4d 45 20 5c 0a 20 20 20 20 53  OCALTIME \.    S
1680: 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 4f 4b 41  QLITE_OMIT_LOOKA
1690: 53 49 44 45 20 5c 0a 20 20 20 20 53 51 4c 49 54  SIDE \.    SQLIT
16a0: 45 5f 4f 4d 49 54 5f 4d 45 4d 4f 52 59 44 42 20  E_OMIT_MEMORYDB 
16b0: 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49  \.    SQLITE_OMI
16c0: 54 5f 4f 52 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  T_OR_OPTIMIZATIO
16d0: 4e 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f  N \.    SQLITE_O
16e0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
16f0: 53 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f  S \.    SQLITE_O
1700: 4d 49 54 5f 50 52 41 47 4d 41 20 5c 0a 20 20 20  MIT_PRAGMA \.   
1710: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
1720: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 20 5c  GRESS_CALLBACK \
1730: 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  .    SQLITE_OMIT
1740: 5f 51 55 49 43 4b 42 41 4c 41 4e 43 45 20 5c 0a  _QUICKBALANCE \.
1750: 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f      SQLITE_OMIT_
1760: 52 45 49 4e 44 45 58 20 5c 0a 20 20 20 20 53 51  REINDEX \.    SQ
1770: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
1780: 5f 50 52 41 47 4d 41 53 20 5c 0a 20 20 20 20 53  _PRAGMAS \.    S
1790: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
17a0: 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
17b0: 53 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f  S \.    SQLITE_O
17c0: 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
17d0: 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d   \.    SQLITE_OM
17e0: 49 54 5f 53 55 42 51 55 45 52 59 20 5c 0a 20 20  IT_SUBQUERY \.  
17f0: 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 43    SQLITE_OMIT_TC
1800: 4c 5f 56 41 52 49 41 42 4c 45 20 5c 0a 20 20 20  L_VARIABLE \.   
1810: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d   SQLITE_OMIT_TEM
1820: 50 44 42 20 5c 0a 20 20 20 20 53 51 4c 49 54 45  PDB \.    SQLITE
1830: 5f 4f 4d 49 54 5f 54 52 41 43 45 20 5c 0a 20 20  _OMIT_TRACE \.  
1840: 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52    SQLITE_OMIT_TR
1850: 49 47 47 45 52 20 5c 0a 20 20 20 20 53 51 4c 49  IGGER \.    SQLI
1860: 54 45 5f 4f 4d 49 54 5f 54 52 55 4e 43 41 54 45  TE_OMIT_TRUNCATE
1870: 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 20 5c 0a  _OPTIMIZATION \.
1880: 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f      SQLITE_OMIT_
1890: 55 54 46 31 36 20 5c 0a 20 20 20 20 53 51 4c 49  UTF16 \.    SQLI
18a0: 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 20 5c  TE_OMIT_VACUUM \
18b0: 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  .    SQLITE_OMIT
18c0: 5f 56 49 45 57 20 5c 0a 20 20 20 20 53 51 4c 49  _VIEW \.    SQLI
18d0: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
18e0: 41 42 4c 45 20 5c 0a 20 20 20 20 53 51 4c 49 54  ABLE \.    SQLIT
18f0: 45 5f 4f 4d 49 54 5f 57 41 4c 20 5c 0a 20 20 20  E_OMIT_WAL \.   
1900: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
1910: 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d   \.    SQLITE_OM
1920: 49 54 5f 58 46 45 52 5f 4f 50 54 20 5c 0a 20 20  IT_XFER_OPT \.  
1930: 5d 0a 0a 20 20 73 65 74 20 3a 3a 45 4e 41 42 4c  ]..  set ::ENABL
1940: 45 5f 53 59 4d 42 4f 4c 53 20 5b 6c 69 73 74 20  E_SYMBOLS [list 
1950: 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 44 49 53  \.    SQLITE_DIS
1960: 41 42 4c 45 5f 44 49 52 53 59 4e 43 20 5c 0a 20  ABLE_DIRSYNC \. 
1970: 20 20 20 53 51 4c 49 54 45 5f 44 49 53 41 42 4c     SQLITE_DISABL
1980: 45 5f 4c 46 53 20 5c 0a 20 20 20 20 53 51 4c 49  E_LFS \.    SQLI
1990: 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43  TE_ENABLE_ATOMIC
19a0: 5f 57 52 49 54 45 20 5c 0a 20 20 20 20 78 78 78  _WRITE \.    xxx
19b0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45  SQLITE_ENABLE_CE
19c0: 52 4f 44 20 5c 0a 20 20 20 20 53 51 4c 49 54 45  ROD \.    SQLITE
19d0: 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 4d  _ENABLE_COLUMN_M
19e0: 45 54 41 44 41 54 41 20 5c 0a 20 20 20 20 53 51  ETADATA \.    SQ
19f0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 45  LITE_ENABLE_EXPE
1a00: 4e 53 49 56 45 5f 41 53 53 45 52 54 20 5c 0a 20  NSIVE_ASSERT \. 
1a10: 20 20 20 78 78 78 53 51 4c 49 54 45 5f 45 4e 41     xxxSQLITE_ENA
1a20: 42 4c 45 5f 46 54 53 31 20 5c 0a 20 20 20 20 78  BLE_FTS1 \.    x
1a30: 78 78 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  xxSQLITE_ENABLE_
1a40: 46 54 53 32 20 5c 0a 20 20 20 20 53 51 4c 49 54  FTS2 \.    SQLIT
1a50: 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 5c 0a  E_ENABLE_FTS3 \.
1a60: 20 20 20 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c      SQLITE_ENABL
1a70: 45 5f 46 54 53 33 5f 50 41 52 45 4e 54 48 45 53  E_FTS3_PARENTHES
1a80: 49 53 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f  IS \.    SQLITE_
1a90: 45 4e 41 42 4c 45 5f 46 54 53 34 20 5c 0a 20 20  ENABLE_FTS4 \.  
1aa0: 20 20 78 78 78 53 51 4c 49 54 45 5f 45 4e 41 42    xxxSQLITE_ENAB
1ab0: 4c 45 5f 49 43 55 20 5c 0a 20 20 20 20 53 51 4c  LE_ICU \.    SQL
1ac0: 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41  ITE_ENABLE_IOTRA
1ad0: 43 45 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f  CE \.    SQLITE_
1ae0: 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45 58 54 45  ENABLE_LOAD_EXTE
1af0: 4e 53 49 4f 4e 20 5c 0a 20 20 20 20 53 51 4c 49  NSION \.    SQLI
1b00: 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e  TE_ENABLE_LOCKIN
1b10: 47 5f 53 54 59 4c 45 20 5c 0a 20 20 20 20 53 51  G_STYLE \.    SQ
1b20: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 4f  LITE_ENABLE_MEMO
1b30: 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 20 5c 0a  RY_MANAGEMENT \.
1b40: 20 20 20 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c      SQLITE_ENABL
1b50: 45 5f 4d 45 4d 53 59 53 33 20 5c 0a 20 20 20 20  E_MEMSYS3 \.    
1b60: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
1b70: 4d 53 59 53 35 20 5c 0a 20 20 20 20 53 51 4c 49  MSYS5 \.    SQLI
1b80: 54 45 5f 45 4e 41 42 4c 45 5f 4f 56 45 52 53 49  TE_ENABLE_OVERSI
1b90: 5a 45 5f 43 45 4c 4c 5f 43 48 45 43 4b 20 5c 0a  ZE_CELL_CHECK \.
1ba0: 20 20 20 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c      SQLITE_ENABL
1bb0: 45 5f 52 54 52 45 45 20 5c 0a 20 20 20 20 53 51  E_RTREE \.    SQ
1bc0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
1bd0: 32 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 45  2 \.    SQLITE_E
1be0: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
1bf0: 49 46 59 20 5c 0a 20 20 20 20 53 51 4c 49 54 45  IFY \.    SQLITE
1c00: 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
1c10: 45 4c 45 54 45 5f 4c 49 4d 49 54 20 5c 0a 20 20  ELETE_LIMIT \.  
1c20: 5d 0a 0a 20 20 23 20 50 72 6f 63 65 73 73 20 61  ]..  # Process a
1c30: 6e 79 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  ny command line 
1c40: 6f 70 74 69 6f 6e 73 2e 0a 20 20 70 72 6f 63 65  options..  proce
1c50: 73 73 5f 6f 70 74 69 6f 6e 73 20 24 61 72 67 76  ss_options $argv
1c60: 0a 0a 20 20 23 20 46 69 72 73 74 20 74 72 79 20  ..  # First try 
1c70: 61 20 74 65 73 74 20 77 69 74 68 20 61 6c 6c 20  a test with all 
1c80: 4f 4d 49 54 20 73 79 6d 62 6f 6c 73 20 65 78 63  OMIT symbols exc
1c90: 65 70 74 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ept SQLITE_OMIT_
1ca0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 20 0a  FLOATING_POINT .
1cb0: 20 20 23 20 61 6e 64 20 53 51 4c 49 54 45 5f 4f    # and SQLITE_O
1cc0: 4d 49 54 5f 50 52 41 47 4d 41 20 64 65 66 69 6e  MIT_PRAGMA defin
1cd0: 65 64 2e 20 54 68 65 20 66 6f 72 6d 65 72 20 64  ed. The former d
1ce0: 6f 65 73 6e 27 74 20 77 6f 72 6b 20 28 63 61 75  oesn't work (cau
1cf0: 73 65 73 20 73 65 67 66 61 75 6c 74 73 29 0a 20  ses segfaults). 
1d00: 20 23 20 61 6e 64 20 74 68 65 20 6c 61 74 74 65   # and the latte
1d10: 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69  r is currently i
1d20: 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68  ncompatible with
1d30: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20   the test suite 
1d40: 28 74 68 69 73 20 73 68 6f 75 6c 64 0a 20 20 23  (this should.  #
1d50: 20 62 65 20 66 69 78 65 64 2c 20 62 75 74 20 69   be fixed, but i
1d60: 74 20 77 69 6c 6c 20 62 65 20 61 20 6c 6f 74 20  t will be a lot 
1d70: 6f 66 20 77 6f 72 6b 29 2e 0a 20 20 73 65 74 20  of work)..  set 
1d80: 61 6c 6c 73 79 6d 73 20 5b 6c 69 73 74 5d 0a 20  allsyms [list]. 
1d90: 20 66 6f 72 65 61 63 68 20 73 20 24 3a 3a 4f 4d   foreach s $::OM
1da0: 49 54 5f 53 59 4d 42 4f 4c 53 20 7b 0a 20 20 20  IT_SYMBOLS {.   
1db0: 20 69 66 20 7b 24 73 21 3d 22 53 51 4c 49 54 45   if {$s!="SQLITE
1dc0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
1dd0: 4f 49 4e 54 22 20 26 26 20 24 73 21 3d 22 53 51  OINT" && $s!="SQ
1de0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
1df0: 22 7d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65  "} {.      lappe
1e00: 6e 64 20 61 6c 6c 73 79 6d 73 20 24 73 0a 20 20  nd allsyms $s.  
1e10: 20 20 7d 0a 20 20 7d 0a 20 20 72 75 6e 5f 71 75    }.  }.  run_qu
1e20: 69 63 6b 5f 74 65 73 74 20 74 65 73 74 5f 4f 4d  ick_test test_OM
1e30: 49 54 5f 45 56 45 52 59 54 48 49 4e 47 20 24 61  IT_EVERYTHING $a
1e40: 6c 6c 73 79 6d 73 0a 0a 20 20 23 20 4e 6f 77 20  llsyms..  # Now 
1e50: 74 72 79 20 6f 6e 65 20 71 75 69 63 6b 2e 74 65  try one quick.te
1e60: 73 74 20 77 69 74 68 20 65 61 63 68 20 6f 66 20  st with each of 
1e70: 74 68 65 20 4f 4d 49 54 20 73 79 6d 62 6f 6c 73  the OMIT symbols
1e80: 20 64 65 66 69 6e 65 64 2e 20 49 6e 63 6c 75 64   defined. Includ
1e90: 65 64 0a 20 20 23 20 61 72 65 20 74 68 65 20 4f  ed.  # are the O
1ea0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
1eb0: 4e 54 20 61 6e 64 20 4f 4d 49 54 5f 50 52 41 47  NT and OMIT_PRAG
1ec0: 4d 41 20 73 79 6d 62 6f 6c 73 2c 20 65 76 65 6e  MA symbols, even
1ed0: 20 74 68 6f 75 67 68 20 77 65 0a 20 20 23 20 6b   though we.  # k
1ee0: 6e 6f 77 20 74 68 65 79 20 77 69 6c 6c 20 66 61  now they will fa
1ef0: 69 6c 2e 20 49 74 27 73 20 67 6f 6f 64 20 74 6f  il. It's good to
1f00: 20 62 65 20 72 65 6d 69 6e 64 65 64 20 6f 66 20   be reminded of 
1f10: 74 68 69 73 20 66 72 6f 6d 20 74 69 6d 65 20 74  this from time t
1f20: 6f 20 74 69 6d 65 2e 0a 20 20 66 6f 72 65 61 63  o time..  foreac
1f30: 68 20 73 79 6d 20 24 3a 3a 4f 4d 49 54 5f 53 59  h sym $::OMIT_SY
1f40: 4d 42 4f 4c 53 20 7b 0a 20 20 20 20 73 65 74 20  MBOLS {.    set 
1f50: 64 69 72 6e 61 6d 65 20 22 74 65 73 74 5f 5b 73  dirname "test_[s
1f60: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 73 79 6d  tring range $sym
1f70: 20 37 20 65 6e 64 5d 22 0a 20 20 20 20 72 75 6e   7 end]".    run
1f80: 5f 71 75 69 63 6b 5f 74 65 73 74 20 24 64 69 72  _quick_test $dir
1f90: 6e 61 6d 65 20 24 73 79 6d 0a 20 20 7d 0a 0a 20  name $sym.  }.. 
1fa0: 20 23 20 54 72 79 20 74 68 65 20 45 4e 41 42 4c   # Try the ENABL
1fb0: 45 2f 44 49 53 41 42 4c 45 20 73 79 6d 62 6f 6c  E/DISABLE symbol
1fc0: 73 20 6f 6e 65 20 61 74 20 61 20 74 69 6d 65 2e  s one at a time.
1fd0: 20 20 0a 20 20 23 20 57 65 20 64 6f 6e 27 74 20    .  # We don't 
1fe0: 64 6f 20 74 68 65 6d 20 61 6c 6c 20 61 74 20 6f  do them all at o
1ff0: 6e 63 65 20 73 69 6e 63 65 20 73 6f 6d 65 20 61  nce since some a
2000: 72 65 20 63 6f 6e 66 6c 69 63 74 69 6e 67 2e 0a  re conflicting..
2010: 20 20 66 6f 72 65 61 63 68 20 73 79 6d 20 24 3a    foreach sym $:
2020: 3a 45 4e 41 42 4c 45 5f 53 59 4d 42 4f 4c 53 20  :ENABLE_SYMBOLS 
2030: 7b 0a 20 20 20 20 73 65 74 20 64 69 72 6e 61 6d  {.    set dirnam
2040: 65 20 22 74 65 73 74 5f 5b 73 74 72 69 6e 67 20  e "test_[string 
2050: 72 61 6e 67 65 20 24 73 79 6d 20 37 20 65 6e 64  range $sym 7 end
2060: 5d 22 0a 20 20 20 20 72 75 6e 5f 71 75 69 63 6b  ]".    run_quick
2070: 5f 74 65 73 74 20 24 64 69 72 6e 61 6d 65 20 24  _test $dirname $
2080: 73 79 6d 0a 20 20 7d 0a 7d 0a 0a 6d 61 69 6e 20  sym.  }.}..main 
2090: 24 61 72 67 76 0a                                $argv.