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