#!/usr/bin/tclsh # # Usage: # # tclsh soak1.tcl local-makefile.mk ?target? ?scenario? # # This generates many variations on local-makefile.mk (by modifing # the OPT = lines) and runs them will fulltest, one by one. The # constructed makefiles are named "soak1.mk". # # If ?target? is provided, that is the makefile target that is run. # The default is "fulltest" # # If ?scenario? is provided, it is the name of a single scenario to # be run. All other scenarios are skipped. # set localmake [lindex $argv 0] set target [lindex $argv 1] set scene [lindex $argv 2] if {$target==""} {set target fulltest} if {$scene==""} {set scene all} set in [open $localmake] set maketxt [read $in] close $in regsub -all {\\\n} $maketxt {} maketxt #set makefilename "soak1-[expr {int(rand()*1000000000)}].mk" set makefilename "soak1.mk" # Generate a makefile # proc generate_makefile {pattern} { global makefilename maketxt set out [open $makefilename w] set seen_opt 0 foreach line [split $maketxt \n] { if {[regexp {^ *#? *OPTS[ =+]} $line]} { if {!$seen_opt} { puts $out "OPTS += -DSQLITE_NO_SYNC=1" foreach x $pattern { puts $out "OPTS += -D$x" } set seen_opt 1 } } else { puts $out $line } } close $out } # Run a test # proc scenario {id title pattern} { global makefilename target scene if {$scene!="all" && $scene!=$id && $scene!=$title} return puts "**************** $title ***************" generate_makefile $pattern exec make -f $makefilename clean >@stdout 2>@stdout exec make -f $makefilename $target >@stdout 2>@stdout } ############################################################################### # Add new scenarios here # scenario 0 {Default} {} scenario 1 {Debug} { SQLITE_DEBUG=1 SQLITE_MEMDEBUG=1 } scenario 2 {Everything} { SQLITE_DEBUG=1 SQLITE_MEMDEBUG=1 SQLITE_ENABLE_MEMORY_MANAGEMENT=1 SQLITE_ENABLE_COLUMN_METADATA=1 SQLITE_ENABLE_LOAD_EXTENSION=1 HAVE_DLOPEN=1 SQLITE_ENABLE_MEMORY_MANAGEMENT=1 } scenario 3 {Customer-1} { SQLITE_DEBUG=1 SQLITE_MEMDEBUG=1 SQLITE_THREADSAFE=1 SQLITE_OS_UNIX=1 SQLITE_DISABLE_LFS=1 SQLITE_DEFAULT_AUTOVACUUM=1 SQLITE_DEFAULT_PAGE_SIZE=1024 SQLITE_MAX_PAGE_SIZE=4096 SQLITE_DEFAULT_CACHE_SIZE=64 SQLITE_DEFAULT_TEMP_CACHE_SIZE=32 SQLITE_TEMP_STORE=3 SQLITE_OMIT_PROGRESS_CALLBACK=1 SQLITE_OMIT_LOAD_EXTENSION=1 SQLITE_OMIT_VIRTUALTABLE=1 SQLITE_ENABLE_IOTRACE=1 } scenario 4 {Small-Cache} { SQLITE_DEBUG=1 SQLITE_MEMDEBUG=1 SQLITE_THREADSAFE=1 SQLITE_OS_UNIX=1 SQLITE_DEFAULT_AUTOVACUUM=1 SQLITE_DEFAULT_PAGE_SIZE=1024 SQLITE_MAX_PAGE_SIZE=2048 SQLITE_DEFAULT_CACHE_SIZE=13 SQLITE_DEFAULT_TEMP_CACHE_SIZE=11 SQLITE_TEMP_STORE=1 }