Annotation of embedaddon/sqlite3/test/releasetest.tcl, revision 1.1
1.1 ! misho 1:
! 2: set rcsid {$Id: $}
! 3:
! 4: # Documentation for this script. This may be output to stderr
! 5: # if the script is invoked incorrectly. See the [process_options]
! 6: # proc below.
! 7: #
! 8: set ::USAGE_MESSAGE {
! 9: This Tcl script is used to test the various configurations required
! 10: before releasing a new version. Supported command line options (all
! 11: optional) are:
! 12:
! 13: -makefile PATH-TO-MAKEFILE (default "releasetest.mk")
! 14: -platform PLATFORM (see below)
! 15: -quick BOOLEAN (default "0")
! 16:
! 17: The default value for -makefile is "./releasetest.mk".
! 18:
! 19: The script determines the default value for -platform using the
! 20: $tcl_platform(os) and $tcl_platform(machine) variables. Supported
! 21: platforms are "Linux-x86", "Linux-x86_64" and "Darwin-i386".
! 22:
! 23: If the -quick option is set to true, then the "veryquick.test" script
! 24: is run for all compilation configurations. Otherwise, sometimes "all.test"
! 25: is run, sometimes "veryquick.test".
! 26:
! 27: Almost any SQLite makefile (except those generated by configure - see below)
! 28: should work. The following properties are required:
! 29:
! 30: * The makefile should support the "fulltest" target.
! 31: * The makefile should support the variable "OPTS" as a way to pass
! 32: options from the make command line to lemon and the C compiler.
! 33:
! 34: More precisely, the following invocation must be supported:
! 35:
! 36: make -f $::MAKEFILE fulltest OPTS="-DSQLITE_SECURE_DELETE=1 -DSQLITE_DEBUG=1"
! 37:
! 38: Makefiles generated by the sqlite configure program cannot be used as
! 39: they do not respect the OPTS variable.
! 40:
! 41: Example Makefile contents:
! 42:
! 43: ########################################################
! 44: TOP=/home/dan/work/sqlite/sqlite
! 45:
! 46: TCL_FLAGS=-I/home/dan/tcl/include
! 47: LIBTCL=-L/home/dan/tcl/lib -ltcl
! 48:
! 49: BCC = gcc
! 50: TCC = gcc -ansi -g $(CFLAGS)
! 51: NAWK = awk
! 52: AR = ar cr
! 53: RANLIB = ranlib
! 54: THREADLIB = -lpthread -ldl
! 55: include $(TOP)/main.mk
! 56: ########################################################
! 57: }
! 58:
! 59: array set ::Configs {
! 60: "Default" {
! 61: -O2
! 62: }
! 63: "Ftrapv" {
! 64: -O2 -ftrapv
! 65: -DSQLITE_MAX_ATTACHED=55
! 66: -DSQLITE_TCL_DEFAULT_FULLMUTEX=1
! 67: }
! 68: "Unlock-Notify" {
! 69: -O2
! 70: -DSQLITE_ENABLE_UNLOCK_NOTIFY
! 71: -DSQLITE_THREADSAFE
! 72: -DSQLITE_TCL_DEFAULT_FULLMUTEX=1
! 73: }
! 74: "Secure-Delete" {
! 75: -O2
! 76: -DSQLITE_SECURE_DELETE=1
! 77: -DSQLITE_SOUNDEX=1
! 78: }
! 79: "Update-Delete-Limit" {
! 80: -O2
! 81: -DSQLITE_DEFAULT_FILE_FORMAT=4
! 82: -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1
! 83: }
! 84: "Debug-One" {
! 85: -O2
! 86: -DSQLITE_DEBUG=1
! 87: -DSQLITE_MEMDEBUG=1
! 88: -DSQLITE_MUTEX_NOOP=1
! 89: -DSQLITE_TCL_DEFAULT_FULLMUTEX=1
! 90: -DSQLITE_ENABLE_FTS3=1
! 91: -DSQLITE_ENABLE_RTREE=1
! 92: -DSQLITE_ENABLE_MEMSYS5=1
! 93: -DSQLITE_ENABLE_MEMSYS3=1
! 94: -DSQLITE_ENABLE_COLUMN_METADATA=1
! 95: }
! 96: "Device-One" {
! 97: -O2
! 98: -DSQLITE_DEBUG=1
! 99: -DSQLITE_DEFAULT_AUTOVACUUM=1
! 100: -DSQLITE_DEFAULT_CACHE_SIZE=64
! 101: -DSQLITE_DEFAULT_PAGE_SIZE=1024
! 102: -DSQLITE_DEFAULT_TEMP_CACHE_SIZE=32
! 103: -DSQLITE_DISABLE_LFS=1
! 104: -DSQLITE_ENABLE_ATOMIC_WRITE=1
! 105: -DSQLITE_ENABLE_IOTRACE=1
! 106: -DSQLITE_ENABLE_MEMORY_MANAGEMENT=1
! 107: -DSQLITE_MAX_PAGE_SIZE=4096
! 108: -DSQLITE_OMIT_LOAD_EXTENSION=1
! 109: -DSQLITE_OMIT_PROGRESS_CALLBACK=1
! 110: -DSQLITE_OMIT_VIRTUALTABLE=1
! 111: -DSQLITE_TEMP_STORE=3
! 112: }
! 113: "Device-Two" {
! 114: -DSQLITE_4_BYTE_ALIGNED_MALLOC=1
! 115: -DSQLITE_DEFAULT_AUTOVACUUM=1
! 116: -DSQLITE_DEFAULT_CACHE_SIZE=1000
! 117: -DSQLITE_DEFAULT_LOCKING_MODE=0
! 118: -DSQLITE_DEFAULT_PAGE_SIZE=1024
! 119: -DSQLITE_DEFAULT_TEMP_CACHE_SIZE=1000
! 120: -DSQLITE_DISABLE_LFS=1
! 121: -DSQLITE_ENABLE_FTS3=1
! 122: -DSQLITE_ENABLE_MEMORY_MANAGEMENT=1
! 123: -DSQLITE_ENABLE_RTREE=1
! 124: -DSQLITE_MAX_COMPOUND_SELECT=50
! 125: -DSQLITE_MAX_PAGE_SIZE=32768
! 126: -DSQLITE_OMIT_TRACE=1
! 127: -DSQLITE_TEMP_STORE=3
! 128: -DSQLITE_THREADSAFE=2
! 129: }
! 130: "Locking-Style" {
! 131: -O2
! 132: -DSQLITE_ENABLE_LOCKING_STYLE=1
! 133: }
! 134: "OS-X" {
! 135: -DSQLITE_OMIT_LOAD_EXTENSION=1
! 136: -DSQLITE_DEFAULT_MEMSTATUS=0
! 137: -DSQLITE_THREADSAFE=2
! 138: -DSQLITE_OS_UNIX=1
! 139: -DSQLITE_ENABLE_LOCKING_STYLE=1
! 140: -DUSE_PREAD=1
! 141: -DSQLITE_ENABLE_RTREE=1
! 142: -DSQLITE_ENABLE_FTS3=1
! 143: -DSQLITE_ENABLE_FTS3_PARENTHESIS=1
! 144: -DSQLITE_DEFAULT_CACHE_SIZE=1000
! 145: -DSQLITE_MAX_LENGTH=2147483645
! 146: -DSQLITE_MAX_VARIABLE_NUMBER=500000
! 147: -DSQLITE_DEBUG=1
! 148: -DSQLITE_PREFER_PROXY_LOCKING=1
! 149: }
! 150: "Extra-Robustness" {
! 151: -DSQLITE_ENABLE_OVERSIZE_CELL_CHECK=1
! 152: -DSQLITE_MAX_ATTACHED=62
! 153: }
! 154: }
! 155:
! 156: array set ::Platforms {
! 157: Linux-x86_64 {
! 158: "Debug-One" "checksymbols test"
! 159: "Secure-Delete" test
! 160: "Unlock-Notify" "QUICKTEST_INCLUDE=notify2.test test"
! 161: "Update-Delete-Limit" test
! 162: "Extra-Robustness" test
! 163: "Device-Two" test
! 164: "Ftrapv" test
! 165: "Default" "threadtest test"
! 166: "Device-One" fulltest
! 167: }
! 168: Linux-i686 {
! 169: "Unlock-Notify" "QUICKTEST_INCLUDE=notify2.test test"
! 170: "Device-One" test
! 171: "Device-Two" test
! 172: "Default" "threadtest fulltest"
! 173: }
! 174: Darwin-i386 {
! 175: "Locking-Style" test
! 176: "OS-X" "threadtest fulltest"
! 177: }
! 178: }
! 179:
! 180:
! 181: # End of configuration section.
! 182: #########################################################################
! 183: #########################################################################
! 184:
! 185: foreach {key value} [array get ::Platforms] {
! 186: foreach {v t} $value {
! 187: if {0==[info exists ::Configs($v)]} {
! 188: puts stderr "No such configuration: \"$v\""
! 189: exit -1
! 190: }
! 191: }
! 192: }
! 193:
! 194: proc run_test_suite {name testtarget config} {
! 195:
! 196: # Tcl variable $opts is used to build up the value used to set the
! 197: # OPTS Makefile variable. Variable $cflags holds the value for
! 198: # CFLAGS. The makefile will pass OPTS to both gcc and lemon, but
! 199: # CFLAGS is only passed to gcc.
! 200: #
! 201: set cflags ""
! 202: set opts ""
! 203: foreach arg $config {
! 204: if {[string match -D* $arg]} {
! 205: lappend opts $arg
! 206: } else {
! 207: lappend cflags $arg
! 208: }
! 209: }
! 210:
! 211: set cflags [join $cflags " "]
! 212: set opts [join $opts " "]
! 213: append opts " -DSQLITE_NO_SYNC=1 -DHAVE_USLEEP"
! 214:
! 215: # Set the sub-directory to use.
! 216: #
! 217: set dir [string tolower [string map {- _ " " _} $name]]
! 218:
! 219: if {$::tcl_platform(platform)=="windows"} {
! 220: append opts " -DSQLITE_OS_WIN=1"
! 221: } elseif {$::tcl_platform(platform)=="os2"} {
! 222: append opts " -DSQLITE_OS_OS2=1"
! 223: } else {
! 224: append opts " -DSQLITE_OS_UNIX=1"
! 225: }
! 226:
! 227: # Run the test.
! 228: #
! 229: set makefile [file normalize $::MAKEFILE]
! 230: file mkdir $dir
! 231: puts -nonewline "Testing configuration \"$name\" (logfile=$dir/test.log)..."
! 232: flush stdout
! 233:
! 234: set makecmd [concat \
! 235: [list exec make -C $dir -f $makefile clean] \
! 236: $testtarget \
! 237: [list CFLAGS=$cflags OPTS=$opts >& $dir/test.log] \
! 238: ]
! 239:
! 240: set tm1 [clock seconds]
! 241: set rc [catch $makecmd]
! 242: set tm2 [clock seconds]
! 243:
! 244: set minutes [expr {($tm2-$tm1)/60}]
! 245: set seconds [expr {($tm2-$tm1)%60}]
! 246: puts -nonewline [format " (%d:%.2d) " $minutes $seconds]
! 247: if {$rc} {
! 248: puts "FAILED."
! 249: } else {
! 250: puts "Ok."
! 251: }
! 252: }
! 253:
! 254:
! 255: # This proc processes the command line options passed to this script.
! 256: # Currently the only option supported is "-makefile", default
! 257: # "releasetest.mk". Set the ::MAKEFILE variable to the value of this
! 258: # option.
! 259: #
! 260: proc process_options {argv} {
! 261: set ::MAKEFILE releasetest.mk ;# Default value
! 262: set ::QUICK 0 ;# Default value
! 263: set platform $::tcl_platform(os)-$::tcl_platform(machine)
! 264:
! 265: for {set i 0} {$i < [llength $argv]} {incr i} {
! 266: switch -- [lindex $argv $i] {
! 267: -makefile {
! 268: incr i
! 269: set ::MAKEFILE [lindex $argv $i]
! 270: }
! 271:
! 272: -platform {
! 273: incr i
! 274: set platform [lindex $argv $i]
! 275: }
! 276:
! 277: -quick {
! 278: incr i
! 279: set ::QUICK [lindex $argv $i]
! 280: }
! 281:
! 282: default {
! 283: puts stderr ""
! 284: puts stderr [string trim $::USAGE_MESSAGE]
! 285: exit -1
! 286: }
! 287: }
! 288: }
! 289:
! 290: set ::MAKEFILE [file normalize $::MAKEFILE]
! 291:
! 292: if {0==[info exists ::Platforms($platform)]} {
! 293: puts "Unknown platform: $platform"
! 294: puts -nonewline "Set the -platform option to "
! 295: set print [list]
! 296: foreach p [array names ::Platforms] {
! 297: lappend print "\"$p\""
! 298: }
! 299: lset print end "or [lindex $print end]"
! 300: puts "[join $print {, }]."
! 301: exit
! 302: }
! 303:
! 304: set ::CONFIGLIST $::Platforms($platform)
! 305: puts "Running the following configurations for $platform:"
! 306: puts " [string trim $::CONFIGLIST]"
! 307: }
! 308:
! 309: # Main routine.
! 310: #
! 311: proc main {argv} {
! 312:
! 313: # Process any command line options.
! 314: process_options $argv
! 315:
! 316: foreach {zConfig target} $::CONFIGLIST {
! 317: if {$::QUICK} {set target test}
! 318: set config_options $::Configs($zConfig)
! 319:
! 320: run_test_suite $zConfig $target $config_options
! 321:
! 322: # If the configuration included the SQLITE_DEBUG option, then remove
! 323: # it and run veryquick.test. If it did not include the SQLITE_DEBUG option
! 324: # add it and run veryquick.test.
! 325: set debug_idx [lsearch -glob $config_options -DSQLITE_DEBUG*]
! 326: if {$debug_idx < 0} {
! 327: run_test_suite "${zConfig}_debug" test [
! 328: concat $config_options -DSQLITE_DEBUG=1
! 329: ]
! 330: } else {
! 331: run_test_suite "${zConfig}_ndebug" test [
! 332: lreplace $config_options $debug_idx $debug_idx
! 333: ]
! 334: }
! 335:
! 336: }
! 337: }
! 338:
! 339: main $argv
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>