/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact e29ddad7f546c5aad0198dca389066c3bda53f2d:


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 34 20 32 30 30 38 2f 30 36 2f 32 36 20 31  1.4 2008/06/26 1
0030: 30 3a 34 31 3a 31 39 20 64 61 6e 69 65 6c 6b 31  0:41:19 danielk1
0040: 39 37 37 20 45 78 70 20 24 7d 0a 0a 23 20 44 6f  977 Exp $}..# Do
0050: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
0060: 74 68 69 73 20 73 63 72 69 70 74 2e 20 54 68 69  this script. Thi
0070: 73 20 6d 61 79 20 62 65 20 6f 75 74 70 75 74 20  s may be output 
0080: 74 6f 20 73 74 64 65 72 72 0a 23 20 69 66 20 74  to stderr.# if t
0090: 68 65 20 73 63 72 69 70 74 20 69 73 20 69 6e 76  he script is inv
00a0: 6f 6b 65 64 20 69 6e 63 6f 72 72 65 63 74 6c 79  oked incorrectly
00b0: 2e 0a 73 65 74 20 3a 3a 55 53 41 47 45 5f 4d 45  ..set ::USAGE_ME
00c0: 53 53 41 47 45 20 7b 0a 54 68 69 73 20 54 63 6c  SSAGE {.This Tcl
00d0: 20 73 63 72 69 70 74 20 69 73 20 75 73 65 64 20   script is used 
00e0: 74 6f 20 74 65 73 74 20 74 68 65 20 76 61 72 69  to test the vari
00f0: 6f 75 73 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65  ous compile time
0100: 20 6f 70 74 69 6f 6e 73 20 0a 61 76 61 69 6c 61   options .availa
0110: 62 6c 65 20 66 6f 72 20 6f 6d 69 74 74 69 6e 67  ble for omitting
0120: 20 63 6f 64 65 20 28 74 68 65 20 53 51 4c 49 54   code (the SQLIT
0130: 45 5f 4f 4d 49 54 5f 78 78 78 20 6f 70 74 69 6f  E_OMIT_xxx optio
0140: 6e 73 29 2e 20 49 74 0a 73 68 6f 75 6c 64 20 62  ns). It.should b
0150: 65 20 69 6e 76 6f 6b 65 64 20 61 73 20 66 6f 6c  e invoked as fol
0160: 6c 6f 77 73 3a 0a 0a 20 20 20 20 3c 73 63 72 69  lows:..    <scri
0170: 70 74 3e 20 3f 2d 6d 61 6b 65 66 69 6c 65 20 50  pt> ?-makefile P
0180: 41 54 48 2d 54 4f 2d 4d 41 4b 45 46 49 4c 45 3f  ATH-TO-MAKEFILE?
0190: 0a 0a 54 68 65 20 64 65 66 61 75 6c 74 20 76 61  ..The default va
01a0: 6c 75 65 20 66 6f 72 20 3a 3a 4d 41 4b 45 46 49  lue for ::MAKEFI
01b0: 4c 45 20 69 73 20 22 2e 2e 2f 4d 61 6b 65 66 69  LE is "../Makefi
01c0: 6c 65 2e 6c 69 6e 75 78 2e 67 63 63 22 2e 0a 0a  le.linux.gcc"...
01d0: 54 68 69 73 20 73 63 72 69 70 74 20 62 75 69 6c  This script buil
01e0: 64 73 20 74 68 65 20 74 65 73 74 66 69 78 74 75  ds the testfixtu
01f0: 72 65 20 70 72 6f 67 72 61 6d 20 61 6e 64 20 72  re program and r
0200: 75 6e 73 20 74 68 65 20 53 51 4c 69 74 65 20 74  uns the SQLite t
0210: 65 73 74 20 73 75 69 74 65 0a 6f 6e 63 65 20 77  est suite.once w
0220: 69 74 68 20 65 61 63 68 20 53 51 4c 49 54 45 5f  ith each SQLITE_
0230: 4f 4d 49 54 5f 20 6f 70 74 69 6f 6e 20 64 65 66  OMIT_ option def
0240: 69 6e 65 64 20 61 6e 64 20 74 68 65 6e 20 6f 6e  ined and then on
0250: 63 65 20 77 69 74 68 20 61 6c 6c 20 6f 70 74 69  ce with all opti
0260: 6f 6e 73 0a 64 65 66 69 6e 65 64 20 74 6f 67 65  ons.defined toge
0270: 74 68 65 72 2e 20 45 61 63 68 20 72 75 6e 20 69  ther. Each run i
0280: 73 20 70 65 72 66 6f 72 6d 65 64 20 69 6e 20 61  s performed in a
0290: 20 73 65 70 65 72 61 74 65 20 64 69 72 65 63 74   seperate direct
02a0: 6f 72 79 20 63 72 65 61 74 65 64 0a 61 73 20 61  ory created.as a
02b0: 20 73 75 62 2d 64 69 72 65 63 74 6f 72 79 20 6f   sub-directory o
02c0: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69  f the current di
02d0: 72 65 63 74 6f 72 79 20 62 79 20 74 68 65 20 73  rectory by the s
02e0: 63 72 69 70 74 2e 20 54 68 65 20 6f 75 74 70 75  cript. The outpu
02f0: 74 0a 6f 66 20 74 68 65 20 62 75 69 6c 64 20 69  t.of the build i
0300: 73 20 73 61 76 65 64 20 69 6e 20 3c 73 75 62 2d  s saved in <sub-
0310: 64 69 72 65 63 74 6f 72 79 3e 2f 62 75 69 6c 64  directory>/build
0320: 2e 6c 6f 67 2e 20 54 68 65 20 6f 75 74 70 75 74  .log. The output
0330: 20 6f 66 20 74 68 65 0a 74 65 73 74 2d 73 75 69   of the.test-sui
0340: 74 65 20 69 73 20 73 61 76 65 64 20 69 6e 20 3c  te is saved in <
0350: 73 75 62 2d 64 69 72 65 63 74 6f 72 79 3e 2f 74  sub-directory>/t
0360: 65 73 74 2e 6c 6f 67 2e 0a 0a 41 6c 6d 6f 73 74  est.log...Almost
0370: 20 61 6e 79 20 53 51 4c 69 74 65 20 6d 61 6b 65   any SQLite make
0380: 66 69 6c 65 20 28 65 78 63 65 70 74 20 74 68 6f  file (except tho
0390: 73 65 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  se generated by 
03a0: 63 6f 6e 66 69 67 75 72 65 20 2d 20 73 65 65 20  configure - see 
03b0: 62 65 6c 6f 77 29 0a 73 68 6f 75 6c 64 20 77 6f  below).should wo
03c0: 72 6b 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  rk. The followin
03d0: 67 20 70 72 6f 70 65 72 74 69 65 73 20 61 72 65  g properties are
03e0: 20 72 65 71 75 69 72 65 64 3a 0a 0a 20 20 2a 20   required:..  * 
03f0: 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 73 68 6f  The makefile sho
0400: 75 6c 64 20 73 75 70 70 6f 72 74 20 74 68 65 20  uld support the 
0410: 22 74 65 73 74 66 69 78 74 75 72 65 22 20 74 61  "testfixture" ta
0420: 72 67 65 74 2e 0a 20 20 2a 20 54 68 65 20 6d 61  rget..  * The ma
0430: 6b 65 66 69 6c 65 20 73 68 6f 75 6c 64 20 73 75  kefile should su
0440: 70 70 6f 72 74 20 74 68 65 20 22 74 65 73 74 22  pport the "test"
0450: 20 74 61 72 67 65 74 2e 0a 20 20 2a 20 54 68 65   target..  * The
0460: 20 6d 61 6b 65 66 69 6c 65 20 73 68 6f 75 6c 64   makefile should
0470: 20 73 75 70 70 6f 72 74 20 74 68 65 20 76 61 72   support the var
0480: 69 61 62 6c 65 20 22 4f 50 54 53 22 20 61 73 20  iable "OPTS" as 
0490: 61 20 77 61 79 20 74 6f 20 70 61 73 73 0a 20 20  a way to pass.  
04a0: 20 20 6f 70 74 69 6f 6e 73 20 66 72 6f 6d 20 74    options from t
04b0: 68 65 20 6d 61 6b 65 20 63 6f 6d 6d 61 6e 64 20  he make command 
04c0: 6c 69 6e 65 20 74 6f 20 6c 65 6d 6f 6e 20 61 6e  line to lemon an
04d0: 64 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72  d the C compiler
04e0: 2e 0a 0a 4d 6f 72 65 20 70 72 65 63 69 73 65 6c  ...More precisel
04f0: 79 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  y, the following
0500: 20 74 77 6f 20 69 6e 76 6f 63 61 74 69 6f 6e 73   two invocations
0510: 20 6d 75 73 74 20 62 65 20 73 75 70 70 6f 72 74   must be support
0520: 65 64 3a 0a 0a 20 20 6d 61 6b 65 20 2d 66 20 24  ed:..  make -f $
0530: 3a 3a 4d 41 4b 45 46 49 4c 45 20 74 65 73 74 66  ::MAKEFILE testf
0540: 69 78 74 75 72 65 20 4f 50 54 53 3d 22 2d 44 53  ixture OPTS="-DS
0550: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
0560: 54 41 42 4c 45 3d 31 22 0a 20 20 6d 61 6b 65 20  TABLE=1".  make 
0570: 2d 66 20 24 3a 3a 4d 41 4b 45 46 49 4c 45 20 74  -f $::MAKEFILE t
0580: 65 73 74 0a 0a 4d 61 6b 65 66 69 6c 65 73 20 67  est..Makefiles g
0590: 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20  enerated by the 
05a0: 73 71 6c 69 74 65 20 63 6f 6e 66 69 67 75 72 65  sqlite configure
05b0: 20 70 72 6f 67 72 61 6d 20 63 61 6e 6e 6f 74 20   program cannot 
05c0: 62 65 20 75 73 65 64 20 61 73 0a 74 68 65 79 20  be used as.they 
05d0: 64 6f 20 6e 6f 74 20 72 65 73 70 65 63 74 20 74  do not respect t
05e0: 68 65 20 4f 50 54 53 20 76 61 72 69 61 62 6c 65  he OPTS variable
05f0: 2e 0a 7d 0a 0a 0a 23 20 42 75 69 6c 64 20 61 20  ..}...# Build a 
0600: 74 65 73 74 66 69 78 74 75 72 65 20 65 78 65 63  testfixture exec
0610: 75 74 61 62 6c 65 20 61 6e 64 20 72 75 6e 20 71  utable and run q
0620: 75 69 63 6b 2e 74 65 73 74 20 75 73 69 6e 67 20  uick.test using 
0630: 69 74 2e 20 54 68 65 20 66 69 72 73 74 0a 23 20  it. The first.# 
0640: 70 61 72 61 6d 65 74 65 72 20 69 73 20 74 68 65  parameter is the
0650: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 69 72   name of the dir
0660: 65 63 74 6f 72 79 20 74 6f 20 63 72 65 61 74 65  ectory to create
0670: 20 61 6e 64 20 75 73 65 20 74 6f 20 72 75 6e 20   and use to run 
0680: 74 68 65 0a 23 20 74 65 73 74 20 69 6e 2e 20 54  the.# test in. T
0690: 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65  he second parame
06a0: 74 65 72 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ter is a list of
06b0: 20 4f 4d 49 54 20 73 79 6d 62 6f 6c 73 20 74 6f   OMIT symbols to
06c0: 20 64 65 66 69 6e 65 0a 23 20 77 68 65 6e 20 64   define.# when d
06d0: 6f 69 6e 67 20 73 6f 2e 20 46 6f 72 20 65 78 61  oing so. For exa
06e0: 6d 70 6c 65 3a 0a 23 0a 23 20 20 20 20 20 72 75  mple:.#.#     ru
06f0: 6e 5f 71 75 69 63 6b 5f 74 65 73 74 20 2f 74 6d  n_quick_test /tm
0700: 70 2f 74 65 73 74 64 69 72 20 7b 53 51 4c 49 54  p/testdir {SQLIT
0710: 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 53  E_OMIT_TRIGGER S
0720: 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 7d  QLITE_OMIT_VIEW}
0730: 0a 23 0a 23 0a 70 72 6f 63 20 72 75 6e 5f 71 75  .#.#.proc run_qu
0740: 69 63 6b 5f 74 65 73 74 20 7b 64 69 72 20 6f 6d  ick_test {dir om
0750: 69 74 5f 73 79 6d 62 6f 6c 5f 6c 69 73 74 7d 20  it_symbol_list} 
0760: 7b 0a 20 20 23 20 43 6f 6d 70 69 6c 65 20 74 68  {.  # Compile th
0770: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4f  e value of the O
0780: 50 54 53 20 4d 61 6b 65 66 69 6c 65 20 76 61 72  PTS Makefile var
0790: 69 61 62 6c 65 2e 0a 20 20 73 65 74 20 6f 70 74  iable..  set opt
07a0: 73 20 22 2d 44 53 51 4c 49 54 45 5f 4d 45 4d 44  s "-DSQLITE_MEMD
07b0: 45 42 55 47 3d 32 20 2d 44 53 51 4c 49 54 45 5f  EBUG=2 -DSQLITE_
07c0: 44 45 42 55 47 20 2d 44 53 51 4c 49 54 45 5f 4f  DEBUG -DSQLITE_O
07d0: 53 5f 55 4e 49 58 22 20 0a 20 20 66 6f 72 65 61  S_UNIX" .  forea
07e0: 63 68 20 73 79 6d 20 24 6f 6d 69 74 5f 73 79 6d  ch sym $omit_sym
07f0: 62 6f 6c 5f 6c 69 73 74 20 7b 0a 20 20 20 20 61  bol_list {.    a
0800: 70 70 65 6e 64 20 6f 70 74 73 20 22 20 2d 44 24  ppend opts " -D$
0810: 7b 73 79 6d 7d 3d 31 22 0a 20 20 7d 0a 0a 20 20  {sym}=1".  }..  
0820: 23 20 43 72 65 61 74 65 20 74 68 65 20 64 69 72  # Create the dir
0830: 65 63 74 6f 72 79 20 61 6e 64 20 64 6f 20 74 68  ectory and do th
0840: 65 20 62 75 69 6c 64 2e 20 49 66 20 61 6e 20 65  e build. If an e
0850: 72 72 6f 72 20 6f 63 63 75 72 73 20 72 65 74 75  rror occurs retu
0860: 72 6e 0a 20 20 23 20 65 61 72 6c 79 20 77 69 74  rn.  # early wit
0870: 68 6f 75 74 20 61 74 74 65 6d 70 74 69 6e 67 20  hout attempting 
0880: 74 6f 20 72 75 6e 20 74 68 65 20 74 65 73 74 20  to run the test 
0890: 73 75 69 74 65 2e 0a 20 20 66 69 6c 65 20 6d 6b  suite..  file mk
08a0: 64 69 72 20 24 64 69 72 0a 20 20 70 75 74 73 20  dir $dir.  puts 
08b0: 2d 6e 6f 6e 65 77 6c 69 6e 65 20 22 42 75 69 6c  -nonewline "Buil
08c0: 64 69 6e 67 20 24 64 69 72 2e 2e 2e 22 0a 20 20  ding $dir...".  
08d0: 66 6c 75 73 68 20 73 74 64 6f 75 74 0a 20 20 73  flush stdout.  s
08e0: 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 0a 20  et rc [catch {. 
08f0: 20 20 20 65 78 65 63 20 6d 61 6b 65 20 2d 43 20     exec make -C 
0900: 24 64 69 72 20 2d 66 20 24 3a 3a 4d 41 4b 45 46  $dir -f $::MAKEF
0910: 49 4c 45 20 74 65 73 74 66 69 78 74 75 72 65 20  ILE testfixture 
0920: 4f 50 54 53 3d 24 6f 70 74 73 20 3e 26 20 24 64  OPTS=$opts >& $d
0930: 69 72 2f 62 75 69 6c 64 2e 6c 6f 67 0a 20 20 7d  ir/build.log.  }
0940: 5d 0a 20 20 69 66 20 7b 24 72 63 7d 20 7b 0a 20  ].  if {$rc} {. 
0950: 20 20 20 70 75 74 73 20 22 4e 6f 20 67 6f 6f 64     puts "No good
0960: 2e 20 53 65 65 20 24 64 69 72 2f 62 75 69 6c 64  . See $dir/build
0970: 2e 6c 6f 67 2e 22 0a 20 20 20 20 72 65 74 75 72  .log.".    retur
0980: 6e 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20  n.  } else {.   
0990: 20 70 75 74 73 20 22 4f 6b 22 0a 20 20 7d 0a 20   puts "Ok".  }. 
09a0: 20 0a 20 20 23 20 43 72 65 61 74 65 20 61 6e 20   .  # Create an 
09b0: 65 6d 70 74 79 20 66 69 6c 65 20 22 24 64 69 72  empty file "$dir
09c0: 2f 73 71 6c 69 74 65 33 22 2e 20 54 68 69 73 20  /sqlite3". This 
09d0: 69 73 20 74 6f 20 74 72 69 63 6b 20 74 68 65 20  is to trick the 
09e0: 6d 61 6b 65 66 69 6c 65 20 6f 75 74 20 0a 20 20  makefile out .  
09f0: 23 20 6f 66 20 74 72 79 69 6e 67 20 74 6f 20 62  # of trying to b
0a00: 75 69 6c 64 20 74 68 65 20 73 71 6c 69 74 65 20  uild the sqlite 
0a10: 73 68 65 6c 6c 2e 20 54 68 65 20 73 71 6c 69 74  shell. The sqlit
0a20: 65 20 73 68 65 6c 6c 20 77 6f 6e 27 74 20 62 75  e shell won't bu
0a30: 69 6c 64 20 0a 20 20 23 20 77 69 74 68 20 73 6f  ild .  # with so
0a40: 6d 65 20 6f 66 20 74 68 65 20 4f 4d 49 54 20 6f  me of the OMIT o
0a50: 70 74 69 6f 6e 73 20 28 69 2e 65 20 4f 4d 49 54  ptions (i.e OMIT
0a60: 5f 43 4f 4d 50 4c 45 54 45 29 2e 0a 20 20 69 66  _COMPLETE)..  if
0a70: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20   {![file exists 
0a80: 24 64 69 72 2f 73 71 6c 69 74 65 33 5d 7d 20 7b  $dir/sqlite3]} {
0a90: 0a 20 20 20 20 73 65 74 20 77 72 20 5b 6f 70 65  .    set wr [ope
0aa0: 6e 20 24 64 69 72 2f 73 71 6c 69 74 65 33 20 77  n $dir/sqlite3 w
0ab0: 5d 0a 20 20 20 20 70 75 74 73 20 24 77 72 20 22  ].    puts $wr "
0ac0: 64 75 6d 6d 79 22 0a 20 20 20 20 63 6c 6f 73 65  dummy".    close
0ad0: 20 24 77 72 0a 20 20 7d 0a 0a 20 20 23 20 52 75   $wr.  }..  # Ru
0ae0: 6e 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  n the test suite
0af0: 2e 0a 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c  ..  puts -nonewl
0b00: 69 6e 65 20 22 54 65 73 74 69 6e 67 20 24 64 69  ine "Testing $di
0b10: 72 2e 2e 2e 22 0a 20 20 66 6c 75 73 68 20 73 74  r...".  flush st
0b20: 64 6f 75 74 0a 20 20 73 65 74 20 72 63 20 5b 63  dout.  set rc [c
0b30: 61 74 63 68 20 7b 0a 20 20 20 20 65 78 65 63 20  atch {.    exec 
0b40: 6d 61 6b 65 20 2d 43 20 24 64 69 72 20 2d 66 20  make -C $dir -f 
0b50: 24 3a 3a 4d 41 4b 45 46 49 4c 45 20 74 65 73 74  $::MAKEFILE test
0b60: 20 4f 50 54 53 3d 24 6f 70 74 73 20 3e 26 20 24   OPTS=$opts >& $
0b70: 64 69 72 2f 74 65 73 74 2e 6c 6f 67 0a 20 20 7d  dir/test.log.  }
0b80: 5d 0a 20 20 69 66 20 7b 24 72 63 7d 20 7b 0a 20  ].  if {$rc} {. 
0b90: 20 20 20 70 75 74 73 20 22 4e 6f 20 67 6f 6f 64     puts "No good
0ba0: 2e 20 53 65 65 20 24 64 69 72 2f 74 65 73 74 2e  . See $dir/test.
0bb0: 6c 6f 67 2e 22 0a 20 20 7d 20 65 6c 73 65 20 7b  log.".  } else {
0bc0: 0a 20 20 20 20 70 75 74 73 20 22 4f 6b 22 0a 20  .    puts "Ok". 
0bd0: 20 7d 0a 7d 0a 0a 0a 23 20 54 68 69 73 20 70 72   }.}...# This pr
0be0: 6f 63 20 70 72 6f 63 65 73 73 65 73 20 74 68 65  oc processes the
0bf0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70   command line op
0c00: 74 69 6f 6e 73 20 70 61 73 73 65 64 20 74 6f 20  tions passed to 
0c10: 74 68 69 73 20 73 63 72 69 70 74 2e 0a 23 20 43  this script..# C
0c20: 75 72 72 65 6e 74 6c 79 20 74 68 65 20 6f 6e 6c  urrently the onl
0c30: 79 20 6f 70 74 69 6f 6e 20 73 75 70 70 6f 72 74  y option support
0c40: 65 64 20 69 73 20 22 2d 6d 61 6b 65 66 69 6c 65  ed is "-makefile
0c50: 22 2c 20 64 65 66 61 75 6c 74 0a 23 20 22 2e 2e  ", default.# "..
0c60: 2f 4d 61 6b 65 66 69 6c 65 2e 6c 69 6e 75 78 2d  /Makefile.linux-
0c70: 67 63 63 22 2e 20 53 65 74 20 74 68 65 20 3a 3a  gcc". Set the ::
0c80: 4d 41 4b 45 46 49 4c 45 20 76 61 72 69 61 62 6c  MAKEFILE variabl
0c90: 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  e to the value o
0ca0: 66 20 74 68 69 73 0a 23 20 6f 70 74 69 6f 6e 2e  f this.# option.
0cb0: 0a 23 0a 70 72 6f 63 20 70 72 6f 63 65 73 73 5f  .#.proc process_
0cc0: 6f 70 74 69 6f 6e 73 20 7b 61 72 67 76 7d 20 7b  options {argv} {
0cd0: 0a 20 20 73 65 74 20 3a 3a 4d 41 4b 45 46 49 4c  .  set ::MAKEFIL
0ce0: 45 20 2e 2e 2f 4d 61 6b 65 66 69 6c 65 2e 6c 69  E ../Makefile.li
0cf0: 6e 75 78 2d 67 63 63 20 20 20 20 20 20 20 20 20  nux-gcc         
0d00: 20 20 20 20 20 3b 23 20 44 65 66 61 75 6c 74 20       ;# Default 
0d10: 76 61 6c 75 65 0a 20 20 66 6f 72 20 7b 73 65 74  value.  for {set
0d20: 20 69 20 30 7d 20 7b 24 69 20 3c 20 5b 6c 6c 65   i 0} {$i < [lle
0d30: 6e 67 74 68 20 24 61 72 67 76 5d 7d 20 7b 69 6e  ngth $argv]} {in
0d40: 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 77 69 74  cr i} {.    swit
0d50: 63 68 20 2d 2d 20 5b 6c 69 6e 64 65 78 20 24 61  ch -- [lindex $a
0d60: 72 67 76 20 24 69 5d 20 7b 0a 20 20 20 20 20 20  rgv $i] {.      
0d70: 2d 6d 61 6b 65 66 69 6c 65 20 7b 0a 20 20 20 20  -makefile {.    
0d80: 20 20 20 20 69 6e 63 72 20 69 0a 20 20 20 20 20      incr i.     
0d90: 20 20 20 73 65 74 20 3a 3a 4d 41 4b 45 46 49 4c     set ::MAKEFIL
0da0: 45 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 76 20  E [lindex $argv 
0db0: 24 69 5d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  $i].      }.  . 
0dc0: 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0a 20       default {. 
0dd0: 20 20 20 20 20 20 20 70 75 74 73 20 73 74 64 65         puts stde
0de0: 72 72 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  rr [string trim 
0df0: 24 3a 3a 55 53 41 47 45 5f 4d 45 53 53 41 47 45  $::USAGE_MESSAGE
0e00: 5d 0a 20 20 20 20 20 20 20 20 65 78 69 74 20 2d  ].        exit -
0e10: 31 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  1.      }.    }.
0e20: 20 20 20 20 73 65 74 20 3a 3a 4d 41 4b 45 46 49      set ::MAKEFI
0e30: 4c 45 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69  LE [file normali
0e40: 7a 65 20 24 3a 3a 4d 41 4b 45 46 49 4c 45 5d 0a  ze $::MAKEFILE].
0e50: 20 20 7d 0a 7d 0a 0a 23 20 4d 61 69 6e 20 72 6f    }.}..# Main ro
0e60: 75 74 69 6e 65 2e 0a 23 0a 0a 70 72 6f 63 20 6d  utine..#..proc m
0e70: 61 69 6e 20 7b 61 72 67 76 7d 20 7b 0a 20 20 23  ain {argv} {.  #
0e80: 20 4c 69 73 74 20 6f 66 20 53 51 4c 49 54 45 5f   List of SQLITE_
0e90: 4f 4d 49 54 5f 58 58 58 20 73 79 6d 62 6f 6c 73  OMIT_XXX symbols
0ea0: 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 53 51   supported by SQ
0eb0: 4c 69 74 65 2e 0a 20 20 73 65 74 20 3a 3a 53 59  Lite..  set ::SY
0ec0: 4d 42 4f 4c 53 20 5b 6c 69 73 74 20 20 20 20 20  MBOLS [list     
0ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
0ee0: 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41     SQLITE_OMIT_A
0ef0: 4c 54 45 52 54 41 42 4c 45 20 20 20 20 20 20 20  LTERTABLE       
0f00: 20 20 20 20 20 20 5c 0a 20 20 20 20 53 51 4c 49        \.    SQLI
0f10: 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
0f20: 41 54 49 4f 4e 20 20 20 20 20 20 20 20 20 20 5c  ATION          \
0f30: 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  .    SQLITE_OMIT
0f40: 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 20  _AUTOINCREMENT  
0f50: 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 53 51          \.    SQ
0f60: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
0f70: 43 55 55 4d 20 20 20 20 20 20 20 20 20 20 20 20  CUUM            
0f80: 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d   \.    SQLITE_OM
0f90: 49 54 5f 42 4c 4f 42 5f 4c 49 54 45 52 41 4c 20  IT_BLOB_LITERAL 
0fa0: 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
0fb0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
0fc0: 4c 45 54 45 20 20 20 20 20 20 20 20 20 20 20 20  LETE            
0fd0: 20 20 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f     \.    SQLITE_
0fe0: 4f 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45  OMIT_COMPOUND_SE
0ff0: 4c 45 43 54 20 20 20 20 20 20 20 20 5c 0a 20 20  LECT        \.  
1000: 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f    SQLITE_OMIT_CO
1010: 4e 46 4c 49 43 54 5f 43 4c 41 55 53 45 20 20 20  NFLICT_CLAUSE   
1020: 20 20 20 20 20 5c 0a 20 20 20 20 53 51 4c 49 54       \.    SQLIT
1030: 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f  E_OMIT_DATETIME_
1040: 46 55 4e 43 53 20 20 20 20 20 20 20 20 20 5c 0a  FUNCS         \.
1050: 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f      SQLITE_OMIT_
1060: 45 58 50 4c 41 49 4e 20 20 20 20 20 20 20 20 20  EXPLAIN         
1070: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 53 51 4c         \.    SQL
1080: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
1090: 47 5f 50 4f 49 4e 54 20 20 20 20 20 20 20 20 20  G_POINT         
10a0: 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49  \.    SQLITE_OMI
10b0: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 20 20  T_FOREIGN_KEY   
10c0: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 53           \.    S
10d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 43 52 42  QLITE_OMIT_INCRB
10e0: 4c 4f 42 20 20 20 20 20 20 20 20 20 20 20 20 20  LOB             
10f0: 20 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f    \.    SQLITE_O
1100: 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
1110: 45 43 4b 20 20 20 20 20 20 20 20 5c 0a 20 20 20  ECK        \.   
1120: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4d 45 4d   SQLITE_OMIT_MEM
1130: 4f 52 59 44 42 20 20 20 20 20 20 20 20 20 20 20  ORYDB           
1140: 20 20 20 20 5c 0a 20 20 20 20 53 51 4c 49 54 45      \.    SQLITE
1150: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
1160: 4d 41 53 20 20 20 20 20 20 20 20 20 20 5c 0a 20  MAS          \. 
1170: 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50     SQLITE_OMIT_P
1180: 52 41 47 4d 41 20 20 20 20 20 20 20 20 20 20 20  RAGMA           
1190: 20 20 20 20 20 20 5c 0a 20 20 20 20 53 51 4c 49        \.    SQLI
11a0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
11b0: 5f 43 41 4c 4c 42 41 43 4b 20 20 20 20 20 20 5c  _CALLBACK      \
11c0: 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  .    SQLITE_OMIT
11d0: 5f 52 45 49 4e 44 45 58 20 20 20 20 20 20 20 20  _REINDEX        
11e0: 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 53 51          \.    SQ
11f0: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
1200: 5f 50 52 41 47 4d 41 53 20 20 20 20 20 20 20 20  _PRAGMAS        
1210: 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d   \.    SQLITE_OM
1220: 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  IT_SCHEMA_VERSIO
1230: 4e 5f 50 52 41 47 4d 41 53 20 5c 0a 20 20 20 20  N_PRAGMAS \.    
1240: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
1250: 55 45 52 59 20 20 20 20 20 20 20 20 20 20 20 20  UERY            
1260: 20 20 20 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f     \.    SQLITE_
1270: 4f 4d 49 54 5f 54 43 4c 5f 56 41 52 49 41 42 4c  OMIT_TCL_VARIABL
1280: 45 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20  E           \.  
1290: 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52    SQLITE_OMIT_TR
12a0: 49 47 47 45 52 20 20 20 20 20 20 20 20 20 20 20  IGGER           
12b0: 20 20 20 20 20 5c 0a 20 20 20 20 53 51 4c 49 54       \.    SQLIT
12c0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 20 20 20  E_OMIT_UTF16    
12d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
12e0: 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f      SQLITE_OMIT_
12f0: 56 41 43 55 55 4d 20 20 20 20 20 20 20 20 20 20  VACUUM          
1300: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 53 51 4c         \.    SQL
1310: 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 20 20 20  ITE_OMIT_VIEW   
1320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1330: 5c 0a 20 20 20 20 53 51 4c 49 54 45 5f 4f 4d 49  \.    SQLITE_OMI
1340: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 20  T_VIRTUALTABLE  
1350: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 5d 0a 0a           \.  ]..
1360: 20 20 23 20 50 72 6f 63 65 73 73 20 61 6e 79 20    # Process any 
1370: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
1380: 69 6f 6e 73 2e 0a 20 20 70 72 6f 63 65 73 73 5f  ions..  process_
1390: 6f 70 74 69 6f 6e 73 20 24 61 72 67 76 0a 20 20  options $argv.  
13a0: 0a 20 20 23 20 46 69 72 73 74 20 74 72 79 20 61  .  # First try a
13b0: 20 74 65 73 74 20 77 69 74 68 20 61 6c 6c 20 4f   test with all O
13c0: 4d 49 54 20 73 79 6d 62 6f 6c 73 20 65 78 63 65  MIT symbols exce
13d0: 70 74 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  pt SQLITE_OMIT_F
13e0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 20 0a 20  LOATING_POINT . 
13f0: 20 23 20 61 6e 64 20 53 51 4c 49 54 45 5f 4f 4d   # and SQLITE_OM
1400: 49 54 5f 50 52 41 47 4d 41 20 64 65 66 69 6e 65  IT_PRAGMA define
1410: 64 2e 20 54 68 65 20 66 6f 72 6d 65 72 20 64 6f  d. The former do
1420: 65 73 6e 27 74 20 77 6f 72 6b 20 28 63 61 75 73  esn't work (caus
1430: 65 73 20 73 65 67 66 61 75 6c 74 73 29 0a 20 20  es segfaults).  
1440: 23 20 61 6e 64 20 74 68 65 20 6c 61 74 74 65 72  # and the latter
1450: 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   is currently in
1460: 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20  compatible with 
1470: 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 28  the test suite (
1480: 74 68 69 73 20 73 68 6f 75 6c 64 0a 20 20 23 20  this should.  # 
1490: 62 65 20 66 69 78 65 64 2c 20 62 75 74 20 69 74  be fixed, but it
14a0: 20 77 69 6c 6c 20 62 65 20 61 20 6c 6f 74 20 6f   will be a lot o
14b0: 66 20 77 6f 72 6b 29 2e 0a 20 20 73 65 74 20 61  f work)..  set a
14c0: 6c 6c 73 79 6d 73 20 5b 6c 69 73 74 5d 0a 20 20  llsyms [list].  
14d0: 66 6f 72 65 61 63 68 20 73 20 24 3a 3a 53 59 4d  foreach s $::SYM
14e0: 42 4f 4c 53 20 7b 0a 20 20 20 20 69 66 20 7b 24  BOLS {.    if {$
14f0: 73 21 3d 22 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  s!="SQLITE_OMIT_
1500: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 22 20  FLOATING_POINT" 
1510: 26 26 20 24 73 21 3d 22 53 51 4c 49 54 45 5f 4f  && $s!="SQLITE_O
1520: 4d 49 54 5f 50 52 41 47 4d 41 22 7d 20 7b 0a 20  MIT_PRAGMA"} {. 
1530: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 61 6c 6c       lappend all
1540: 73 79 6d 73 20 24 73 0a 20 20 20 20 7d 0a 20 20  syms $s.    }.  
1550: 7d 0a 20 20 72 75 6e 5f 71 75 69 63 6b 5f 74 65  }.  run_quick_te
1560: 73 74 20 74 65 73 74 5f 4f 4d 49 54 5f 45 56 45  st test_OMIT_EVE
1570: 52 59 54 48 49 4e 47 20 24 61 6c 6c 73 79 6d 73  RYTHING $allsyms
1580: 0a 20 20 0a 20 20 23 20 4e 6f 77 20 74 72 79 20  .  .  # Now try 
1590: 6f 6e 65 20 71 75 69 63 6b 2e 74 65 73 74 20 77  one quick.test w
15a0: 69 74 68 20 65 61 63 68 20 6f 66 20 74 68 65 20  ith each of the 
15b0: 4f 4d 49 54 20 73 79 6d 62 6f 6c 73 20 64 65 66  OMIT symbols def
15c0: 69 6e 65 64 2e 20 49 6e 63 6c 75 64 65 64 0a 20  ined. Included. 
15d0: 20 23 20 61 72 65 20 74 68 65 20 4f 4d 49 54 5f   # are the OMIT_
15e0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 20 61  FLOATING_POINT a
15f0: 6e 64 20 4f 4d 49 54 5f 50 52 41 47 4d 41 20 73  nd OMIT_PRAGMA s
1600: 79 6d 62 6f 6c 73 2c 20 65 76 65 6e 20 74 68 6f  ymbols, even tho
1610: 75 67 68 20 77 65 0a 20 20 23 20 6b 6e 6f 77 20  ugh we.  # know 
1620: 74 68 65 79 20 77 69 6c 6c 20 66 61 69 6c 2e 20  they will fail. 
1630: 49 74 27 73 20 67 6f 6f 64 20 74 6f 20 62 65 20  It's good to be 
1640: 72 65 6d 69 6e 64 65 64 20 6f 66 20 74 68 69 73  reminded of this
1650: 20 66 72 6f 6d 20 74 69 6d 65 20 74 6f 20 74 69   from time to ti
1660: 6d 65 2e 0a 20 20 66 6f 72 65 61 63 68 20 73 79  me..  foreach sy
1670: 6d 20 24 3a 3a 53 59 4d 42 4f 4c 53 20 7b 0a 20  m $::SYMBOLS {. 
1680: 20 20 20 73 65 74 20 64 69 72 6e 61 6d 65 20 22     set dirname "
1690: 74 65 73 74 5f 5b 73 74 72 69 6e 67 20 72 61 6e  test_[string ran
16a0: 67 65 20 24 73 79 6d 20 37 20 65 6e 64 5d 22 0a  ge $sym 7 end]".
16b0: 20 20 20 20 72 75 6e 5f 71 75 69 63 6b 5f 74 65      run_quick_te
16c0: 73 74 20 24 64 69 72 6e 61 6d 65 20 24 73 79 6d  st $dirname $sym
16d0: 0a 20 20 7d 0a 7d 0a 0a 6d 61 69 6e 20 24 61 72  .  }.}..main $ar
16e0: 67 76 0a                                         gv.