Home | History | Annotate | Download | only in tool
      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