Index: third_party/sqlite/src/test/releasetest.tcl |
diff --git a/third_party/sqlite/src/test/releasetest.tcl b/third_party/sqlite/src/test/releasetest.tcl |
old mode 100644 |
new mode 100755 |
index bb902eec3eac98c8b97c6e824af2c65934802136..99823e3b1c3f458e14f1c5c6704ee1ac6c99ec9d |
--- a/third_party/sqlite/src/test/releasetest.tcl |
+++ b/third_party/sqlite/src/test/releasetest.tcl |
@@ -9,21 +9,19 @@ This Tcl script is used to test the various configurations required |
before releasing a new version. Supported command line options (all |
optional) are: |
- --srcdir TOP-OF-SQLITE-TREE (see below) |
- --platform PLATFORM (see below) |
- --config CONFIGNAME (Run only CONFIGNAME) |
- --quick (Run "veryquick.test" only) |
- --veryquick (Run "make smoketest" only) |
- --msvc (Use MSVC as the compiler) |
--buildonly (Just build testfixture - do not run) |
+ --config CONFIGNAME (Run only CONFIGNAME) |
--dryrun (Print what would have happened) |
+ -f|--force (Run even if uncommitted changes) |
--info (Show diagnostic info) |
- --with-tcl=DIR (Use TCL build at DIR) |
--jobs N (Use N processes - default 1) |
+ --keep (Delete no files after each test run) |
+ --msvc (Use MSVC as the compiler) |
+ --platform PLATFORM (see below) |
--progress (Show progress messages) |
- |
-The default value for --srcdir is the parent of the directory holding |
-this script. |
+ --quick (Run "veryquick.test" only) |
+ --veryquick (Run "make smoketest" only) |
+ --with-tcl=DIR (Use TCL build at DIR) |
The script determines the default value for --platform using the |
$tcl_platform(os) and $tcl_platform(machine) variables. Supported |
@@ -51,10 +49,16 @@ array set ::Configs [strip_comments { |
"Default" { |
-O2 |
--disable-amalgamation --disable-shared |
+ --enable-session |
} |
"Sanitize" { |
CC=clang -fsanitize=undefined |
-DSQLITE_ENABLE_STAT4 |
+ --enable-session |
+ } |
+ "Stdcall" { |
+ -DUSE_STDCALL=1 |
+ -O2 |
} |
"Have-Not" { |
# The "Have-Not" configuration sets all possible -UHAVE_feature options |
@@ -106,7 +110,7 @@ array set ::Configs [strip_comments { |
-DSQLITE_ENABLE_OVERSIZE_CELL_CHECK=1 |
-DSQLITE_ENABLE_STAT4 |
-DSQLITE_ENABLE_STMT_SCANSTATUS |
- --enable-json1 --enable-fts5 |
+ --enable-json1 --enable-fts5 --enable-session |
} |
"Debug-One" { |
--disable-shared |
@@ -118,7 +122,6 @@ array set ::Configs [strip_comments { |
-DSQLITE_ENABLE_FTS3=1 |
-DSQLITE_ENABLE_RTREE=1 |
-DSQLITE_ENABLE_MEMSYS5=1 |
- -DSQLITE_ENABLE_MEMSYS3=1 |
-DSQLITE_ENABLE_COLUMN_METADATA=1 |
-DSQLITE_ENABLE_STAT4 |
-DSQLITE_ENABLE_HIDDEN_COLUMNS |
@@ -132,6 +135,7 @@ array set ::Configs [strip_comments { |
-DSQLITE_ENABLE_RBU |
-DSQLITE_MAX_ATTACHED=125 |
-DLONGDOUBLE_TYPE=double |
+ --enable-session |
} |
"Device-One" { |
-O2 |
@@ -168,30 +172,53 @@ array set ::Configs [strip_comments { |
-DSQLITE_OMIT_TRACE=1 |
-DSQLITE_TEMP_STORE=3 |
-DSQLITE_THREADSAFE=2 |
- --enable-json1 --enable-fts5 |
+ --enable-json1 --enable-fts5 --enable-session |
} |
"Locking-Style" { |
-O2 |
-DSQLITE_ENABLE_LOCKING_STYLE=1 |
} |
- "OS-X" { |
+ "Apple" { |
-O1 # Avoid a compiler bug in gcc 4.2.1 build 5658 |
- -DSQLITE_OMIT_LOAD_EXTENSION=1 |
- -DSQLITE_DEFAULT_MEMSTATUS=0 |
- -DSQLITE_THREADSAFE=2 |
- -DSQLITE_OS_UNIX=1 |
- -DSQLITE_ENABLE_JSON1=1 |
- -DSQLITE_ENABLE_LOCKING_STYLE=1 |
- -DUSE_PREAD=1 |
- -DSQLITE_ENABLE_RTREE=1 |
+ -DHAVE_GMTIME_R=1 |
+ -DHAVE_ISNAN=1 |
+ -DHAVE_LOCALTIME_R=1 |
+ -DHAVE_PREAD=1 |
+ -DHAVE_PWRITE=1 |
+ -DHAVE_USLEEP=1 |
+ -DHAVE_USLEEP=1 |
+ -DHAVE_UTIME=1 |
+ -DSQLITE_DEFAULT_CACHE_SIZE=1000 |
+ -DSQLITE_DEFAULT_CKPTFULLFSYNC=1 |
+ -DSQLITE_DEFAULT_MEMSTATUS=1 |
+ -DSQLITE_DEFAULT_PAGE_SIZE=1024 |
+ -DSQLITE_DISABLE_PAGECACHE_OVERFLOW_STATS=1 |
+ -DSQLITE_ENABLE_API_ARMOR=1 |
+ -DSQLITE_ENABLE_AUTO_PROFILE=1 |
+ -DSQLITE_ENABLE_FLOCKTIMEOUT=1 |
-DSQLITE_ENABLE_FTS3=1 |
-DSQLITE_ENABLE_FTS3_PARENTHESIS=1 |
- -DSQLITE_DEFAULT_CACHE_SIZE=1000 |
+ -DSQLITE_ENABLE_FTS3_TOKENIZER=1 |
+ if:os=="Darwin" -DSQLITE_ENABLE_LOCKING_STYLE=1 |
+ -DSQLITE_ENABLE_PERSIST_WAL=1 |
+ -DSQLITE_ENABLE_PURGEABLE_PCACHE=1 |
+ -DSQLITE_ENABLE_RTREE=1 |
+ -DSQLITE_ENABLE_SNAPSHOT=1 |
+ # -DSQLITE_ENABLE_SQLLOG=1 |
+ -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1 |
-DSQLITE_MAX_LENGTH=2147483645 |
-DSQLITE_MAX_VARIABLE_NUMBER=500000 |
- -DSQLITE_DEBUG=1 |
+ # -DSQLITE_MEMDEBUG=1 |
+ -DSQLITE_NO_SYNC=1 |
+ -DSQLITE_OMIT_AUTORESET=1 |
+ -DSQLITE_OMIT_LOAD_EXTENSION=1 |
-DSQLITE_PREFER_PROXY_LOCKING=1 |
- -DSQLITE_ENABLE_API_ARMOR=1 |
+ -DSQLITE_SERIES_CONSTRAINT_VERIFY=1 |
+ -DSQLITE_THREADSAFE=2 |
+ -DSQLITE_USE_URI=1 |
+ -DSQLITE_WRITE_WALFRAME_PREBUFFERED=1 |
+ -DUSE_GUARDED_FD=1 |
+ -DUSE_PREAD=1 |
--enable-json1 --enable-fts5 |
} |
"Extra-Robustness" { |
@@ -203,6 +230,7 @@ array set ::Configs [strip_comments { |
-DSQLITE_MAX_ATTACHED=30 |
-DSQLITE_ENABLE_COLUMN_METADATA |
-DSQLITE_ENABLE_FTS4 |
+ -DSQLITE_ENABLE_FTS5 |
-DSQLITE_ENABLE_FTS4_PARENTHESIS |
-DSQLITE_DISABLE_FTS4_DEFERRED |
-DSQLITE_ENABLE_RTREE |
@@ -247,6 +275,7 @@ array set ::Platforms [strip_comments { |
"Device-Two" test |
"No-lookaside" test |
"Devkit" test |
+ "Apple" test |
"Sanitize" {QUICKTEST_OMIT=func4.test,nan.test test} |
"Device-One" fulltest |
"Default" "threadtest fulltest" |
@@ -263,18 +292,20 @@ array set ::Platforms [strip_comments { |
Darwin-i386 { |
"Locking-Style" "mptest test" |
"Have-Not" test |
- "OS-X" "threadtest fulltest" |
+ "Apple" "threadtest fulltest" |
} |
Darwin-x86_64 { |
"Locking-Style" "mptest test" |
"Have-Not" test |
- "OS-X" "threadtest fulltest" |
+ "Apple" "threadtest fulltest" |
} |
"Windows NT-intel" { |
+ "Stdcall" test |
"Have-Not" test |
"Default" "mptest fulltestonly" |
} |
"Windows NT-amd64" { |
+ "Stdcall" test |
"Have-Not" test |
"Default" "mptest fulltestonly" |
} |
@@ -437,14 +468,15 @@ proc count_tests_and_errors {logfile rcVar errmsgVar} { |
proc run_slave_test {} { |
# Read global vars configuration from stdin. |
set V [gets stdin] |
- foreach {::TRACE ::MSVC ::DRYRUN} $V {} |
+ foreach {::TRACE ::MSVC ::DRYRUN ::KEEPFILES} $V {} |
# Read the test-suite configuration from stdin. |
set T [gets stdin] |
foreach {title dir configOpts testtarget makeOpts cflags opts} $T {} |
# Create and switch to the test directory. |
- set ::env(SQLITE_TMPDIR) [file normalize $dir] |
+ set normaldir [file normalize $dir] |
+ set ::env(SQLITE_TMPDIR) $normaldir |
trace_cmd file mkdir $dir |
trace_cmd cd $dir |
catch {file delete core} |
@@ -468,6 +500,9 @@ proc run_slave_test {} { |
} |
} |
+ # Clean up lots of extra files if --keep was not specified. |
+ if {$::KEEPFILES==0} { cleanup $normaldir } |
+ |
# Exis successfully if the test passed, or with a non-zero error code |
# otherwise. |
exit $rc |
@@ -567,7 +602,7 @@ proc run_all_test_suites {alltests} { |
set fd [open "|[info nameofexecutable] $script --slave" r+] |
fconfigure $fd -blocking 0 |
fileevent $fd readable [list slave_fileevent $fd $T $tm1] |
- puts $fd [list $::TRACE $::MSVC $::DRYRUN] |
+ puts $fd [list $::TRACE $::MSVC $::DRYRUN $::KEEPFILES] |
puts $fd [list {*}$T] |
flush $fd |
} |
@@ -587,13 +622,23 @@ proc add_test_suite {listvar name testtarget config} { |
set opts "" |
set title ${name}($testtarget) |
set configOpts $::WITHTCL |
+ set skip 0 |
regsub -all {#[^\n]*\n} $config \n config |
foreach arg $config { |
+ if {$skip} { |
+ set skip 0 |
+ continue |
+ } |
if {[regexp {^-[UD]} $arg]} { |
lappend opts $arg |
} elseif {[regexp {^[A-Z]+=} $arg]} { |
lappend testtarget $arg |
+ } elseif {[regexp {^if:([a-z]+)(.*)} $arg all key tail]} { |
+ # Arguments of the form 'if:os=="Linux"' will cause the subsequent |
+ # argument to be skipped if the $tcl_platform(os) is not "Linux", for |
+ # example... |
+ set skip [expr !(\$::tcl_platform($key)$tail)] |
} elseif {[regexp {^--(enable|disable)-} $arg]} { |
if {$::MSVC} { |
if {$arg eq "--disable-amalgamation"} { |
@@ -688,6 +733,9 @@ proc makeCommand { targets makeOpts cflags opts } { |
set nmakeDir [file nativename $::SRCDIR] |
set nmakeFile [file nativename [file join $nmakeDir Makefile.msc]] |
lappend result nmake /f $nmakeFile TOP=$nmakeDir |
+ if {[regexp {USE_STDCALL=1} $cflags]} { |
+ lappend result USE_STDCALL=1 |
+ } |
} else { |
lappend result make |
} |
@@ -732,6 +780,8 @@ proc process_options {argv} { |
set ::JOBS 1 |
set ::PROGRESS_MSGS 0 |
set ::WITHTCL {} |
+ set ::FORCE 0 |
+ set ::KEEPFILES 0 ;# Keep extra files after test run |
set config {} |
set platform $::tcl_platform(os)-$::tcl_platform(machine) |
@@ -744,6 +794,12 @@ proc process_options {argv} { |
exit |
} |
+ # Undocumented legacy option: --srcdir DIRECTORY |
+ # |
+ # DIRECTORY is the root of the SQLite checkout. This sets the |
+ # SRCDIR global variable. But that variable is already set |
+ # automatically so there really is no reason to have this option. |
+ # |
-srcdir { |
incr i |
set ::SRCDIR [file normalize [lindex $argv $i]] |
@@ -787,6 +843,11 @@ proc process_options {argv} { |
set ::DRYRUN 1 |
} |
+ -force - |
+ -f { |
+ set ::FORCE 1 |
+ } |
+ |
-trace { |
set ::TRACE 1 |
} |
@@ -819,6 +880,10 @@ proc process_options {argv} { |
lappend ::EXTRACONFIG [lindex $argv $i] |
} |
+ -keep { |
+ set ::KEEPFILES 1 |
+ } |
+ |
-with-tcl=* { |
set ::WITHTCL -$x |
} |
@@ -880,6 +945,47 @@ proc process_options {argv} { |
PUTS "" |
} |
+# Check to see if there are uncommitted changes in the SQLite source |
+# checkout. Exit if there are. Except: Do nothing if the --force |
+# flag is used. Also, ignore this test if the fossil binary is |
+# unavailable, or if the source tree is not a valid fossil checkout. |
+# |
+proc check_uncommitted {} { |
+ if {$::FORCE} return |
+ set pwd [pwd] |
+ cd $::SRCDIR |
+ if {[catch {exec fossil changes} res]==0 && [string trim $res]!=""} { |
+ puts "ERROR: The check-out contains uncommitted changes:" |
+ puts $res |
+ puts "Use the -f or --force options to override" |
+ exit 1 |
+ } |
+ cd $pwd |
+} |
+ |
+# A test run has just finished in directory $dir. This command deletes all |
+# non-essential files from the directory. Specifically, everything except |
+# |
+# * The "testfixture" and "sqlite3" binaries, |
+# * The "test-out.log" and "test.log" log files. |
+# |
+proc cleanup {dir} { |
+ set K(testfixture) 1 |
+ set K(testfixture.exe) 1 |
+ set K(sqlite3) 1 |
+ set K(sqlite3.exe) 1 |
+ set K(test-out.txt) 1 |
+ set K(test.log) 1 |
+ |
+ foreach f [glob -nocomplain [file join $dir *]] { |
+ set tail [file tail $f] |
+ if {[info exists K($tail)]==0} { |
+ file delete -force $f |
+ } |
+ } |
+} |
+ |
+ |
# Main routine. |
# |
proc main {argv} { |
@@ -887,6 +993,7 @@ proc main {argv} { |
# Process any command line options. |
set ::EXTRACONFIG {} |
process_options $argv |
+ if {!$::DRYRUN} check_uncommitted |
PUTS [string repeat * 79] |
set ::NERR 0 |