]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Make sure code *compiles* with each OMIT and ENABLE option. Mostly changes to test...
authorshaneh <shaneh@noemail.net>
Wed, 9 Feb 2011 19:55:20 +0000 (19:55 +0000)
committershaneh <shaneh@noemail.net>
Wed, 9 Feb 2011 19:55:20 +0000 (19:55 +0000)
FossilOrigin-Name: 7cc515edc9cade2bc6c74699b3e4153bf2b74ebb

configure [changed mode: 0755->0644]
install-sh [changed mode: 0755->0644]
manifest
manifest.uuid
src/expr.c
src/tclsqlite.c
src/test1.c
src/test_func.c
src/test_multiplex.c
tool/omittest.tcl

old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 84c755fdc6dd95d41fa90ef9860108c15af327d7..48683ea413bfb9b115421fb6777ae521139fe00c 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Do\snot\sreport\scorruption\sif\sthe\sthe\sdb\ssize\sheader\sfield\sis\sgreater\sthan\sthe\sfile\ssize\son\sdisk\sunless\sthe\stwo\schange-counter\sheader\sfields\sare\sidentical.\sFix\sfor\sticket\s[89b8c9ac54].
-D 2011-02-09T18:19:20.526
+C Make\ssure\scode\s*compiles*\swith\seach\sOMIT\sand\sENABLE\soption.\s\sMostly\schanges\sto\stest\smodules.
+D 2011-02-09T19:55:20
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 27701a1653595a1f2187dc61c8117e00a6c1d50f
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -22,7 +22,7 @@ F art/src_logo.gif 9341ef09f0e53cd44c0c9b6fc3c16f7f3d6c2ad9
 F config.guess 226d9a188c6196f3033ffc651cbc9dcee1a42977
 F config.h.in 868fdb48c028421a203470e15c69ada15b9ba673
 F config.sub 9ebe4c3b3dab6431ece34f16828b594fb420da55
-F configure c38c1947db7ed4adaed2affcb09cea9d3acd5a9a x
+F configure c38c1947db7ed4adaed2affcb09cea9d3acd5a9a
 F configure.ac 87a3c71bbe9c925381c154413eea7f3cdc397244
 F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad
 F doc/lemon.html f0f682f50210928c07e562621c3b7e8ab912a538
@@ -98,7 +98,7 @@ F ext/rtree/rtree_util.tcl 06aab2ed5b826545bf215fff90ecb9255a8647ea
 F ext/rtree/sqlite3rtree.h 1af0899c63a688e272d69d8e746f24e76f10a3f0
 F ext/rtree/tkt3363.test 142ab96eded44a3615ec79fba98c7bde7d0f96de
 F ext/rtree/viewrtree.tcl eea6224b3553599ae665b239bd827e182b466024
-F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
+F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895
 F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
 F main.mk 54190fab7cdba523e311c274c95ea480f32abfb5
 F mkdll.sh 7d09b23c05d56532e9d44a50868eb4b12ff4f74a
@@ -129,7 +129,7 @@ F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
 F src/ctime.c 7deec4534f3b5a0c3b4a4cbadf809d321f64f9c4
 F src/date.c 1548fdac51377e4e7833251de878b4058c148e1b
 F src/delete.c 7ed8a8c8b5f748ece92df173d7e0f7810c899ebd
-F src/expr.c 1810f3056b11de99cc10e24629edf00e5fbd3a75
+F src/expr.c 9b02a6dc3c7b97be01619674abebb59ed8830f1d
 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
 F src/fkey.c 17950a28f28b23e8ad3feaac5fc88c324d2f600a
 F src/func.c cb41f614edc43b00bfeb030f9768e80eaff47edd
@@ -183,8 +183,8 @@ F src/sqliteInt.h 4290fff17fabc6e07fc4338233df0e39e6350ca1
 F src/sqliteLimit.h a17dcd3fb775d63b64a43a55c54cb282f9726f44
 F src/status.c 4997380fbb915426fef9e500b4872e79c99267fc
 F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
-F src/tclsqlite.c 549859dc2c143f3deb6a92636a2d27973652c164
-F src/test1.c ddbfff546e22e5c31204c973fdd805a4eda3e208
+F src/tclsqlite.c 879bf8a23d99fc0e99d9177fe1b48896bc796d65
+F src/test1.c 9020310c7617234b33fd1c3064f89524db25f290
 F src/test2.c 80d323d11e909cf0eb1b6fbb4ac22276483bcf31
 F src/test3.c 056093cfef69ff4227a6bdb9108564dc7f45e4bc
 F src/test4.c 0528360b5025688002a5feb6be906ddce52eaaee
