4 # Documentation for this script. This may be output to stderr
5 # if the script is invoked incorrectly. See the [process_options]
9 This
Tcl script is used to test the various configurations required
10 before releasing a new version. Supported command line
options (all
13 -makefile PATH-TO-MAKEFILE
(default "releasetest.mk")
14 -platform PLATFORM
(see below
)
15 -quick BOOLEAN
(default "0")
17 The
default value
for -makefile is
"./releasetest.mk".
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".
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".
27 Almost any SQLite makefile
(except those generated by configure
- see below
)
28 should work. The following properties are required
:
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.
34 More precisely
, the following invocation must be supported
:
36 make
-f $::MAKEFILE fulltest OPTS
="-DSQLITE_SECURE_DELETE=1 -DSQLITE_DEBUG=1"
38 Makefiles generated by the sqlite configure program cannot be used as
39 they do not respect the OPTS
variable.
41 Example Makefile contents
:
43 ########################################################
44 TOP
=/home
/dan
/work
/sqlite
/sqlite
46 TCL_FLAGS
=-I/home
/dan
/tcl
/include
47 LIBTCL
=-L/home
/dan
/tcl
/lib
-ltcl
50 TCC
= gcc
-ansi -g $(CFLAGS
)
54 THREADLIB
= -lpthread -ldl
55 include
$(TOP
)/main.mk
56 ########################################################
65 -DSQLITE_MAX_ATTACHED=55
66 -DSQLITE_TCL_DEFAULT_FULLMUTEX=1
70 -DSQLITE_ENABLE_UNLOCK_NOTIFY
72 -DSQLITE_TCL_DEFAULT_FULLMUTEX=1
76 -DSQLITE_SECURE_DELETE=1
79 "Update-Delete-Limit" {
81 -DSQLITE_DEFAULT_FILE_FORMAT=4
82 -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=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
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
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
132 -DSQLITE_ENABLE_LOCKING_STYLE=1
135 -DSQLITE_OMIT_LOAD_EXTENSION=1
136 -DSQLITE_DEFAULT_MEMSTATUS=0
137 -DSQLITE_THREADSAFE=2
139 -DSQLITE_ENABLE_LOCKING_STYLE=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
148 -DSQLITE_PREFER_PROXY_LOCKING=1
151 -DSQLITE_ENABLE_OVERSIZE_CELL_CHECK=1
152 -DSQLITE_MAX_ATTACHED=62
156 array set ::Platforms {
159 "Unlock-Notify" "QUICKTEST_INCLUDE=notify2.test test"
160 "Update-Delete-Limit" test
162 "Extra-Robustness" test
165 "Default" "threadtest test"
166 "Device-One" fulltest
169 "Unlock-Notify" "QUICKTEST_INCLUDE=notify2.test test"
172 "Default" "threadtest fulltest"
176 "OS-X" "threadtest fulltest"
180 # End of configuration section.
181 #########################################################################
182 #########################################################################
184 foreach {key value
} [array get
::Platforms] {
185 foreach {v t
} $value {
186 if {0==[info exists
::Configs($v)]} {
187 puts stderr
"No such configuration: \"$v\""
193 proc run_test_suite
{name testtarget config
} {
195 # Tcl variable $opts is used to build up the value used to set the
196 # OPTS Makefile variable. Variable $cflags holds the value for
197 # CFLAGS. The makefile will pass OPTS to both gcc and lemon, but
198 # CFLAGS is only passed to gcc.
202 foreach arg
$config {
203 if {[string match
-D* $arg]} {
210 set cflags
[join $cflags " "]
211 set opts
[join $opts " "]
212 append opts
" -DSQLITE_NO_SYNC=1 -DHAVE_USLEEP"
214 # Set the sub-directory to use.
216 set dir
[string tolower
[string map
{- _
" " _
} $name]]
218 if {$::tcl_platform(platform
)=="windows"} {
219 append opts
" -DSQLITE_OS_WIN=1"
220 } elseif
{$::tcl_platform(platform
)=="os2"} {
221 append opts
" -DSQLITE_OS_OS2=1"
223 append opts
" -DSQLITE_OS_UNIX=1"
228 set makefile
[file normalize
$::MAKEFILE]
230 puts -nonewline "Testing configuration \"$name\" (logfile=$dir/test.log)..."
233 set makecmd
[concat \
234 [list exec make
-C $dir -f $makefile clean
] \
236 [list CFLAGS
=$cflags OPTS
=$opts >& $dir/test.log
] \
239 set tm1
[clock seconds
]
240 set rc
[catch $makecmd]
241 set tm2
[clock seconds
]
243 set minutes
[expr {($tm2-$tm1)/60}]
244 set seconds
[expr {($tm2-$tm1)%60}]
245 puts -nonewline [format " (%d:%.2d) " $minutes $seconds]
254 # This proc processes the command line options passed to this script.
255 # Currently the only option supported is "-makefile", default
256 # "releasetest.mk". Set the ::MAKEFILE variable to the value of this
259 proc process_options
{argv
} {
260 set ::MAKEFILE releasetest.mk
;# Default value
261 set ::QUICK 0 ;# Default value
262 set platform
$::tcl_platform(os
)-$::tcl_platform(machine
)
264 for {set i
0} {$i < [llength $argv]} {incr i
} {
265 switch -- [lindex $argv $i] {
268 set ::MAKEFILE [lindex $argv $i]
273 set platform
[lindex $argv $i]
278 set ::QUICK [lindex $argv $i]
283 puts stderr
[string trim
$::USAGE_MESSAGE]
289 set ::MAKEFILE [file normalize
$::MAKEFILE]
291 if {0==[info exists
::Platforms($platform)]} {
292 puts "Unknown platform: $platform"
293 puts -nonewline "Set the -platform option to "
295 foreach p
[array names
::Platforms] {
296 lappend print
"\"$p\""
298 lset print end
"or [lindex $print end]"
299 puts "[join $print {, }]."
303 set ::CONFIGLIST $::Platforms($platform)
304 puts "Running the following configurations for $platform:"
305 puts " [string trim $::CONFIGLIST]"
312 # Process any command line options.
313 process_options
$argv
315 foreach {zConfig target
} $::CONFIGLIST {
316 if {$::QUICK} {set target test
}
317 set config_options
$::Configs($zConfig)
319 run_test_suite
$zConfig $target $config_options
321 # If the configuration included the SQLITE_DEBUG option, then remove
322 # it and run veryquick.test. If it did not include the SQLITE_DEBUG option
323 # add it and run veryquick.test.
324 set debug_idx
[lsearch -glob $config_options -DSQLITE_DEBUG*]
325 if {$debug_idx < 0} {
326 run_test_suite
"${zConfig}_debug" test
[
327 concat $config_options -DSQLITE_DEBUG=1
330 run_test_suite
"${zConfig}_ndebug" test
[
331 lreplace $config_options $debug_idx $debug_idx