Enable some extensions in libsqlite3.so.
Move some code to libsqlite3.so to avoid duplication.
Link executables against libsqlite3.so.
Increase timeout for fuzzcheck.
Fix building with dlopen() not available.

--- /Makefile.in
+++ /Makefile.in
@@ -313,6 +313,9 @@
 # Source code for extensions
 #
 SRC += \
+  $(TOP)/ext/expert/sqlite3expert.c \
+  $(TOP)/ext/expert/sqlite3expert.h
+SRC += \
   $(TOP)/ext/fts1/fts1.c \
   $(TOP)/ext/fts1/fts1.h \
   $(TOP)/ext/fts1/fts1_hash.c \
@@ -365,8 +368,24 @@
   $(TOP)/ext/rbu/sqlite3rbu.h \
   $(TOP)/ext/rbu/sqlite3rbu.c
 SRC += \
+  $(TOP)/ext/misc/appendvfs.c \
+  $(TOP)/ext/misc/carray.c \
+  $(TOP)/ext/misc/completion.c \
+  $(TOP)/ext/misc/csv.c \
+  $(TOP)/ext/misc/dbdata.c \
+  $(TOP)/ext/misc/eval.c \
+  $(TOP)/ext/misc/fileio.c \
+  $(TOP)/ext/misc/ieee754.c \
   $(TOP)/ext/misc/json1.c \
-  $(TOP)/ext/misc/stmt.c
+  $(TOP)/ext/misc/regexp.c \
+  $(TOP)/ext/misc/sha1.c \
+  $(TOP)/ext/misc/shathree.c \
+  $(TOP)/ext/misc/sqlar.c \
+  $(TOP)/ext/misc/stmt.c \
+  $(TOP)/ext/misc/totype.c \
+  $(TOP)/ext/misc/uint.c \
+  $(TOP)/ext/misc/uuid.c \
+  $(TOP)/ext/misc/zipfile.c
 
 # Generated source code files
 #
@@ -437,33 +456,24 @@
 # Statically linked extensions
 #
 TESTSRC += \
-  $(TOP)/ext/expert/sqlite3expert.c \
   $(TOP)/ext/expert/test_expert.c \
   $(TOP)/ext/misc/amatch.c \
-  $(TOP)/ext/misc/carray.c \
   $(TOP)/ext/misc/closure.c \
-  $(TOP)/ext/misc/csv.c \
-  $(TOP)/ext/misc/eval.c \
   $(TOP)/ext/misc/explain.c \
-  $(TOP)/ext/misc/fileio.c \
   $(TOP)/ext/misc/fuzzer.c \
   $(TOP)/ext/fts5/fts5_tcl.c \
   $(TOP)/ext/fts5/fts5_test_mi.c \
   $(TOP)/ext/fts5/fts5_test_tok.c \
-  $(TOP)/ext/misc/ieee754.c \
   $(TOP)/ext/misc/mmapwarm.c \
   $(TOP)/ext/misc/nextchar.c \
   $(TOP)/ext/misc/normalize.c \
   $(TOP)/ext/misc/percentile.c \
   $(TOP)/ext/misc/prefixes.c \
-  $(TOP)/ext/misc/regexp.c \
   $(TOP)/ext/misc/remember.c \
   $(TOP)/ext/misc/series.c \
   $(TOP)/ext/misc/spellfix.c \
-  $(TOP)/ext/misc/totype.c \
   $(TOP)/ext/misc/unionvtab.c \
   $(TOP)/ext/misc/wholenumber.c \
-  $(TOP)/ext/misc/zipfile.c \
   $(TOP)/ext/userauth/userauth.c
 
 # Source code to the library files needed by the test fixture
@@ -645,25 +655,25 @@
 
 libtclsqlite3.la:	tclsqlite.lo libsqlite3.la
 	$(LTLINK) -no-undefined -o $@ tclsqlite.lo \
