Annotation of embedaddon/sqlite3/test/releasetest.tcl, revision 1.1.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>