Testrunner.tcl enhancements: (1) Attempt to build the SQLite tcl extension
[sqlite.git] / test / testrunner_data.tcl
blob78f28bbf8eddfadf2a356bf0f6cfc2ad6930d18d
4 namespace eval trd {
5 variable tcltest
6 variable extra
7 variable all_configs
8 variable build
11 # Tcl tests to run for various builds.
13 set tcltest(linux.Fast-One) veryquick
14 set tcltest(linux.Debug-One) veryquick
15 set tcltest(linux.Debug-Two) veryquick
16 set tcltest(linux.Have-Not) veryquick
17 set tcltest(linux.Secure-Delete) veryquick
18 set tcltest(linux.Unlock-Notify) veryquick
19 set tcltest(linux.Update-Delete-Limit) veryquick
20 set tcltest(linux.Extra-Robustness) veryquick
21 set tcltest(linux.Device-Two) veryquick
22 set tcltest(linux.No-lookaside) veryquick
23 set tcltest(linux.Devkit) veryquick
24 set tcltest(linux.Apple) veryquick
25 set tcltest(linux.Android) veryquick
26 set tcltest(linux.Sanitize) veryquick
27 set tcltest(linux.Device-One) all
28 set tcltest(linux.Default) all_plus_autovacuum_crash
29 set tcltest(linux.Valgrind) valgrind
31 set tcltest(osx.Locking-Style) veryquick
32 set tcltest(osx.Have-Not) veryquick
33 set tcltest(osx.Apple) all_less_no_mutex_try
35 set tcltest(win.Stdcall) veryquick
36 set tcltest(win.Have-Not) veryquick
37 set tcltest(win.Windows-Memdebug) veryquick
38 set tcltest(win.Windows-Win32Heap) veryquick
39 set tcltest(win.Windows-Sanitize) veryquick
40 set tcltest(win.Default) full
42 # Extra [make xyz] tests that should be run for various builds.
44 set extra(linux.Check-Symbols) checksymbols
45 set extra(linux.Fast-One) {fuzztest sourcetest}
46 set extra(linux.Debug-One) {fuzztest sourcetest mptest}
47 set extra(linux.Debug-Two) {fuzztest sourcetest}
48 set extra(linux.Have-Not) {fuzztest sourcetest}
49 set extra(linux.Secure-Delete) {fuzztest sourcetest}
50 set extra(linux.Unlock-Notify) {fuzztest sourcetest}
51 set extra(linux.Update-Delete-Limit) {fuzztest sourcetest}
52 set extra(linux.Extra-Robustness) {fuzztest sourcetest}
53 set extra(linux.Device-Two) {fuzztest sourcetest threadtest}
54 set extra(linux.No-lookaside) {fuzztest sourcetest}
55 set extra(linux.Devkit) {fuzztest sourcetest}
56 set extra(linux.Android) {fuzztest sourcetest}
57 set extra(linux.Apple) {fuzztest sourcetest}
58 set extra(linux.Sanitize) {fuzztest sourcetest}
59 set extra(linux.Default) {fuzztest sourcetest threadtest}
61 set extra(osx.Apple) {fuzztest threadtest}
62 set extra(osx.Have-Not) {fuzztest sourcetest}
63 set extra(osx.Locking-Style) {mptest fuzztest sourcetest}
65 set extra(win.Default) mptest
66 set extra(win.Stdcall) {fuzztest sourcetest}
67 set extra(win.Windows-Memdebug) {fuzztest sourcetest}
68 set extra(win.Windows-Win32Heap) {fuzztest sourcetest}
69 set extra(win.Windows-Sanitize) fuzztest
70 set extra(win.Have-Not) {fuzztest sourcetest}
72 # The following mirrors the set of test suites invoked by "all.test".
74 set all_configs {
75 full no_optimization memsubsys1 memsubsys2 singlethread
76 multithread onefile utf16 exclusive persistent_journal
77 persistent_journal_error no_journal no_journal_error
78 autovacuum_ioerr no_mutex_try fullmutex journaltest
79 inmemory_journal pcache0 pcache10 pcache50 pcache90
80 pcache100 prepare mmap
83 #-----------------------------------------------------------------------
84 # Start of build() definitions.
86 set build(Default) {
87 -O2
88 --disable-amalgamation --disable-shared
89 --enable-session
90 -DSQLITE_ENABLE_RBU
91 -DSQLITE_ENABLE_STMT_SCANSTATUS
94 # These two are used by [testrunner.tcl mdevtest] (All-O0) and
95 # [testrunner.tcl sdevtest] (All-Sanitize).
97 set build(All-Debug) {
98 --enable-debug --enable-all
99 -DSQLITE_ENABLE_ORDERED_SET_AGGREGATES
101 set build(All-O0) {
102 -O0 --enable-all
104 set build(All-Sanitize) {
105 -DSQLITE_OMIT_LOOKASIDE=1
106 --enable-all -fsanitize=address,undefined -fno-sanitize-recover=undefined
109 set build(Sanitize) {
110 CC=clang -fsanitize=address,undefined -fno-sanitize-recover=undefined
111 -DSQLITE_ENABLE_STAT4
112 -DSQLITE_OMIT_LOOKASIDE=1
113 -DCONFIG_SLOWDOWN_FACTOR=5.0
114 -DSQLITE_ENABLE_RBU
115 --enable-debug
116 --enable-all
118 set build(Stdcall) {
119 -DUSE_STDCALL=1
120 -DSQLITE_USE_ONLY_WIN32=1
124 # The "Have-Not" configuration sets all possible -UHAVE_feature options
125 # in order to verify that the code works even on platforms that lack
126 # these support services.
127 set build(Have-Not) {
128 -DHAVE_FDATASYNC=0
129 -DHAVE_GMTIME_R=0
130 -DHAVE_ISNAN=0
131 -DHAVE_LOCALTIME_R=0
132 -DHAVE_LOCALTIME_S=0
133 -DHAVE_MALLOC_USABLE_SIZE=0
134 -DHAVE_STRCHRNUL=0
135 -DHAVE_USLEEP=0
136 -DHAVE_UTIME=0
138 set build(Unlock-Notify) {
140 -DSQLITE_ENABLE_UNLOCK_NOTIFY
141 -DSQLITE_THREADSAFE
142 -DSQLITE_TCL_DEFAULT_FULLMUTEX=1
144 set build(Secure-Delete) {
146 -DSQLITE_SECURE_DELETE=1
147 -DSQLITE_SOUNDEX=1
149 set build(Update-Delete-Limit) {
151 -DSQLITE_DEFAULT_FILE_FORMAT=4
152 -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1
153 -DSQLITE_ENABLE_STMT_SCANSTATUS
154 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS
155 -DSQLITE_ENABLE_CURSOR_HINTS
157 set build(Check-Symbols) {
158 -DSQLITE_MEMDEBUG=1
159 -DSQLITE_ENABLE_FTS3_PARENTHESIS=1
160 -DSQLITE_ENABLE_FTS3=1
161 -DSQLITE_ENABLE_RTREE=1
162 -DSQLITE_ENABLE_MEMSYS5=1
163 -DSQLITE_ENABLE_MEMSYS3=1
164 -DSQLITE_ENABLE_COLUMN_METADATA=1
165 -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1
166 -DSQLITE_SECURE_DELETE=1
167 -DSQLITE_SOUNDEX=1
168 -DSQLITE_ENABLE_ATOMIC_WRITE=1
169 -DSQLITE_ENABLE_MEMORY_MANAGEMENT=1
170 -DSQLITE_ENABLE_OVERSIZE_CELL_CHECK=1
171 -DSQLITE_ENABLE_STAT4
172 -DSQLITE_ENABLE_STMT_SCANSTATUS
173 --enable-fts5 --enable-session
175 set build(Debug-One) {
176 --disable-shared
177 -O2 -funsigned-char
178 -DSQLITE_DEBUG=1
179 -DSQLITE_MEMDEBUG=1
180 -DSQLITE_MUTEX_NOOP=1
181 -DSQLITE_TCL_DEFAULT_FULLMUTEX=1
182 -DSQLITE_ENABLE_FTS3=1
183 -DSQLITE_ENABLE_RTREE=1
184 -DSQLITE_ENABLE_MEMSYS5=1
185 -DSQLITE_ENABLE_COLUMN_METADATA=1
186 -DSQLITE_ENABLE_STAT4
187 -DSQLITE_ENABLE_HIDDEN_COLUMNS
188 -DSQLITE_MAX_ATTACHED=125
189 -DSQLITE_MUTATION_TEST
190 --enable-fts5
192 set build(Debug-Two) {
193 -DSQLITE_DEFAULT_MEMSTATUS=0
194 -DSQLITE_MAX_EXPR_DEPTH=0
195 --enable-debug
197 set build(Fast-One) {
199 -DSQLITE_ENABLE_FTS4=1
200 -DSQLITE_ENABLE_RTREE=1
201 -DSQLITE_ENABLE_STAT4
202 -DSQLITE_ENABLE_RBU
203 -DSQLITE_MAX_ATTACHED=125
204 -DSQLITE_MAX_MMAP_SIZE=12884901888
205 -DSQLITE_ENABLE_SORTER_MMAP=1
206 -DLONGDOUBLE_TYPE=double
207 --enable-session
209 set build(Device-One) {
211 -DSQLITE_DEBUG=1
212 -DSQLITE_DEFAULT_AUTOVACUUM=1
213 -DSQLITE_DEFAULT_CACHE_SIZE=64
214 -DSQLITE_DEFAULT_PAGE_SIZE=1024
215 -DSQLITE_DEFAULT_TEMP_CACHE_SIZE=32
216 -DSQLITE_DISABLE_LFS=1
217 -DSQLITE_ENABLE_ATOMIC_WRITE=1
218 -DSQLITE_ENABLE_IOTRACE=1
219 -DSQLITE_ENABLE_MEMORY_MANAGEMENT=1
220 -DSQLITE_MAX_PAGE_SIZE=4096
221 -DSQLITE_OMIT_LOAD_EXTENSION=1
222 -DSQLITE_OMIT_PROGRESS_CALLBACK=1
223 -DSQLITE_OMIT_VIRTUALTABLE=1
224 -DSQLITE_ENABLE_HIDDEN_COLUMNS
225 -DSQLITE_TEMP_STORE=3
227 set build(Device-Two) {
228 -DSQLITE_4_BYTE_ALIGNED_MALLOC=1
229 -DSQLITE_DEFAULT_AUTOVACUUM=1
230 -DSQLITE_DEFAULT_CACHE_SIZE=1000
231 -DSQLITE_DEFAULT_LOCKING_MODE=0
232 -DSQLITE_DEFAULT_PAGE_SIZE=1024
233 -DSQLITE_DEFAULT_TEMP_CACHE_SIZE=1000
234 -DSQLITE_DISABLE_LFS=1
235 -DSQLITE_ENABLE_FTS3=1
236 -DSQLITE_ENABLE_MEMORY_MANAGEMENT=1
237 -DSQLITE_ENABLE_RTREE=1
238 -DSQLITE_MAX_COMPOUND_SELECT=50
239 -DSQLITE_MAX_PAGE_SIZE=32768
240 -DSQLITE_OMIT_TRACE=1
241 -DSQLITE_TEMP_STORE=3
242 -DSQLITE_THREADSAFE=2
243 --enable-fts5 --enable-session
245 set build(Locking-Style) {
247 -DSQLITE_ENABLE_LOCKING_STYLE=1
249 set build(Android) {
251 -DHAVE_USLEEP=1
252 -DSQLITE_HAVE_ISNAN
253 -DSQLITE_POWERSAFE_OVERWRITE=1
254 -DSQLITE_DEFAULT_FILE_FORMAT=4
255 -DSQLITE_DEFAULT_AUTOVACUUM=1
256 -DSQLITE_ENABLE_MEMORY_MANAGEMENT=1
257 -DSQLITE_ENABLE_FTS3
258 -DSQLITE_ENABLE_FTS3_BACKWARDS
259 -DSQLITE_ENABLE_FTS4
260 -DSQLITE_SECURE_DELETE
261 -DSQLITE_ENABLE_BATCH_ATOMIC_WRITE
262 -DBIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD
263 -DSQLITE_ALLOW_ROWID_IN_VIEW
264 -DSQLITE_ENABLE_BYTECODE_VTAB
265 -Wno-unused-parameter
266 -Werror
267 -DUSE_PREAD64
268 -Dfdatasync=fdatasync
269 -DHAVE_MALLOC_H=1
270 -DHAVE_MALLOC_USABLE_SIZE
271 -DSQLITE_ENABLE_DBSTAT_VTAB
273 # Compile-options used by Android but omitted from these
274 # tests:
275 # -DNDEBUG=1
276 # -DSQLITE_DEFAULT_LEGACY_ALTER_TABLE
277 # -DSQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576
278 # -DSQLITE_DEFAULT_FILE_PERMISSIONS=0600
279 # -DSQLITE_OMIT_BUILTIN_TEST
280 # -DSQLITE_OMIT_LOAD_EXTENSION
281 # -DSQLITE_OMIT_COMPILEOPTION_DIAGS
283 set build(Apple) {
285 -DHAVE_GMTIME_R=1
286 -DHAVE_ISNAN=1
287 -DHAVE_LOCALTIME_R=1
288 -DHAVE_PREAD=1
289 -DHAVE_PWRITE=1
290 -DHAVE_UTIME=1
291 -DSQLITE_DEFAULT_CACHE_SIZE=1000
292 -DSQLITE_DEFAULT_CKPTFULLFSYNC=1
293 -DSQLITE_DEFAULT_MEMSTATUS=1
294 -DSQLITE_DEFAULT_PAGE_SIZE=1024
295 -DSQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS=1
296 -DSQLITE_ENABLE_API_ARMOR=1
297 -DSQLITE_ENABLE_AUTO_PROFILE=1
298 -DSQLITE_ENABLE_FLOCKTIMEOUT=1
299 -DSQLITE_ENABLE_FTS3=1
300 -DSQLITE_ENABLE_FTS3_PARENTHESIS=1
301 -DSQLITE_ENABLE_FTS3_TOKENIZER=1
302 -DSQLITE_ENABLE_PERSIST_WAL=1
303 -DSQLITE_ENABLE_PURGEABLE_PCACHE=1
304 -DSQLITE_ENABLE_RTREE=1
305 -DSQLITE_ENABLE_SETLK_TIMEOUT=2
306 -DSQLITE_ENABLE_SNAPSHOT=1
307 -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1
308 -DSQLITE_MAX_LENGTH=2147483645
309 -DSQLITE_MAX_VARIABLE_NUMBER=500000
310 -DSQLITE_NO_SYNC=1
311 -DSQLITE_OMIT_AUTORESET=1
312 -DSQLITE_OMIT_LOAD_EXTENSION=1
313 -DSQLITE_PREFER_PROXY_LOCKING=1
314 -DSQLITE_SERIES_CONSTRAINT_VERIFY=1
315 -DSQLITE_THREADSAFE=2
316 -DSQLITE_USE_URI=1
317 -DSQLITE_WRITE_WALFRAME_PREBUFFERED=1
318 -DUSE_GUARDED_FD=1
319 -DUSE_PREAD=1
320 --enable-fts5
322 set build(Extra-Robustness) {
323 -DSQLITE_ENABLE_OVERSIZE_CELL_CHECK=1
324 -DSQLITE_MAX_ATTACHED=62
326 set build(Devkit) {
327 -DSQLITE_DEFAULT_FILE_FORMAT=4
328 -DSQLITE_MAX_ATTACHED=30
329 -DSQLITE_ENABLE_COLUMN_METADATA
330 -DSQLITE_ENABLE_FTS4
331 -DSQLITE_ENABLE_FTS5
332 -DSQLITE_ENABLE_FTS4_PARENTHESIS
333 -DSQLITE_DISABLE_FTS4_DEFERRED
334 -DSQLITE_ENABLE_RTREE
335 --enable-fts5
337 set build(No-lookaside) {
338 -DSQLITE_TEST_REALLOC_STRESS=1
339 -DSQLITE_OMIT_LOOKASIDE=1
341 set build(Valgrind) {
342 -DSQLITE_ENABLE_STAT4
343 -DSQLITE_ENABLE_FTS4
344 -DSQLITE_ENABLE_RTREE
345 -DSQLITE_ENABLE_HIDDEN_COLUMNS
346 -DLONGDOUBLE_TYPE=double
347 -DCONFIG_SLOWDOWN_FACTOR=8.0
350 set build(Windows-Memdebug) {
351 MEMDEBUG=1
352 DEBUG=3
354 set build(Windows-Win32Heap) {
355 WIN32HEAP=1
356 DEBUG=4
358 set build(Windows-Sanitize) {
359 ASAN=1
365 #-------------------------------------------------------------------------
366 proc trd_import {} {
367 uplevel {
368 variable ::trd::tcltest
369 variable ::trd::extra
370 variable ::trd::all_configs
371 variable ::trd::build
375 proc trd_builds {platform} {
376 trd_import
378 set klist [lsort -uniq [concat \
379 [array names tcltest ${platform}.*] \
380 [array names extra ${platform}.*] \
382 if {[llength $klist]==0} {
383 error "no such platform: $platform"
386 set ret ""
387 foreach k $klist {
388 foreach {p c} [split $k "."] {}
389 lappend ret $c
391 set ret
394 proc trd_configs {platform bld} {
395 trd_import
397 set clist [list]
399 if {[info exists tcltest($platform.$bld)]} {
400 set clist $tcltest($platform.$bld)
401 if {$clist=="all"} {
402 set clist $all_configs
403 } elseif {$clist=="all_plus_autovacuum_crash"} {
404 set clist [concat $all_configs autovacuum_crash]
405 } elseif {$clist=="all_less_no_mutex_try"} {
406 set idx [lsearch $all_configs no_mutex_try]
407 set clist [lreplace $all_configs $idx $idx]
411 set clist
414 proc trd_extras {platform bld} {
415 trd_import
416 if {[info exists extra($platform.$bld)]==0} { return [list] }
417 return $extra($platform.$bld)
420 # Usage:
422 # trd_fuzztest_data
424 # This returns data used by testrunner.tcl to run commands equivalent
425 # to [make fuzztest]. The returned value is a list, which should be
426 # interpreted as a sequence of pairs. The first element of each pair
427 # is an interpreter name. The second element is a list of files.
428 # testrunner.tcl automatically creates one job to build each interpreter,
429 # and one to run each of the files with it once it has been built.
431 # In practice, the returned value looks like this:
434 # {fuzzcheck {$testdir/fuzzdata1.db $testdir/fuzzdata2.db ...}}
435 # {{sessionfuzz run} $testdir/sessionfuzz-data1.db}
438 # where $testdir is replaced by the full-path to the test-directory (the
439 # directory containing this file). "fuzzcheck" and "sessionfuzz" have .exe
440 # extensions on windows.
442 proc trd_fuzztest_data {} {
443 set EXE ""
444 set lFuzzDb [glob [file join $::testdir fuzzdata*.db]]
445 set lSessionDb [glob [file join $::testdir sessionfuzz-data*.db]]
447 if {$::tcl_platform(platform)=="windows"} {
448 return [list fuzzcheck.exe $lFuzzDb]
451 return [list fuzzcheck $lFuzzDb {sessionfuzz run} $lSessionDb]
455 proc trd_all_configs {} {
456 trd_import
457 set all_configs
460 proc trimscript {text} {
461 set text [string map {"\n " "\n"} [string trim $text]]
464 proc make_sh_script {srcdir opts cflags makeOpts configOpts} {
466 set tcldir [::tcl::pkgconfig get libdir,install]
467 set myopts ""
468 if {[info exists ::env(OPTS)]} {
469 append myopts "# From environment variable:\n"
470 append myopts "OPTS=$::env(OPTS)\n\n"
472 foreach o [lsort $opts] {
473 append myopts "OPTS=\"\$OPTS $o\"\n"
476 return [trimscript [subst -nocommands {
477 set -e
478 if [ "\$#" -ne 1 ] ; then
479 echo "Usage: \$0 <target>"
480 exit -1
483 SRCDIR="$srcdir"
484 TCLDIR="$tcldir"
486 if [ ! -f Makefile ] ; then
487 \$SRCDIR/configure --with-tcl=\$TCLDIR $configOpts
490 $myopts
491 CFLAGS="$cflags"
493 make \$1 "CFLAGS=\$CFLAGS" "OPTS=\$OPTS" $makeOpts
497 # Generate the text of a *.bat script.
499 proc make_bat_file {srcdir opts cflags makeOpts} {
500 set srcdir [file nativename [file normalize $srcdir]]
502 return [trimscript [subst -nocommands {
503 set TARGET=%1
504 set TMP=%CD%
505 nmake /f $srcdir\\Makefile.msc TOP="$srcdir" %TARGET% "CCOPTS=$cflags" "OPTS=$opts" $makeOpts
510 # Generate the text of a shell script.
512 proc make_script {cfg srcdir bMsvc} {
513 set opts [list] ;# OPTS value
514 set cflags [expr {$bMsvc ? "-Zi" : "-g"}] ;# CFLAGS value
515 set makeOpts [list] ;# Extra args for [make]
516 set configOpts [list] ;# Extra args for [configure]
518 # Define either SQLITE_OS_WIN or SQLITE_OS_UNIX, as appropriate.
519 if {$::tcl_platform(platform)=="windows"} {
520 lappend opts -DSQLITE_OS_WIN=1
521 } else {
522 lappend opts -DSQLITE_OS_UNIX=1
525 # Unless the configuration specifies -DHAVE_USLEEP=0, set -DHAVE_USLEEP=1.
527 if {[lsearch $cfg "-DHAVE_USLEEP=0"]<0} {
528 lappend cfg -DHAVE_USLEEP=1
531 # Loop through the parameters of the nominated configuration, updating
532 # $opts, $cflags, $makeOpts and $configOpts along the way. Rules are as
533 # follows:
535 # 1. If the parameter begins with "-D", add it to $opts.
537 # 2. If the parameter begins with "--" add it to $configOpts. Unless
538 # this command is preparing a script for MSVC - then add an
539 # equivalent to $makeOpts or $opts.
541 # 3. If the parameter begins with "-" add it to $cflags. If in MSVC
542 # mode and the parameter is an -O<integer> option, instead add
543 # an OPTIMIZATIONS=<integer> switch to $makeOpts.
545 # 4. If none of the above apply, add the parameter to $makeOpts
547 foreach param $cfg {
549 if {[string range $param 0 1]=="-D"} {
550 lappend opts $param
551 continue
554 if {[string range $param 0 1]=="--"} {
555 if {$bMsvc==0} {
556 lappend configOpts $param
557 } else {
559 switch -- $param {
560 --disable-amalgamation {
561 lappend makeOpts USE_AMALGAMATION=0
563 --disable-shared {
564 lappend makeOpts USE_CRT_DLL=0 DYNAMIC_SHELL=0
566 --enable-fts5 {
567 lappend opts -DSQLITE_ENABLE_FTS5
569 --enable-shared {
570 lappend makeOpts USE_CRT_DLL=1 DYNAMIC_SHELL=1
572 --enable-session {
573 lappend opts -DSQLITE_ENABLE_PREUPDATE_HOOK
574 lappend opts -DSQLITE_ENABLE_SESSION
576 --enable-all {
578 --enable-debug {
579 # lappend makeOpts OPTIMIZATIONS=0
580 lappend opts -DSQLITE_DEBUG
582 default {
583 error "Cannot translate $param for MSVC"
588 continue
591 if {[string range $param 0 0]=="-"} {
593 if {$bMsvc} {
594 if {[regexp -- {^-O(\d+)$} $param -> level]} {
595 lappend makeOpts OPTIMIZATIONS=$level
596 continue
598 if {$param eq "-fsanitize=address,undefined"} {
599 lappend makeOpts ASAN=1
600 continue
604 lappend cflags $param
605 continue
608 lappend makeOpts $param
611 if {$bMsvc==0} {
612 set zRet [make_sh_script $srcdir $opts $cflags $makeOpts $configOpts]
613 } else {
614 set zRet [make_bat_file $srcdir $opts $cflags $makeOpts]
618 # Usage:
620 # trd_buildscript CONFIG SRCDIR MSVC
622 # This command returns the full text of a script (either a shell script or
623 # an ms-dos bat file) that may be used to build SQLite source code according
624 # to a nominated configuration.
626 # Parameter CONFIG must be a configuration defined above in the ::trd::build
627 # array. SRCDIR is the root directory of an SQLite source tree (the parent
628 # directory of that containing this script). MSVC is a boolean - true to
629 # use the MSVC compiler, false otherwise.
631 proc trd_buildscript {config srcdir bMsvc} {
632 trd_import
634 # Ensure that the named configuration exists.
635 if {![info exists build($config)]} {
636 if {$config!="help"} {
637 puts "No such build config: $config"
639 puts "Available configurations: [lsort [array names build]]"
640 flush stdout
641 exit 1
644 # Generate and return the script.
645 return [make_script $build($config) $srcdir $bMsvc]
648 # Usage:
650 # trd_test_script_properties PATH
652 # The argument must be a path to a Tcl test script. This function scans the
653 # first 100 lines of the script for lines that look like:
655 # TESTRUNNER: <properties>
657 # where <properties> is a list of identifiers, each of which defines a
658 # property of the test script. Example properties are "slow" or "superslow".
660 proc trd_test_script_properties {path} {
661 # Use this global array as a cache:
662 global trd_test_script_properties_cache
664 if {![info exists trd_test_script_properties_cache($path)]} {
665 set fd [open $path]
666 set ret [list]
667 for {set line 0} {$line < 100 && ![eof $fd]} {incr line} {
668 set text [gets $fd]
669 if {[string match -nocase *testrunner:* $text]} {
670 regexp -nocase {.*testrunner:(.*)} $text -> properties
671 lappend ret {*}$properties
674 set trd_test_script_properties_cache($path) $ret
675 close $fd
678 set trd_test_script_properties_cache($path)