-		libsqlite3.la @TCL_STUB_LIB_SPEC@ $(TLIBS) \
+		libsqlite3.la @TCL_STUB_LIB_SPEC@ \
 		-rpath "$(TCLLIBDIR)" \
 		-version-info "8:6:8" \
 		-avoid-version
 
-sqlite3$(TEXE):	shell.c sqlite3.c
-	$(LTLINK) $(READLINE_FLAGS) $(SHELL_OPT) -o $@ \
-		shell.c sqlite3.c \
-		$(LIBREADLINE) $(TLIBS) -rpath "$(libdir)"
+sqlite3$(TEXE):	shell.c libsqlite3.la
+	$(LTLINK) $(READLINE_FLAGS) -o $@ \
+		shell.c libsqlite3.la \
+		$(LIBREADLINE)
 
-sqldiff$(TEXE):	$(TOP)/tool/sqldiff.c sqlite3.lo sqlite3.h
-	$(LTLINK) -o $@ $(TOP)/tool/sqldiff.c sqlite3.lo $(TLIBS)
+sqldiff$(TEXE):	$(TOP)/tool/sqldiff.c libsqlite3.la
+	$(LTLINK) -o $@ $(TOP)/tool/sqldiff.c libsqlite3.la
 
-dbhash$(TEXE):	$(TOP)/tool/dbhash.c sqlite3.lo sqlite3.h
-	$(LTLINK) -o $@ $(TOP)/tool/dbhash.c sqlite3.lo $(TLIBS)
+dbhash$(TEXE):	$(TOP)/tool/dbhash.c libsqlite3.la
+	$(LTLINK) -o $@ $(TOP)/tool/dbhash.c libsqlite3.la
 
-scrub$(TEXE):	$(TOP)/ext/misc/scrub.c sqlite3.lo
+scrub$(TEXE):	$(TOP)/ext/misc/scrub.c libsqlite3.la
 	$(LTLINK) -o $@ -I. -DSCRUB_STANDALONE \
-		$(TOP)/ext/misc/scrub.c sqlite3.lo $(TLIBS)
+		$(TOP)/ext/misc/scrub.c libsqlite3.la
 
 srcck1$(BEXE):	$(TOP)/tool/srcck1.c
 	$(BCC) -o srcck1$(BEXE) $(TOP)/tool/srcck1.c
@@ -774,7 +784,7 @@
 # Rule to build the amalgamation
 #
 sqlite3.lo:	sqlite3.c
-	$(LTCOMPILE) $(TEMP_STORE) -c sqlite3.c
+	$(LTCOMPILE) $(SHELL_OPT) $(TEMP_STORE) -c sqlite3.c
 
 # Rules to build the LEMON compiler generator
 #
@@ -1074,15 +1084,6 @@
 # Source files that go into making shell.c
 SHELL_SRC = \
 	$(TOP)/src/shell.c.in \
-        $(TOP)/ext/misc/appendvfs.c \
-	$(TOP)/ext/misc/shathree.c \
-	$(TOP)/ext/misc/fileio.c \
-	$(TOP)/ext/misc/completion.c \
-	$(TOP)/ext/misc/sqlar.c \
-        $(TOP)/ext/misc/uint.c \
-	$(TOP)/ext/expert/sqlite3expert.c \
-	$(TOP)/ext/expert/sqlite3expert.h \
-	$(TOP)/ext/misc/zipfile.c \
 	$(TOP)/ext/misc/memtrace.c \
         $(TOP)/src/test_windirent.c
 
@@ -1251,11 +1252,11 @@
 
 # Fuzz testing
 fuzztest:	fuzzcheck$(TEXE) $(FUZZDATA) sessionfuzz$(TEXE) $(TOP)/test/sessionfuzz-data1.db
-	./fuzzcheck$(TEXE) $(FUZZDATA)
+	./fuzzcheck$(TEXE) --timeout 3600 $(FUZZDATA)
 	./sessionfuzz$(TEXE) run $(TOP)/test/sessionfuzz-data1.db
 
 valgrindfuzz:	fuzzcheck$(TEXT) $(FUZZDATA) sessionfuzz$(TEXE) $(TOP)/test/sessionfuzz-data1.db
