File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / sqlite3 / test / releasetest.tcl
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 17:04:16 2012 UTC (12 years, 10 months ago) by misho
Branches: sqlite3, MAIN
CVS tags: v3_7_10, HEAD
sqlite3

    1: 
    2: set rcsid {$Id: releasetest.tcl,v 1.1.1.1 2012/02/21 17:04:16 misho Exp $}
    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>