Index: third_party/sqlite/sqlite-src-3080704/test/releasetest.tcl |
diff --git a/third_party/sqlite/sqlite-src-3080704/test/releasetest.tcl b/third_party/sqlite/sqlite-src-3080704/test/releasetest.tcl |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d2a1bd2bb0c54606a3c0d655ae82eaff0d9b49b2 |
--- /dev/null |
+++ b/third_party/sqlite/sqlite-src-3080704/test/releasetest.tcl |
@@ -0,0 +1,386 @@ |
+ |
+set rcsid {$Id: $} |
+ |
+# Documentation for this script. This may be output to stderr |
+# if the script is invoked incorrectly. See the [process_options] |
+# proc below. |
+# |
+set ::USAGE_MESSAGE { |
+This Tcl script is used to test the various configurations required |
+before releasing a new version. Supported command line options (all |
+optional) are: |
+ |
+ -makefile PATH-TO-MAKEFILE (default "releasetest.mk") |
+ -platform PLATFORM (see below) |
+ -quick BOOLEAN (default "0") |
+ -config CONFIGNAME (Run only CONFIGNAME) |
+ |
+The default value for -makefile is "./releasetest.mk". |
+ |
+The script determines the default value for -platform using the |
+$tcl_platform(os) and $tcl_platform(machine) variables. Supported |
+platforms are "Linux-x86", "Linux-x86_64" and "Darwin-i386". |
+ |
+If the -quick option is set to true, then the "veryquick.test" script |
+is run for all compilation configurations. Otherwise, sometimes "all.test" |
+is run, sometimes "veryquick.test". |
+ |
+Almost any SQLite makefile (except those generated by configure - see below) |
+should work. The following properties are required: |
+ |
+ * The makefile should support the "fulltest" target. |
+ * The makefile should support the variable "OPTS" as a way to pass |
+ options from the make command line to lemon and the C compiler. |
+ |
+More precisely, the following invocation must be supported: |
+ |
+ make -f $::MAKEFILE fulltest OPTS="-DSQLITE_SECURE_DELETE=1 -DSQLITE_DEBUG=1" |
+ |
+Makefiles generated by the sqlite configure program cannot be used as |
+they do not respect the OPTS variable. |
+ |
+Example Makefile contents: |
+ |
+ ######################################################## |
+ TOP=/home/dan/work/sqlite/sqlite |
+ |
+ TCL_FLAGS=-I/home/dan/tcl/include |
+ LIBTCL=-L/home/dan/tcl/lib -ltcl |
+ |
+ BCC = gcc |
+ TCC = gcc -ansi -g $(CFLAGS) |
+ NAWK = awk |
+ AR = ar cr |
+ RANLIB = ranlib |
+ THREADLIB = -lpthread -ldl |
+ include $(TOP)/main.mk |
+ ######################################################## |
+} |
+ |
+array set ::Configs { |
+ "Default" { |
+ -O2 |
+ } |
+ "Ftrapv" { |
+ -O2 -ftrapv |
+ -DSQLITE_MAX_ATTACHED=55 |
+ -DSQLITE_TCL_DEFAULT_FULLMUTEX=1 |
+ } |
+ "Unlock-Notify" { |
+ -O2 |
+ -DSQLITE_ENABLE_UNLOCK_NOTIFY |
+ -DSQLITE_THREADSAFE |
+ -DSQLITE_TCL_DEFAULT_FULLMUTEX=1 |
+ } |
+ "Secure-Delete" { |
+ -O2 |
+ -DSQLITE_SECURE_DELETE=1 |
+ -DSQLITE_SOUNDEX=1 |
+ } |
+ "Update-Delete-Limit" { |
+ -O2 |
+ -DSQLITE_DEFAULT_FILE_FORMAT=4 |
+ -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1 |
+ } |
+ "Check-Symbols" { |
+ -DSQLITE_MEMDEBUG=1 |
+ -DSQLITE_ENABLE_FTS3_PARENTHESIS=1 |
+ -DSQLITE_ENABLE_FTS3=1 |
+ -DSQLITE_ENABLE_RTREE=1 |
+ -DSQLITE_ENABLE_MEMSYS5=1 |
+ -DSQLITE_ENABLE_MEMSYS3=1 |
+ -DSQLITE_ENABLE_COLUMN_METADATA=1 |
+ -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1 |
+ -DSQLITE_SECURE_DELETE=1 |
+ -DSQLITE_SOUNDEX=1 |
+ -DSQLITE_ENABLE_ATOMIC_WRITE=1 |
+ -DSQLITE_ENABLE_IOTRACE=1 |
+ -DSQLITE_ENABLE_MEMORY_MANAGEMENT=1 |
+ -DSQLITE_ENABLE_OVERSIZE_CELL_CHECK=1 |
+ } |
+ "Debug-One" { |
+ -O2 |
+ -DSQLITE_DEBUG=1 |
+ -DSQLITE_MEMDEBUG=1 |
+ -DSQLITE_MUTEX_NOOP=1 |
+ -DSQLITE_TCL_DEFAULT_FULLMUTEX=1 |
+ -DSQLITE_ENABLE_FTS3=1 |
+ -DSQLITE_ENABLE_RTREE=1 |
+ -DSQLITE_ENABLE_MEMSYS5=1 |
+ -DSQLITE_ENABLE_MEMSYS3=1 |
+ -DSQLITE_ENABLE_COLUMN_METADATA=1 |
+ } |
+ "Device-One" { |
+ -O2 |
+ -DSQLITE_DEBUG=1 |
+ -DSQLITE_DEFAULT_AUTOVACUUM=1 |
+ -DSQLITE_DEFAULT_CACHE_SIZE=64 |
+ -DSQLITE_DEFAULT_PAGE_SIZE=1024 |
+ -DSQLITE_DEFAULT_TEMP_CACHE_SIZE=32 |
+ -DSQLITE_DISABLE_LFS=1 |
+ -DSQLITE_ENABLE_ATOMIC_WRITE=1 |
+ -DSQLITE_ENABLE_IOTRACE=1 |
+ -DSQLITE_ENABLE_MEMORY_MANAGEMENT=1 |
+ -DSQLITE_MAX_PAGE_SIZE=4096 |
+ -DSQLITE_OMIT_LOAD_EXTENSION=1 |
+ -DSQLITE_OMIT_PROGRESS_CALLBACK=1 |
+ -DSQLITE_OMIT_VIRTUALTABLE=1 |
+ -DSQLITE_TEMP_STORE=3 |
+ } |
+ "Device-Two" { |
+ -DSQLITE_4_BYTE_ALIGNED_MALLOC=1 |
+ -DSQLITE_DEFAULT_AUTOVACUUM=1 |
+ -DSQLITE_DEFAULT_CACHE_SIZE=1000 |
+ -DSQLITE_DEFAULT_LOCKING_MODE=0 |
+ -DSQLITE_DEFAULT_PAGE_SIZE=1024 |
+ -DSQLITE_DEFAULT_TEMP_CACHE_SIZE=1000 |
+ -DSQLITE_DISABLE_LFS=1 |
+ -DSQLITE_ENABLE_FTS3=1 |
+ -DSQLITE_ENABLE_MEMORY_MANAGEMENT=1 |
+ -DSQLITE_ENABLE_RTREE=1 |
+ -DSQLITE_MAX_COMPOUND_SELECT=50 |
+ -DSQLITE_MAX_PAGE_SIZE=32768 |
+ -DSQLITE_OMIT_TRACE=1 |
+ -DSQLITE_TEMP_STORE=3 |
+ -DSQLITE_THREADSAFE=2 |
+ } |
+ "Locking-Style" { |
+ -O2 |
+ -DSQLITE_ENABLE_LOCKING_STYLE=1 |
+ } |
+ "OS-X" { |
+ -DSQLITE_OMIT_LOAD_EXTENSION=1 |
+ -DSQLITE_DEFAULT_MEMSTATUS=0 |
+ -DSQLITE_THREADSAFE=2 |
+ -DSQLITE_OS_UNIX=1 |
+ -DSQLITE_ENABLE_LOCKING_STYLE=1 |
+ -DUSE_PREAD=1 |
+ -DSQLITE_ENABLE_RTREE=1 |
+ -DSQLITE_ENABLE_FTS3=1 |
+ -DSQLITE_ENABLE_FTS3_PARENTHESIS=1 |
+ -DSQLITE_DEFAULT_CACHE_SIZE=1000 |
+ -DSQLITE_MAX_LENGTH=2147483645 |
+ -DSQLITE_MAX_VARIABLE_NUMBER=500000 |
+ -DSQLITE_DEBUG=1 |
+ -DSQLITE_PREFER_PROXY_LOCKING=1 |
+ } |
+ "Extra-Robustness" { |
+ -DSQLITE_ENABLE_OVERSIZE_CELL_CHECK=1 |
+ -DSQLITE_MAX_ATTACHED=62 |
+ } |
+ "Devkit" { |
+ -DSQLITE_DEFAULT_FILE_FORMAT=4 |
+ -DSQLITE_MAX_ATTACHED=30 |
+ -DSQLITE_ENABLE_COLUMN_METADATA |
+ -DSQLITE_ENABLE_FTS4 |
+ -DSQLITE_ENABLE_FTS4_PARENTHESIS |
+ -DSQLITE_DISABLE_FTS4_DEFERRED |
+ -DSQLITE_ENABLE_RTREE |
+ } |
+ |
+ "No-lookaside" { |
+ -DSQLITE_TEST_REALLOC_STRESS=1 |
+ -DSQLITE_OMIT_LOOKASIDE=1 |
+ -DHAVE_USLEEP=1 |
+ } |
+} |
+ |
+array set ::Platforms { |
+ Linux-x86_64 { |
+ "Check-Symbols" checksymbols |
+ "Debug-One" test |
+ "Secure-Delete" test |
+ "Unlock-Notify" "QUICKTEST_INCLUDE=notify2.test test" |
+ "Update-Delete-Limit" test |
+ "Extra-Robustness" test |
+ "Device-Two" test |
+ "Ftrapv" test |
+ "No-lookaside" test |
+ "Devkit" test |
+ "Default" "threadtest fulltest" |
+ "Device-One" fulltest |
+ } |
+ Linux-i686 { |
+ "Devkit" test |
+ "Unlock-Notify" "QUICKTEST_INCLUDE=notify2.test test" |
+ "Device-One" test |
+ "Device-Two" test |
+ "Default" "threadtest fulltest" |
+ } |
+ Darwin-i386 { |
+ "Locking-Style" test |
+ "OS-X" "threadtest fulltest" |
+ } |
+} |
+ |
+ |
+# End of configuration section. |
+######################################################################### |
+######################################################################### |
+ |
+foreach {key value} [array get ::Platforms] { |
+ foreach {v t} $value { |
+ if {0==[info exists ::Configs($v)]} { |
+ puts stderr "No such configuration: \"$v\"" |
+ exit -1 |
+ } |
+ } |
+} |
+ |
+proc run_test_suite {name testtarget config} { |
+ |
+ # Tcl variable $opts is used to build up the value used to set the |
+ # OPTS Makefile variable. Variable $cflags holds the value for |
+ # CFLAGS. The makefile will pass OPTS to both gcc and lemon, but |
+ # CFLAGS is only passed to gcc. |
+ # |
+ set cflags "" |
+ set opts "" |
+ foreach arg $config { |
+ if {[string match -D* $arg]} { |
+ lappend opts $arg |
+ } else { |
+ lappend cflags $arg |
+ } |
+ } |
+ |
+ set cflags [join $cflags " "] |
+ set opts [join $opts " "] |
+ append opts " -DSQLITE_NO_SYNC=1 -DHAVE_USLEEP" |
+ |
+ # Set the sub-directory to use. |
+ # |
+ set dir [string tolower [string map {- _ " " _} $name]] |
+ |
+ if {$::tcl_platform(platform)=="windows"} { |
+ append opts " -DSQLITE_OS_WIN=1" |
+ } else { |
+ append opts " -DSQLITE_OS_UNIX=1" |
+ } |
+ |
+ # Run the test. |
+ # |
+ set makefile [file normalize $::MAKEFILE] |
+ file mkdir $dir |
+ puts -nonewline "Testing configuration \"$name\" (logfile=$dir/test.log)..." |
+ flush stdout |
+ |
+ set makecmd [concat \ |
+ [list exec make -C $dir -f $makefile clean] \ |
+ $testtarget \ |
+ [list CFLAGS=$cflags OPTS=$opts >& $dir/test.log] \ |
+ ] |
+ |
+ set tm1 [clock seconds] |
+ set rc [catch $makecmd] |
+ set tm2 [clock seconds] |
+ |
+ set minutes [expr {($tm2-$tm1)/60}] |
+ set seconds [expr {($tm2-$tm1)%60}] |
+ puts -nonewline [format " (%d:%.2d) " $minutes $seconds] |
+ if {$rc} { |
+ puts "FAILED." |
+ } else { |
+ puts "Ok." |
+ } |
+} |
+ |
+ |
+# This proc processes the command line options passed to this script. |
+# Currently the only option supported is "-makefile", default |
+# "releasetest.mk". Set the ::MAKEFILE variable to the value of this |
+# option. |
+# |
+proc process_options {argv} { |
+ set ::MAKEFILE releasetest.mk ;# Default value |
+ set ::QUICK 0 ;# Default value |
+ set config {} |
+ set platform $::tcl_platform(os)-$::tcl_platform(machine) |
+ |
+ for {set i 0} {$i < [llength $argv]} {incr i} { |
+ switch -- [lindex $argv $i] { |
+ -makefile { |
+ incr i |
+ set ::MAKEFILE [lindex $argv $i] |
+ } |
+ |
+ -platform { |
+ incr i |
+ set platform [lindex $argv $i] |
+ } |
+ |
+ -quick { |
+ incr i |
+ set ::QUICK [lindex $argv $i] |
+ } |
+ |
+ -config { |
+ incr i |
+ set config [lindex $argv $i] |
+ } |
+ |
+ default { |
+ puts stderr "" |
+ puts stderr [string trim $::USAGE_MESSAGE] |
+ exit -1 |
+ } |
+ } |
+ } |
+ |
+ set ::MAKEFILE [file normalize $::MAKEFILE] |
+ |
+ if {0==[info exists ::Platforms($platform)]} { |
+ puts "Unknown platform: $platform" |
+ puts -nonewline "Set the -platform option to " |
+ set print [list] |
+ foreach p [array names ::Platforms] { |
+ lappend print "\"$p\"" |
+ } |
+ lset print end "or [lindex $print end]" |
+ puts "[join $print {, }]." |
+ exit |
+ } |
+ |
+ if {$config!=""} { |
+ if {[llength $config]==1} {lappend config fulltest} |
+ set ::CONFIGLIST $config |
+ } else { |
+ set ::CONFIGLIST $::Platforms($platform) |
+ } |
+ puts "Running the following configurations for $platform:" |
+ puts " [string trim $::CONFIGLIST]" |
+} |
+ |
+# Main routine. |
+# |
+proc main {argv} { |
+ |
+ # Process any command line options. |
+ process_options $argv |
+ |
+ foreach {zConfig target} $::CONFIGLIST { |
+ if {$::QUICK} {set target test} |
+ set config_options $::Configs($zConfig) |
+ |
+ run_test_suite $zConfig $target $config_options |
+ |
+ # If the configuration included the SQLITE_DEBUG option, then remove |
+ # it and run veryquick.test. If it did not include the SQLITE_DEBUG option |
+ # add it and run veryquick.test. |
+ if {$target!="checksymbols"} { |
+ set debug_idx [lsearch -glob $config_options -DSQLITE_DEBUG*] |
+ if {$debug_idx < 0} { |
+ run_test_suite "${zConfig}_debug" test [ |
+ concat $config_options -DSQLITE_DEBUG=1 |
+ ] |
+ } else { |
+ run_test_suite "${zConfig}_ndebug" test [ |
+ lreplace $config_options $debug_idx $debug_idx |
+ ] |
+ } |
+ } |
+ |
+ } |
+} |
+ |
+main $argv |