@@ -200,7 +200,7 @@ F src/test_btree.c 47cd771250f09cdc6e12dda5bc71bc0b3abc96e2
 F src/test_config.c 9f025a7f3686c94e82dc6d6bd3cbf0f89cd67487
 F src/test_demovfs.c 0aed671636735116fc872c5b03706fd5612488b5
 F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc
-F src/test_func.c 13b582345fb1185a93e46c53310fae8547dcce20
+F src/test_func.c cbdec5cededa0761daedde5baf06004a9bf416b5
 F src/test_hexio.c 1237f000ec7a491009b1233f5c626ea71bce1ea2
 F src/test_init.c 5d624ffd0409d424cf9adbfe1f056b200270077c
 F src/test_intarray.c d879bbf8e4ce085ab966d1f3c896a7c8b4f5fc99
@@ -208,7 +208,7 @@ F src/test_intarray.h 489edb9068bb926583445cb02589344961054207
 F src/test_journal.c 785edd54f963aefb3c1628124170a56697c68c70
 F src/test_loadext.c df586c27176e3c2cb2e099c78da67bf14379a56e
 F src/test_malloc.c fd6188b1501c0010fb4241ddc9f0d5ac402c688d
-F src/test_multiplex.c 5990431a852aa21c9a67da748f23d2cf1e21f8fc
+F src/test_multiplex.c 655cb3b663f87db7d3d2427ea127c9daacae4abc
 F src/test_mutex.c a6bd7b9cf6e19d989e31392b06ac8d189f0d573e
 F src/test_onefile.c 40cf9e212a377a6511469384a64b01e6e34b2eec
 F src/test_osinst.c f408c6a181f2fb04c56273afd5c3e1e82f60392c
@@ -886,7 +886,7 @@ F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97
 F tool/mksqlite3c.tcl cf44512a48112b1ba09590548660a5a6877afdb3
 F tool/mksqlite3h.tcl d76c226a5e8e1f3b5f6593bcabe5e98b3b1ec9ff
 F tool/mksqlite3internalh.tcl 7b43894e21bcb1bb39e11547ce7e38a063357e87
-F tool/omittest.tcl 27d6f6e3b1e95aeb26a1c140e6eb57771c6d794a
+F tool/omittest.tcl 71c6f21afa2df91dd299ed317d5751fb628795fe
 F tool/opcodeDoc.awk b3a2a3d5d3075b8bd90b7afe24283efdd586659c
 F tool/restore_jrnl.tcl 6957a34f8f1f0f8285e07536225ec3b292a9024a
 F tool/shell1.test f608a009b04c490fd360c5ded458a6f98b4e7ec4
@@ -906,7 +906,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 38b7cb33c55c1498618721b3a11a35559b755fb2
-R c96c132b43022b566b312ce11044abe1
-U dan
-Z 97626d5db63dee29501d14b760c6105d
+P 00c4596f0b270120848ab8d06dcdec7813a9a315
+R 49290511d1319608c18e9f8e70116a97
+U shaneh
+Z 9431f3ee59a677605bc0096e96d777c4
index 7c63783742abe268eb20637ee60017a900b7af55..753b7b8912701be56bda64cb026385648bbaf0bb 100644 (file)
@@ -1 +1 @@
-00c4596f0b270120848ab8d06dcdec7813a9a315
\ No newline at end of file
+7cc515edc9cade2bc6c74699b3e4153bf2b74ebb
\ No newline at end of file
index b902f451c4e2993b480eb1e2dc9c27c28b961ee1..8c68d9d658e78e280e6e827d890a91f200c76c8b 100644 (file)
@@ -3251,6 +3251,7 @@ void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
       exprCodeBetween(pParse, pExpr, dest, 1, jumpIfNull);
       break;
     }
+#ifndef SQLITE_OMIT_SUBQUERY\r
     case TK_IN: {
       int destIfFalse = sqlite3VdbeMakeLabel(v);
       int destIfNull = jumpIfNull ? dest : destIfFalse;
@@ -3259,6 +3260,7 @@ void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
       sqlite3VdbeResolveLabel(v, destIfFalse);
       break;
     }
