123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366 |
- 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
- }
- "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
- }
- }
- 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
- "Default" "threadtest test"
- "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 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.
- 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
|