| Index: third_party/sqlite/src/test/releasetest.tcl
|
| diff --git a/third_party/sqlite/src/test/releasetest.tcl b/third_party/sqlite/src/test/releasetest.tcl
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..84542bb8a5ff570afb9e80040e856fed380bd51a
|
| --- /dev/null
|
| +++ b/third_party/sqlite/src/test/releasetest.tcl
|
| @@ -0,0 +1,338 @@
|
| +
|
| +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")
|
| +
|
| +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
|
| + }
|
| + "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
|
| + }
|
| +}
|
| +
|
| +array set ::Platforms {
|
| + Linux-x86_64 {
|
| + "Secure-Delete" test
|
| + "Unlock-Notify" "QUICKTEST_INCLUDE=notify2.test test"
|
| + "Update-Delete-Limit" test
|
| + "Debug-One" test
|
| + "Extra-Robustness" test
|
| + "Device-Two" test
|
| + "Ftrapv" test
|
| + "Default" "threadtest test"
|
| + "Device-One" fulltest
|
| + }
|
| + Linux-i686 {
|
| + "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"
|
| + } elseif {$::tcl_platform(platform)=="os2"} {
|
| + append opts " -DSQLITE_OS_OS2=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 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]
|
| + }
|
| +
|
| + 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
|
| + }
|
| +
|
| + 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.
|
| + 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
|
|
|