+#endif
     default: {
       r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
       sqlite3VdbeAddOp3(v, OP_If, r1, dest, jumpIfNull!=0);
@@ -3392,6 +3394,7 @@ void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
       exprCodeBetween(pParse, pExpr, dest, 0, jumpIfNull);
       break;
     }
+#ifndef SQLITE_OMIT_SUBQUERY\r
     case TK_IN: {
       if( jumpIfNull ){
         sqlite3ExprCodeIN(pParse, pExpr, dest, dest);
@@ -3402,6 +3405,7 @@ void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
       }
       break;
     }
+#endif
     default: {
       r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
       sqlite3VdbeAddOp3(v, OP_IfNot, r1, dest, jumpIfNull!=0);
index 99939c1f262262646c5a4632e30cbd841fa7473f..57f38d78d165b1966fad76a5d993607b7416f3e1 100644 (file)
@@ -2468,7 +2468,7 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
       }else{
         pDb->zProfile = 0;
       }
-#ifndef SQLITE_OMIT_TRACE
+#if !defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_OMIT_FLOATING_POINT)
       if( pDb->zProfile ){
         pDb->interp = interp;
         sqlite3_profile(pDb->db, DbProfileHandler, pDb);
@@ -2652,7 +2652,7 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
       }else{
         pDb->zTrace = 0;
       }