-	valgrind ./fuzzcheck$(TEXE) --cell-size-check --limit-mem 10M --timeout 600 $(FUZZDATA)
+	valgrind ./fuzzcheck$(TEXE) --cell-size-check --limit-mem 10M --timeout 3600 $(FUZZDATA)
 	valgrind ./sessionfuzz$(TEXE) run $(TOP)/test/sessionfuzz-data1.db
 
 # The veryquick.test TCL tests.
@@ -1286,24 +1287,23 @@
 smoketest:	$(TESTPROGS) fuzzcheck$(TEXE)
 	./testfixture$(TEXE) $(TOP)/test/main.test $(TESTOPTS)
 
-sqlite3_analyzer.c: sqlite3.c $(TOP)/src/tclsqlite.c $(TOP)/tool/spaceanal.tcl $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqlite3_analyzer.c.in
+sqlite3_analyzer.c:	$(TOP)/src/tclsqlite.c $(TOP)/tool/spaceanal.tcl $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqlite3_analyzer.c.in
 	$(TCLSH_CMD) $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqlite3_analyzer.c.in >sqlite3_analyzer.c
 
-sqlite3_analyzer$(TEXE): sqlite3_analyzer.c
-	$(LTLINK) sqlite3_analyzer.c -o $@ $(LIBTCL) $(TLIBS)
+sqlite3_analyzer$(TEXE):	sqlite3_analyzer.c libsqlite3.la
+	$(LTLINK) sqlite3_analyzer.c -o $@ libsqlite3.la $(LIBTCL)
 
-sqltclsh.c: sqlite3.c $(TOP)/src/tclsqlite.c $(TOP)/tool/sqltclsh.tcl $(TOP)/ext/misc/appendvfs.c $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqltclsh.c.in
+sqltclsh.c:	$(TOP)/src/tclsqlite.c $(TOP)/tool/sqltclsh.tcl $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqltclsh.c.in
 	$(TCLSH_CMD) $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqltclsh.c.in >sqltclsh.c
 
-sqltclsh$(TEXE): sqltclsh.c
-	$(LTLINK) sqltclsh.c -o $@ $(LIBTCL) $(TLIBS)
+sqltclsh$(TEXE):	sqltclsh.c libsqlite3.la
+	$(LTLINK) sqltclsh.c -o $@ libsqlite3.la $(LIBTCL)
 
-sqlite3_expert$(TEXE): $(TOP)/ext/expert/sqlite3expert.h $(TOP)/ext/expert/sqlite3expert.c $(TOP)/ext/expert/expert.c sqlite3.c
-	$(LTLINK)	$(TOP)/ext/expert/sqlite3expert.h $(TOP)/ext/expert/sqlite3expert.c $(TOP)/ext/expert/expert.c sqlite3.c -o sqlite3_expert $(TLIBS)
+sqlite3_expert$(TEXE):	$(TOP)/ext/expert/sqlite3expert.h $(TOP)/ext/expert/expert.c libsqlite3.la
+	$(LTLINK) $(TOP)/ext/expert/expert.c -o sqlite3_expert libsqlite3.la
 
 CHECKER_DEPS =\
   $(TOP)/tool/mkccode.tcl \
-  sqlite3.c \
   $(TOP)/src/tclsqlite.c \
   $(TOP)/ext/repair/sqlite3_checker.tcl \
   $(TOP)/ext/repair/checkindex.c \
@@ -1314,36 +1314,36 @@
 sqlite3_checker.c:	$(CHECKER_DEPS)
 	$(TCLSH_CMD) $(TOP)/tool/mkccode.tcl $(TOP)/ext/repair/sqlite3_checker.c.in >$@
 
