Move some code to libsqlite3.so to avoid duplication.
Initialize some extensions in libsqlite3.so.
Update test suite.

SQLite revision: a26b6597e3ae272231b96f9982c3bcc17ddec2f2b6eb4df06a224b91089fed5b

--- /ext/repair/sqlite3_checker.c.in
+++ /ext/repair/sqlite3_checker.c.in
@@ -2,6 +2,7 @@
 ** Read an SQLite database file and analyze its space utilization.  Generate
 ** text on standard output.
 */
+#define SQLITE_CORE 1
 #define TCLSH_INIT_PROC sqlite3_checker_init_proc
 #define SQLITE_ENABLE_DBPAGE_VTAB 1
 #define SQLITE_ENABLE_JSON1 1
@@ -14,7 +15,7 @@
 #define SQLITE_OMIT_SHARED_CACHE 1
 #define SQLITE_DEFAULT_MEMSTATUS 0
 #define SQLITE_MAX_EXPR_DEPTH 0
-INCLUDE sqlite3.c
+#include "sqlite3.h"
 INCLUDE $ROOT/src/tclsqlite.c
 INCLUDE $ROOT/ext/misc/btreeinfo.c
 INCLUDE $ROOT/ext/repair/checkindex.c
--- /src/main.c
+++ /src/main.c
@@ -50,12 +50,36 @@
 #ifdef SQLITE_ENABLE_FTS5
 int sqlite3Fts5Init(sqlite3*);
 #endif
+#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB)
+int sqlite3DbdataRegister(sqlite3*);
+#endif
 #ifdef SQLITE_ENABLE_JSON1
 int sqlite3Json1Init(sqlite3*);
 #endif
 #ifdef SQLITE_ENABLE_STMTVTAB
 int sqlite3StmtVtabInit(sqlite3*);
 #endif