-#ifndef SQLITE_OMIT_TRACE
+#if !defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_OMIT_FLOATING_POINT)
       if( pDb->zTrace ){
         pDb->interp = interp;
         sqlite3_trace(pDb->db, DbTraceHandler, pDb);
index 7f09b292945489cd59f62efef2d934622d26323f..852ecdecc728d3eaf8e86671df97cfbe01e9d38a 100644 (file)
@@ -5641,7 +5641,9 @@ int Sqlitetest1_Init(Tcl_Interp *interp){
      { "sqlite3_wal_checkpoint",   test_wal_checkpoint, 0  },
      { "sqlite3_wal_checkpoint_v2",test_wal_checkpoint_v2, 0  },
      { "test_sqlite3_log",         test_sqlite3_log, 0  },
+#ifndef SQLITE_OMIT_EXPLAIN
      { "print_explain_query_plan", test_print_eqp, 0  },
+#endif
   };
   static int bitmask_size = sizeof(Bitmask)*8;
   int i;
index c3277a06ca6d957751fb90f20806ab3fcb8a3c30..a123943425e7e00b686a0ffb3ac77d6f3a607767 100644 (file)
@@ -149,8 +149,13 @@ static void test_destructor_count(
 ** arguments. It returns the text value returned by the sqlite3_errmsg16()
 ** API function.
 */
+#ifndef SQLITE_OMIT_BUILTIN_TEST\r
 void sqlite3BeginBenignMalloc(void);
 void sqlite3EndBenignMalloc(void);
+#else\r
+  #define sqlite3BeginBenignMalloc()\r
+  #define sqlite3EndBenignMalloc()\r
+#endif\r
 static void test_agg_errmsg16_step(sqlite3_context *a, int b,sqlite3_value **c){
 }
 static void test_agg_errmsg16_final(sqlite3_context *ctx){
index fc0d60d5d50561a6be2ddaa6fd07fde2f3a578cf..72a71621b4abc3d75cbed322a15c73a4d207e15d 100644 (file)
 #include <assert.h>
 #include "sqliteInt.h"
 
+/*
+** For a build without mutexes, no-op the mutex calls.
+*/
+#if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE==0
+#define sqlite3_mutex_alloc(X)    ((sqlite3_mutex*)8)
+#define sqlite3_mutex_free(X)
+#define sqlite3_mutex_enter(X)
+#define sqlite3_mutex_try(X)      SQLITE_OK
+#define sqlite3_mutex_leave(X)
+#define sqlite3_mutex_held(X)     ((void)(X),1)
+#define sqlite3_mutex_notheld(X)  ((void)(X),1)
+#endif /* SQLITE_THREADSAFE==0 */
+
+
 /************************ Shim Definitions ******************************/
 
 /* This is the limit on the chunk size.  It may be changed by calling
@@ -64,7 +78,7 @@ typedef struct multiplexConn multiplexConn;
 */
 struct multiplexGroup {
   sqlite3_file **pReal;            /* Handles to each chunk */
-  char *bOpen;                     /* 0 if chunk not opened */
+  char *bOpen;                     /* array of bools - 0 if chunk not opened */
   char *zName;                     /* Base filename of this group */
   int nName;                       /* Length of base filename */
   int flags;                       /* Flags used for original opening */
index ec1508c23910e823b1f91dc6cc55c96a49d3692e..e03c48690cc0d21faece3c9fb54bc5858ad12a46 100644 (file)
@@ -8,10 +8,12 @@ This Tcl script is used to test the various compile time options
 available for omitting code (the SQLITE_OMIT_xxx options). It
 should be invoked as follows:
 
-    <script> ?-makefile PATH-TO-MAKEFILE?
+    <script> ?-makefile PATH-TO-MAKEFILE? ?-skip_run?
 
 The default value for ::MAKEFILE is "../Makefile.linux.gcc".
 
+If -skip_run option is given then only the compile part is attempted.
+
 This script builds the testfixture program and runs the SQLite test suite
 once with each SQLITE_OMIT_ option defined and then once with all options
 defined together. Each run is performed in a seperate directory created
@@ -46,10 +48,12 @@ they do not respect the OPTS variable.
 #
 #
 proc run_quick_test {dir omit_symbol_list} {
+  set target "testfixture"
   # Compile the value of the OPTS Makefile variable.
   set opts "-DSQLITE_MEMDEBUG -DSQLITE_DEBUG -DSQLITE_NO_SYNC" 
   if {$::tcl_platform(platform)=="windows"} {
     append opts " -DSQLITE_OS_WIN=1"
+    set target "testfixture.exe"
   } elseif {$::tcl_platform(platform)=="os2"} {
     append opts " -DSQLITE_OS_OS2=1"
   } else {
@@ -69,7 +73,7 @@ catch {
   file copy -force ./libtool $dir
 }
   set rc [catch {
-    exec make -C $dir -f $::MAKEFILE testfixture OPTS=$opts >& $dir/build.log
+    exec make -C $dir -f $::MAKEFILE $target OPTS=$opts >& $dir/build.log
   }]
   if {$rc} {
     puts "No good. See $dir/build.log."
@@ -91,16 +95,20 @@ catch {
     close $wr
   }
 
-  # Run the test suite.
-  puts -nonewline "Testing $dir..."
-  flush stdout
-  set rc [catch {
-    exec make -C $dir -f $::MAKEFILE test OPTS=$opts >& $dir/test.log
-  }]
-  if {$rc} {
-    puts "No good. See $dir/test.log."
+  if {$::SKIP_RUN} {
+      puts "Skip testing $dir."
   } else {
-    puts "Ok"
+    # Run the test suite.
+    puts -nonewline "Testing $dir..."
+    flush stdout
+    set rc [catch {
+      exec make -C $dir -f $::MAKEFILE test OPTS=$opts >& $dir/test.log
+    }]
+    if {$rc} {
+      puts "No good. See $dir/test.log."
+    } else {
+      puts "Ok"
+    }
   }
 }
 
@@ -112,10 +120,12 @@ catch {
 #
 proc process_options {argv} {
   if {$::tcl_platform(platform)=="windows" || $::tcl_platform(platform)=="os2"} {
-      set ::MAKEFILE ../Makefile                        ;# Default value
+      set ::MAKEFILE ./Makefile                         ;# Default value
   } else {
-      set ::MAKEFILE ../Makefile.linux-gcc              ;# Default value
+      set ::MAKEFILE ./Makefile.linux-gcc               ;# Default value
   }
+  set ::SKIP_RUN 0                                      ;# Default to attempt test
+
   for {set i 0} {$i < [llength $argv]} {incr i} {
     switch -- [lindex $argv $i] {
       -makefile {
@@ -123,6 +133,11 @@ proc process_options {argv} {
         set ::MAKEFILE [lindex $argv $i]
       }
   
+      -skip_run {
+        incr i
+        set ::SKIP_RUN 1
+      }
+
       default {
         puts stderr [string trim $::USAGE_MESSAGE]
         exit -1
@@ -137,67 +152,100 @@ proc process_options {argv} {
 
 proc main {argv} {
   # List of SQLITE_OMIT_XXX symbols supported by SQLite.
-  set ::SYMBOLS [list                  \
-    SQLITE_OMIT_ALTERTABLE             \
-    SQLITE_OMIT_ANALYZE                \
-    SQLITE_OMIT_ATTACH                 \
-    SQLITE_OMIT_AUTHORIZATION          \
-    SQLITE_OMIT_AUTOINCREMENT          \
-    SQLITE_OMIT_AUTOINIT               \
-    SQLITE_OMIT_AUTOVACUUM             \
-    SQLITE_OMIT_BETWEEN_OPTIMIZATION   \
-    SQLITE_OMIT_BLOB_LITERAL           \
-    SQLITE_OMIT_BUILTIN_TEST           \
-    SQLITE_OMIT_CAST                   \
-    SQLITE_OMIT_CHECK                  \
-    SQLITE_OMIT_COMPLETE               \
-    SQLITE_OMIT_COMPOUND_SELECT        \
-    SQLITE_OMIT_CONFLICT_CLAUSE        \
-    SQLITE_OMIT_DATETIME_FUNCS         \
-    SQLITE_OMIT_DECLTYPE               \
-    off_SQLITE_OMIT_DISKIO                 \
-    SQLITE_OMIT_EXPLAIN                \
-    SQLITE_OMIT_FLAG_PRAGMAS           \
-    SQLITE_OMIT_FLOATING_POINT         \
-    SQLITE_OMIT_FOREIGN_KEY            \
-    SQLITE_OMIT_GET_TABLE              \
-    SQLITE_OMIT_GLOBALRECOVER          \
-    SQLITE_OMIT_INCRBLOB               \
-    SQLITE_OMIT_INTEGRITY_CHECK        \
-    SQLITE_OMIT_LIKE_OPTIMIZATION      \
-    SQLITE_OMIT_LOAD_EXTENSION         \
-    SQLITE_OMIT_LOCALTIME              \
-    SQLITE_OMIT_MEMORYDB               \
-    SQLITE_OMIT_OR_OPTIMIZATION        \
-    SQLITE_OMIT_PAGER_PRAGMAS          \
-    SQLITE_OMIT_PRAGMA                 \
-    SQLITE_OMIT_PROGRESS_CALLBACK      \
-    SQLITE_OMIT_QUICKBALANCE           \
-    SQLITE_OMIT_REINDEX                \
-    SQLITE_OMIT_SCHEMA_PRAGMAS         \
+  set ::OMIT_SYMBOLS [list \
+    SQLITE_OMIT_ALTERTABLE \
+    SQLITE_OMIT_ANALYZE \
+    SQLITE_OMIT_ATTACH \
+    SQLITE_OMIT_AUTHORIZATION \
+    SQLITE_OMIT_AUTOINCREMENT \
+    SQLITE_OMIT_AUTOINIT \
+    SQLITE_OMIT_AUTOMATIC_INDEX \
+    SQLITE_OMIT_AUTORESET \
+    SQLITE_OMIT_AUTOVACUUM \
+    SQLITE_OMIT_BETWEEN_OPTIMIZATION \
+    SQLITE_OMIT_BLOB_LITERAL \
+    SQLITE_OMIT_BTREECOUNT \
+    SQLITE_OMIT_BUILTIN_TEST \
+    SQLITE_OMIT_CAST \
+    SQLITE_OMIT_CHECK \
+    SQLITE_OMIT_COMPILEOPTION_DIAGS \
+    SQLITE_OMIT_COMPLETE \
+    SQLITE_OMIT_COMPOUND_SELECT \
+    SQLITE_OMIT_DATETIME_FUNCS \
+    SQLITE_OMIT_DECLTYPE \
+    SQLITE_OMIT_DEPRECATED \
+    xxxSQLITE_OMIT_DISKIO \
+    SQLITE_OMIT_EXPLAIN \
+    SQLITE_OMIT_FLAG_PRAGMAS \
+    SQLITE_OMIT_FLOATING_POINT \
+    SQLITE_OMIT_FOREIGN_KEY \
+    SQLITE_OMIT_GET_TABLE \
+    SQLITE_OMIT_INCRBLOB \
+    SQLITE_OMIT_INTEGRITY_CHECK \
+    SQLITE_OMIT_LIKE_OPTIMIZATION \
+    SQLITE_OMIT_LOAD_EXTENSION \
+    SQLITE_OMIT_LOCALTIME \
+    SQLITE_OMIT_LOOKASIDE \
+    SQLITE_OMIT_MEMORYDB \
+    SQLITE_OMIT_OR_OPTIMIZATION \
+    SQLITE_OMIT_PAGER_PRAGMAS \
+    SQLITE_OMIT_PRAGMA \
+    SQLITE_OMIT_PROGRESS_CALLBACK \
+    SQLITE_OMIT_QUICKBALANCE \
+    SQLITE_OMIT_REINDEX \
+    SQLITE_OMIT_SCHEMA_PRAGMAS \
     SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS \
-    SQLITE_OMIT_SHARED_CACHE           \
-    SQLITE_OMIT_SUBQUERY               \
-    SQLITE_OMIT_TCL_VARIABLE           \
-    SQLITE_OMIT_TEMPDB                 \
-    SQLITE_OMIT_TRACE                  \
-    SQLITE_OMIT_TRIGGER                \
-    SQLITE_OMIT_UTF16                  \
-    SQLITE_OMIT_VACUUM                 \
-    SQLITE_OMIT_VIEW                   \
-    SQLITE_OMIT_VIRTUALTABLE           \
-    SQLITE_OMIT_XFER_OPT               \
+    SQLITE_OMIT_SHARED_CACHE \
+    SQLITE_OMIT_SUBQUERY \
+    SQLITE_OMIT_TCL_VARIABLE \
+    SQLITE_OMIT_TEMPDB \
+    SQLITE_OMIT_TRACE \
+    SQLITE_OMIT_TRIGGER \
+    SQLITE_OMIT_TRUNCATE_OPTIMIZATION \
+    SQLITE_OMIT_UTF16 \
+    SQLITE_OMIT_VACUUM \
+    SQLITE_OMIT_VIEW \
+    SQLITE_OMIT_VIRTUALTABLE \
+    SQLITE_OMIT_WAL \
+    SQLITE_OMIT_WSD \
+    SQLITE_OMIT_XFER_OPT \
+  ]
+
+  set ::ENABLE_SYMBOLS [list \
+    SQLITE_DISABLE_DIRSYNC \
+    SQLITE_DISABLE_LFS \
+    SQLITE_ENABLE_ATOMIC_WRITE \
+    xxxSQLITE_ENABLE_CEROD \
+    SQLITE_ENABLE_COLUMN_METADATA \
+    SQLITE_ENABLE_EXPENSIVE_ASSERT \
+    xxxSQLITE_ENABLE_FTS1 \
+    xxxSQLITE_ENABLE_FTS2 \
+    SQLITE_ENABLE_FTS3 \
+    SQLITE_ENABLE_FTS3_PARENTHESIS \
+    SQLITE_ENABLE_FTS4 \
+    xxxSQLITE_ENABLE_ICU \
+    SQLITE_ENABLE_IOTRACE \
+    SQLITE_ENABLE_LOAD_EXTENSION \
+    SQLITE_ENABLE_LOCKING_STYLE \
+    SQLITE_ENABLE_MEMORY_MANAGEMENT \
+    SQLITE_ENABLE_MEMSYS3 \
+    SQLITE_ENABLE_MEMSYS5 \
+    SQLITE_ENABLE_OVERSIZE_CELL_CHECK \
+    SQLITE_ENABLE_RTREE \
+    SQLITE_ENABLE_STAT2 \
+    SQLITE_ENABLE_UNLOCK_NOTIFY \
+    SQLITE_ENABLE_UPDATE_DELETE_LIMIT \
   ]
 
   # Process any command line options.
   process_options $argv
-  
+
   # First try a test with all OMIT symbols except SQLITE_OMIT_FLOATING_POINT 
   # and SQLITE_OMIT_PRAGMA defined. The former doesn't work (causes segfaults)
   # and the latter is currently incompatible with the test suite (this should
   # be fixed, but it will be a lot of work).
   set allsyms [list]
-  foreach s $::SYMBOLS {
+  foreach s $::OMIT_SYMBOLS {
     if {$s!="SQLITE_OMIT_FLOATING_POINT" && $s!="SQLITE_OMIT_PRAGMA"} {
       lappend allsyms $s
     }
@@ -207,7 +255,14 @@ proc main {argv} {
   # Now try one quick.test with each of the OMIT symbols defined. Included
   # are the OMIT_FLOATING_POINT and OMIT_PRAGMA symbols, even though we
   # know they will fail. It's good to be reminded of this from time to time.
-  foreach sym $::SYMBOLS {
+  foreach sym $::OMIT_SYMBOLS {
+    set dirname "test_[string range $sym 7 end]"
+    run_quick_test $dirname $sym
+  }
+
+  # Try the ENABLE/DISABLE symbols one at a time.  
+  # We don't do them all at once since some are conflicting.
+  foreach sym $::ENABLE_SYMBOLS {
     set dirname "test_[string range $sym 7 end]"
     run_quick_test $dirname $sym
   }