1 #!/usr/bin/tclsh 2 # 3 # Usage: 4 # 5 # tclsh soak1.tcl local-makefile.mk ?target? ?scenario? 6 # 7 # This generates many variations on local-makefile.mk (by modifing 8 # the OPT = lines) and runs them will fulltest, one by one. The 9 # constructed makefiles are named "soak1.mk". 10 # 11 # If ?target? is provided, that is the makefile target that is run. 12 # The default is "fulltest" 13 # 14 # If ?scenario? is provided, it is the name of a single scenario to 15 # be run. All other scenarios are skipped. 16 # 17 set localmake [lindex $argv 0] 18 set target [lindex $argv 1] 19 set scene [lindex $argv 2] 20 if {$target==""} {set target fulltest} 21 if {$scene==""} {set scene all} 22 23 set in [open $localmake] 24 set maketxt [read $in] 25 close $in 26 regsub -all {\\\n} $maketxt {} maketxt 27 #set makefilename "soak1-[expr {int(rand()*1000000000)}].mk" 28 set makefilename "soak1.mk" 29 30 # Generate a makefile 31 # 32 proc generate_makefile {pattern} { 33 global makefilename maketxt 34 set out [open $makefilename w] 35 set seen_opt 0 36 foreach line [split $maketxt \n] { 37 if {[regexp {^ *#? *OPTS[ =+]} $line]} { 38 if {!$seen_opt} { 39 puts $out "OPTS += -DSQLITE_NO_SYNC=1" 40 foreach x $pattern { 41 puts $out "OPTS += -D$x" 42 } 43 set seen_opt 1 44 } 45 } else { 46 puts $out $line 47 } 48 } 49 close $out 50 } 51 52 # Run a test 53 # 54 proc scenario {id title pattern} { 55 global makefilename target scene 56 if {$scene!="all" && $scene!=$id && $scene!=$title} return 57 puts "**************** $title ***************" 58 generate_makefile $pattern 59 exec make -f $makefilename clean >@stdout 2>@stdout 60 exec make -f $makefilename $target >@stdout 2>@stdout 61 } 62 63 ############################################################################### 64 # Add new scenarios here 65 # 66 scenario 0 {Default} {} 67 scenario 1 {Debug} { 68 SQLITE_DEBUG=1 69 SQLITE_MEMDEBUG=1 70 } 71 scenario 2 {Everything} { 72 SQLITE_DEBUG=1 73 SQLITE_MEMDEBUG=1 74 SQLITE_ENABLE_MEMORY_MANAGEMENT=1 75 SQLITE_ENABLE_COLUMN_METADATA=1 76 SQLITE_ENABLE_LOAD_EXTENSION=1 HAVE_DLOPEN=1 77 SQLITE_ENABLE_MEMORY_MANAGEMENT=1 78 } 79 scenario 3 {Customer-1} { 80 SQLITE_DEBUG=1 SQLITE_MEMDEBUG=1 81 SQLITE_THREADSAFE=1 SQLITE_OS_UNIX=1 82 SQLITE_DISABLE_LFS=1 83 SQLITE_DEFAULT_AUTOVACUUM=1 84 SQLITE_DEFAULT_PAGE_SIZE=1024 85 SQLITE_MAX_PAGE_SIZE=4096 86 SQLITE_DEFAULT_CACHE_SIZE=64 87 SQLITE_DEFAULT_TEMP_CACHE_SIZE=32 88 SQLITE_TEMP_STORE=3 89 SQLITE_OMIT_PROGRESS_CALLBACK=1 90 SQLITE_OMIT_LOAD_EXTENSION=1 91 SQLITE_OMIT_VIRTUALTABLE=1 92 SQLITE_ENABLE_IOTRACE=1 93 } 94 scenario 4 {Small-Cache} { 95 SQLITE_DEBUG=1 SQLITE_MEMDEBUG=1 96 SQLITE_THREADSAFE=1 SQLITE_OS_UNIX=1 97 SQLITE_DEFAULT_AUTOVACUUM=1 98 SQLITE_DEFAULT_PAGE_SIZE=1024 99 SQLITE_MAX_PAGE_SIZE=2048 100 SQLITE_DEFAULT_CACHE_SIZE=13 101 SQLITE_DEFAULT_TEMP_CACHE_SIZE=11 102 SQLITE_TEMP_STORE=1 103 } 104