-sqlite3_checker$(TEXE):	sqlite3_checker.c
-	$(LTLINK) sqlite3_checker.c -o $@ $(LIBTCL) $(TLIBS)
+sqlite3_checker$(TEXE):	sqlite3_checker.c libsqlite3.la
+	$(LTLINK) sqlite3_checker.c -o $@ libsqlite3.la $(LIBTCL)
 
-dbdump$(TEXE): $(TOP)/ext/misc/dbdump.c sqlite3.lo
+dbdump$(TEXE):	$(TOP)/ext/misc/dbdump.c libsqlite3.la
 	$(LTLINK) -DDBDUMP_STANDALONE -o $@ \
-           $(TOP)/ext/misc/dbdump.c sqlite3.lo $(TLIBS)
+           $(TOP)/ext/misc/dbdump.c libsqlite3.la
 
-dbtotxt$(TEXE): $(TOP)/tool/dbtotxt.c
-	$(LTLINK)-o $@ $(TOP)/tool/dbtotxt.c
+dbtotxt$(TEXE):	$(TOP)/tool/dbtotxt.c
+	$(LTLINK) -o $@ $(TOP)/tool/dbtotxt.c
 
-showdb$(TEXE):	$(TOP)/tool/showdb.c sqlite3.lo
-	$(LTLINK) -o $@ $(TOP)/tool/showdb.c sqlite3.lo $(TLIBS)
+showdb$(TEXE):	$(TOP)/tool/showdb.c libsqlite3.la
+	$(LTLINK) -o $@ $(TOP)/tool/showdb.c libsqlite3.la
 
-showstat4$(TEXE):	$(TOP)/tool/showstat4.c sqlite3.lo
-	$(LTLINK) -o $@ $(TOP)/tool/showstat4.c sqlite3.lo $(TLIBS)
+showstat4$(TEXE):	$(TOP)/tool/showstat4.c libsqlite3.la
+	$(LTLINK) -o $@ $(TOP)/tool/showstat4.c libsqlite3.la
 
-showjournal$(TEXE):	$(TOP)/tool/showjournal.c sqlite3.lo
-	$(LTLINK) -o $@ $(TOP)/tool/showjournal.c sqlite3.lo $(TLIBS)
+showjournal$(TEXE):	$(TOP)/tool/showjournal.c
+	$(LTLINK) -o $@ $(TOP)/tool/showjournal.c
 
-showwal$(TEXE):	$(TOP)/tool/showwal.c sqlite3.lo
-	$(LTLINK) -o $@ $(TOP)/tool/showwal.c sqlite3.lo $(TLIBS)
+showwal$(TEXE):	$(TOP)/tool/showwal.c
+	$(LTLINK) -o $@ $(TOP)/tool/showwal.c
 
 showshm$(TEXE):	$(TOP)/tool/showshm.c
 	$(LTLINK) -o $@ $(TOP)/tool/showshm.c
 
-index_usage$(TEXE): $(TOP)/tool/index_usage.c sqlite3.lo
-	$(LTLINK) $(SHELL_OPT) -o $@ $(TOP)/tool/index_usage.c sqlite3.lo $(TLIBS)
+index_usage$(TEXE):	$(TOP)/tool/index_usage.c libsqlite3.la
+	$(LTLINK) -o $@ $(TOP)/tool/index_usage.c libsqlite3.la
 
-changeset$(TEXE):	$(TOP)/ext/session/changeset.c sqlite3.lo
-	$(LTLINK) -o $@ $(TOP)/ext/session/changeset.c sqlite3.lo $(TLIBS)
+changeset$(TEXE):	$(TOP)/ext/session/changeset.c libsqlite3.la
+	$(LTLINK) -o $@ $(TOP)/ext/session/changeset.c libsqlite3.la
 
 changesetfuzz$(TEXE):	$(TOP)/ext/session/changesetfuzz.c sqlite3.lo
 	$(LTLINK) -o $@ $(TOP)/ext/session/changesetfuzz.c sqlite3.lo $(TLIBS)