+int sqlite3AmatchInit(sqlite3*);
+int sqlite3CarrayInit(sqlite3*);
+int sqlite3CompletionVtabInit(sqlite3*);
+int sqlite3CsvInit(sqlite3*);
+int sqlite3DecimalInit(sqlite3*);
+int sqlite3EvalInit(sqlite3*);
+int sqlite3FileioInit(sqlite3*);
+int sqlite3IeeeInit(sqlite3*);
+int sqlite3NextcharInit(sqlite3*);
+int sqlite3PercentileInit(sqlite3*);
+int sqlite3RegexpInit(sqlite3*);
+int sqlite3SeriesInit(sqlite3*);
+int sqlite3ShaInit(sqlite3*);
+int sqlite3ShathreeInit(sqlite3*);
+int sqlite3TotypeInit(sqlite3*);
+int sqlite3UintInit(sqlite3*);
+int sqlite3UuidInit(sqlite3*);
+#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB)
+int sqlite3ZipfileInit(sqlite3*);
+int sqlite3SqlarInit(sqlite3*);
+#endif
 
 /*
 ** An array of pointers to extension initializer functions for
@@ -83,6 +107,9 @@
 #ifdef SQLITE_ENABLE_DBPAGE_VTAB
   sqlite3DbpageRegister,
 #endif
+#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB)
+  sqlite3DbdataRegister,
+#endif
 #ifdef SQLITE_ENABLE_DBSTAT_VTAB
   sqlite3DbstatRegister,
 #endif
@@ -96,6 +123,27 @@
 #ifdef SQLITE_ENABLE_BYTECODE_VTAB
   sqlite3VdbeBytecodeVtabInit,
 #endif
+  sqlite3AmatchInit,
+  sqlite3CarrayInit,
+  sqlite3CompletionVtabInit,
+  sqlite3CsvInit,
+  sqlite3DecimalInit,
+  sqlite3EvalInit,
+  sqlite3FileioInit,
+  sqlite3IeeeInit,
+  sqlite3NextcharInit,
+  sqlite3PercentileInit,
+  sqlite3RegexpInit,
+  sqlite3SeriesInit,
+  sqlite3ShaInit,
+  sqlite3ShathreeInit,
+  sqlite3TotypeInit,
+  sqlite3UintInit,
+  sqlite3UuidInit,
+#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB)
+  sqlite3ZipfileInit,
+  sqlite3SqlarInit,
+#endif
 };
 
 #ifndef SQLITE_AMALGAMATION
--- /src/shell.c.in
+++ /src/shell.c.in
@@ -69,6 +69,7 @@
 #include <stdio.h>
 #include <assert.h>
 #include "sqlite3.h"
+#include "ext/expert/sqlite3expert.h"
 typedef sqlite3_int64 i64;
 typedef sqlite3_uint64 u64;
 typedef unsigned char u8;
@@ -135,6 +136,10 @@
 # define SHELL_USE_LOCAL_GETLINE 1
 #endif
 
+#ifdef SQLITE_HAVE_ZLIB
+#include <zlib.h>
+#endif
+
 
 #if defined(_WIN32) || defined(WIN32)
 # if SQLITE_OS_WINRT
@@ -1018,25 +1023,7 @@
 INCLUDE test_windirent.c
 #define dirent DIRENT
 #endif
-INCLUDE ../ext/misc/shathree.c
-INCLUDE ../ext/misc/fileio.c
-INCLUDE ../ext/misc/completion.c
-INCLUDE ../ext/misc/appendvfs.c
 INCLUDE ../ext/misc/memtrace.c
-INCLUDE ../ext/misc/uint.c
-INCLUDE ../ext/misc/decimal.c
-INCLUDE ../ext/misc/ieee754.c
-INCLUDE ../ext/misc/series.c
-#ifdef SQLITE_HAVE_ZLIB
-INCLUDE ../ext/misc/zipfile.c
-INCLUDE ../ext/misc/sqlar.c
-#endif
-INCLUDE ../ext/expert/sqlite3expert.h
-INCLUDE ../ext/expert/sqlite3expert.c
-
-#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB)
-INCLUDE ../ext/misc/dbdata.c
-#endif
 
 #if defined(SQLITE_ENABLE_SESSION)
 /*
@@ -4608,20 +4595,6 @@
 #ifndef SQLITE_OMIT_LOAD_EXTENSION
     sqlite3_enable_load_extension(p->db, 1);
 #endif
-    sqlite3_fileio_init(p->db, 0, 0);
-    sqlite3_shathree_init(p->db, 0, 0);
-    sqlite3_completion_init(p->db, 0, 0);
-    sqlite3_uint_init(p->db, 0, 0);
-    sqlite3_decimal_init(p->db, 0, 0);
-    sqlite3_ieee_init(p->db, 0, 0);
-    sqlite3_series_init(p->db, 0, 0);
-#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB)
-    sqlite3_dbdata_init(p->db, 0, 0);
-#endif
-#ifdef SQLITE_HAVE_ZLIB
-    sqlite3_zipfile_init(p->db, 0, 0);
-    sqlite3_sqlar_init(p->db, 0, 0);
-#endif
     sqlite3_create_function(p->db, "shell_add_schema", 3, SQLITE_UTF8, 0,
                             shellAddSchemaName, 0, 0);
     sqlite3_create_function(p->db, "shell_module_schema", 1, SQLITE_UTF8, 0,
@@ -6644,8 +6617,6 @@
         );
         goto end_ar_command;
       }
-      sqlite3_fileio_init(cmd.db, 0, 0);
-      sqlite3_sqlar_init(cmd.db, 0, 0);
       sqlite3_create_function(cmd.db, "shell_putsnl", 1, SQLITE_UTF8, cmd.p,
                               shellPutsFunc, 0, 0);
 
@@ -11076,6 +11047,7 @@
 #endif
   }
   data.out = stdout;
+  extern int sqlite3_appendvfs_init(sqlite3 *, char **, const sqlite3_api_routines *);
   sqlite3_appendvfs_init(0,0,0);
 
   /* Go ahead and open the database file if it already exists.  If the
--- /src/test_config.c
+++ /src/test_config.c
@@ -353,6 +353,8 @@
   Tcl_SetVar2(interp, "sqlite_options", "datetime", "1", TCL_GLOBAL_ONLY);
 #endif
 
+  Tcl_SetVar2(interp, "sqlite_options", "decimal", "1", TCL_GLOBAL_ONLY);
+
 #ifdef SQLITE_OMIT_DECLTYPE
   Tcl_SetVar2(interp, "sqlite_options", "decltype", "0", TCL_GLOBAL_ONLY);
 #else
@@ -540,6 +542,8 @@
   Tcl_SetVar2(interp, "sqlite_options", "progress", "1", TCL_GLOBAL_ONLY);
 #endif
 
+  Tcl_SetVar2(interp, "sqlite_options", "regexp", "1", TCL_GLOBAL_ONLY);
+
 #ifdef SQLITE_OMIT_REINDEX
   Tcl_SetVar2(interp, "sqlite_options", "reindex", "0", TCL_GLOBAL_ONLY);
 #else
@@ -662,6 +666,8 @@
   Tcl_SetVar2(interp, "sqlite_options", "truncate_opt", "1", TCL_GLOBAL_ONLY);
 #endif
 
+  Tcl_SetVar2(interp, "sqlite_options", "uint", "1", TCL_GLOBAL_ONLY);
+
 #ifdef SQLITE_OMIT_UTF16
   Tcl_SetVar2(interp, "sqlite_options", "utf16", "0", TCL_GLOBAL_ONLY);
 #else
--- /test/e_expr.test
+++ /test/e_expr.test
@@ -1079,7 +1079,7 @@
 #
 #   There is a regexp function if ICU is enabled though.
 #
-ifcapable !icu {
+ifcapable !icu&&!regexp {
   do_catchsql_test e_expr-18.1.1 { 
     SELECT regexp('abc', 'def') 
   } {1 {no such function: regexp}}
--- /test/icu.test
+++ /test/icu.test
@@ -41,7 +41,7 @@
   #
   test_expr icu-1.1 {i1='hello'} {i1 REGEXP 'hello'}  1
   test_expr icu-1.2 {i1='hello'} {i1 REGEXP '.ello'}  1
-  test_expr icu-1.3 {i1='hello'} {i1 REGEXP '.ell'}   0
+  test_expr icu-1.3 {i1='hello'} {i1 REGEXP '.ell$'}  0
   test_expr icu-1.4 {i1='hello'} {i1 REGEXP '.ell.*'} 1
   test_expr icu-1.5 {i1=NULL}    {i1 REGEXP '.ell.*'} {}
 
--- /test/pragma.test
+++ /test/pragma.test
@@ -1370,17 +1370,62 @@
 } ;# ifcapable trigger
 
 ifcapable schema_pragmas {
-  do_test pragma-11.1 {
-    execsql2 {
-      pragma collation_list;
+  ifcapable decimal {
+    ifcapable uint {
+      do_test pragma-11.1 {
+        execsql2 {
+          pragma collation_list;
+        }
+      } {seq 0 name UINT seq 1 name decimal seq 2 name RTRIM seq 3 name NOCASE seq 4 name BINARY}
+      do_test pragma-11.2 {
+        db collate New_Collation blah...
+        execsql {
+          pragma collation_list;
+        }
+      } {0 New_Collation 1 UINT 2 decimal 3 RTRIM 4 NOCASE 5 BINARY}
     }
-  } {seq 0 name RTRIM seq 1 name NOCASE seq 2 name BINARY}
-  do_test pragma-11.2 {
-    db collate New_Collation blah...
-    execsql {
-      pragma collation_list;
+    ifcapable !uint {
+      do_test pragma-11.1 {
+        execsql2 {
+          pragma collation_list;
+        }
+      } {seq 0 name decimal seq 1 name RTRIM seq 2 name NOCASE seq 3 name BINARY}
+      do_test pragma-11.2 {
+        db collate New_Collation blah...
+        execsql {
+          pragma collation_list;
+        }
+      } {0 New_Collation 1 decimal 2 RTRIM 3 NOCASE 4 BINARY}
     }
-  } {0 New_Collation 1 RTRIM 2 NOCASE 3 BINARY}
+  }
+  ifcapable !decimal {
+    ifcapable uint {
+      do_test pragma-11.1 {
+        execsql2 {
+          pragma collation_list;
+        }
+      } {seq 0 name UINT seq 1 name RTRIM seq 2 name NOCASE seq 3 name BINARY}
+      do_test pragma-11.2 {
+        db collate New_Collation blah...
+        execsql {
+          pragma collation_list;
+        }
+      } {0 New_Collation 1 UINT 2 RTRIM 3 NOCASE 4 BINARY}
+    }
+    ifcapable !uint {
+      do_test pragma-11.1 {
+        execsql2 {
+          pragma collation_list;
+        }
+      } {seq 0 name RTRIM seq 1 name NOCASE seq 2 name BINARY}
+      do_test pragma-11.2 {
+        db collate New_Collation blah...
+        execsql {
+          pragma collation_list;
+        }
+      } {0 New_Collation 1 RTRIM 2 NOCASE 3 BINARY}
+    }
+  }
 }
 
 ifcapable schema_pragmas&&tempdb {
--- /test/sessionfuzz.c
+++ /test/sessionfuzz.c
@@ -698,49 +698,6 @@
 #include <stdio.h>
 #include <string.h>
 #include <assert.h>
-#ifndef OMIT_ZLIB
-#include "zlib.h"
-#endif
-
-/*
-** Implementation of the "sqlar_uncompress(X,SZ)" SQL function
-**
-** Parameter SZ is interpreted as an integer. If it is less than or
-** equal to zero, then this function returns a copy of X. Or, if
-** SZ is equal to the size of X when interpreted as a blob, also
-** return a copy of X. Otherwise, decompress blob X using zlib
-** utility function uncompress() and return the results (another
-** blob).
-*/
-static void sqlarUncompressFunc(
-  sqlite3_context *context,
-  int argc,
-  sqlite3_value **argv
-){
-#ifdef OMIT_ZLIB
-  sqlite3_result_value(context, argv[0]);
-#else
-  uLong nData;
-  uLongf sz;
-
-  assert( argc==2 );
-  sz = sqlite3_value_int(argv[1]);
-
-  if( sz<=0 || sz==(nData = sqlite3_value_bytes(argv[0])) ){
-    sqlite3_result_value(context, argv[0]);
-  }else{
-    const Bytef *pData= sqlite3_value_blob(argv[0]);
-    Bytef *pOut = sqlite3_malloc(sz);
-    if( Z_OK!=uncompress(pOut, &sz, pData, nData) ){
-      sqlite3_result_error(context, "error in uncompress()", -1);
-    }else{
-      sqlite3_result_blob(context, pOut, sz, SQLITE_TRANSIENT);
-    }
-    sqlite3_free(pOut);
-  }
-#endif
-}
-
 
 /* Run a chunk of SQL.  If any errors happen, print an error message
 ** and exit.
--- /tool/mksqlite3c.tcl
+++ /tool/mksqlite3c.tcl
@@ -129,6 +129,7 @@
    rtree.h
    sqlite3session.h
    sqlite3.h
+   sqlite3expert.h
    sqlite3ext.h
    sqlite3rbu.h
    sqliteicu.h
@@ -416,6 +417,28 @@
    sqlite3session.c
    fts5.c
    stmt.c
+   amatch.c
+   appendvfs.c
+   carray.c
+   completion.c
+   csv.c
+   dbdata.c
+   decimal.c
+   eval.c
+   fileio.c
+   ieee754.c
+   nextchar.c
+   percentile.c
+   regexp.c
+   series.c
+   sha1.c
+   shathree.c
+   sqlar.c
+   sqlite3expert.c
+   totype.c
+   uint.c
+   uuid.c
+   zipfile.c
 } {
   copy_file tsrc/$file
 }
--- /tool/sqlite3_analyzer.c.in
+++ /tool/sqlite3_analyzer.c.in
@@ -14,9 +14,6 @@
 #define SQLITE_DEFAULT_MEMSTATUS 0
 #define SQLITE_MAX_EXPR_DEPTH 0
 #define SQLITE_OMIT_LOAD_EXTENSION 1
-#ifndef USE_EXTERNAL_SQLITE
-INCLUDE sqlite3.c
-#endif
 INCLUDE $ROOT/src/tclsqlite.c
 
 const char *sqlite3_analyzer_init_proc(Tcl_Interp *interp){
--- /tool/sqltclsh.c.in
+++ /tool/sqltclsh.c.in
@@ -27,21 +27,13 @@
 #define SQLITE_OMIT_SHARED_CACHE 1
 #define SQLITE_DEFAULT_MEMSTATUS 0
 #define SQLITE_MAX_EXPR_DEPTH 0
-INCLUDE sqlite3.c
-INCLUDE $ROOT/ext/misc/appendvfs.c
-#ifdef SQLITE_HAVE_ZLIB
-INCLUDE $ROOT/ext/misc/zipfile.c
-INCLUDE $ROOT/ext/misc/sqlar.c
-#endif
+#include "sqlite3.h"
 INCLUDE $ROOT/src/tclsqlite.c
 
 const char *sqlite3_tclapp_init_proc(Tcl_Interp *interp){
   (void)interp;
+  extern int sqlite3_appendvfs_init(sqlite3 *,char **, const sqlite3_api_routines *);
   sqlite3_appendvfs_init(0,0,0);
-#ifdef SQLITE_HAVE_ZLIB
-  sqlite3_auto_extension((void(*)(void))sqlite3_sqlar_init);
-  sqlite3_auto_extension((void(*)(void))sqlite3_zipfile_init);
-#endif
 
   return
 BEGIN_STRING