@@ -1368,11 +1368,11 @@
 kvtest$(TEXE):	$(TOP)/test/kvtest.c sqlite3.c
 	$(LTLINK) $(KV_OPT) -o $@ $(TOP)/test/kvtest.c sqlite3.c $(TLIBS)
 
-rbu$(EXE): $(TOP)/ext/rbu/rbu.c $(TOP)/ext/rbu/sqlite3rbu.c sqlite3.lo
-	$(LTLINK) -I. -o $@ $(TOP)/ext/rbu/rbu.c sqlite3.lo $(TLIBS)
+rbu$(EXE):	$(TOP)/ext/rbu/rbu.c libsqlite3.la
+	$(LTLINK) -I. -o $@ $(TOP)/ext/rbu/rbu.c libsqlite3.la
 
-loadfts$(EXE): $(TOP)/tool/loadfts.c libsqlite3.la
-	$(LTLINK) $(TOP)/tool/loadfts.c libsqlite3.la -o $@ $(TLIBS)
+loadfts$(EXE):	$(TOP)/tool/loadfts.c libsqlite3.la
+	$(LTLINK) $(TOP)/tool/loadfts.c libsqlite3.la -o $@
 
 # This target will fail if the SQLite amalgamation contains any exported
 # symbols that do not begin with "sqlite3_". It is run as part of the
--- /configure.ac
+++ /configure.ac
@@ -587,6 +587,9 @@
 if test "${enable_load_extension}" = "yes" ; then
   OPT_FEATURE_FLAGS=""
   AC_SEARCH_LIBS(dlopen, dl)
+  if test "${ac_cv_search_dlopen}" = "no" ; then
+    OPT_FEATURE_FLAGS="-DSQLITE_OMIT_LOAD_EXTENSION=1"
+  fi
 else
   OPT_FEATURE_FLAGS="-DSQLITE_OMIT_LOAD_EXTENSION=1"
 fi
--- /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,31 @@
 #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 sqlite3CarrayInit(sqlite3*);
+int sqlite3CompletionVtabInit(sqlite3*);
+int sqlite3CsvInit(sqlite3*);
+int sqlite3EvalInit(sqlite3*);
+int sqlite3FileioInit(sqlite3*);
+int sqlite3IeeeInit(sqlite3*);
+int sqlite3RegexpInit(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 +102,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 +118,22 @@
 #ifdef SQLITE_ENABLE_BYTECODE_VTAB
   sqlite3VdbeBytecodeVtabInit,
 #endif
+  sqlite3CarrayInit,
+  sqlite3CompletionVtabInit,
+  sqlite3CsvInit,
+  sqlite3EvalInit,
+  sqlite3FileioInit,
+  sqlite3IeeeInit,
+  sqlite3RegexpInit,
+  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
@@ -1005,22 +1010,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
-#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)
 /*
@@ -4261,17 +4251,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);
-#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,
@@ -6281,8 +6260,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);
 
@@ -10621,6 +10598,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
@@ -540,6 +540,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 +664,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
@@ -1078,7 +1078,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
@@ -1360,17 +1360,32 @@
 } ;# ifcapable trigger
 
 ifcapable schema_pragmas {
-  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 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
@@ -700,42 +700,6 @@
 #include <assert.h>
 #include "zlib.h"
 
-/*
-** 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
-){
-  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);
-  }
-}
-
-
 /* Run a chunk of SQL.  If any errors happen, print an error message
 ** and exit.
 */
--- /tool/mksqlite3c.tcl
+++ /tool/mksqlite3c.tcl
@@ -117,6 +117,7 @@
    rtree.h
    sqlite3session.h
    sqlite3.h
+   sqlite3expert.h
    sqlite3ext.h
    sqlite3rbu.h
    sqliteicu.h
@@ -404,6 +405,23 @@
    sqlite3session.c
    fts5.c
    stmt.c
+   appendvfs.c
+   carray.c
+   completion.c
+   csv.c
+   dbdata.c
+   eval.c
+   fileio.c
+   ieee754.c
+   regexp.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
