diff --git a/dev-db/sqlite/Manifest b/dev-db/sqlite/Manifest
index b0beb0a..1f04fd8 100644
--- a/dev-db/sqlite/Manifest
+++ b/dev-db/sqlite/Manifest
@@ -1,2 +1,2 @@
-DIST sqlite-doc-3340100.zip 10074559 BLAKE2B 66aa999d87b7f3c994c289eda320d6a4e371b0a6a2ab8bcebde540aa955f3bdf4f00b739ca32aa913685cd35a88ee83bebd7fa43a0c148614e9086a1d3f5652a SHA512 20cbb9f05cd329bf7aa2877431781e46192544806042f4104e4eb0e87d84cd2dfc02c7ff226d4bef9bb2c6a69cc612201844d116abe99b0cfed9602adf243a60
-DIST sqlite-src-3340100.zip 12623711 BLAKE2B 08c98d0c56d46fe909f449f322002ae4d69fd952930d2f04514988a939b31744a13aea85935d84bc05db52faca1aad6a70d7c31e7da0e396bb649685a49699bb SHA512 5ed02fe609b3d08c3297cc43b21e6ee3f56fb51a6616ac391a0e50cd1677dbad03c6bf9bf9c8409cf94b83b16fe6b6e4a112640b18c7d4fd95328066da3c3943
+DIST sqlite-doc-3370200.zip 10542395 BLAKE2B 129ae0bac8099eb2571cc31ded186ed6c166c1b31af493047608ffb63ac7a90ccbaa5df733661c92660d2436bab6e3796f92e42ac8bb4154ff15212afc74b9b0 SHA512 02c68a3906aee3fd05a4340549144032a239e5ab885d9b3b09236ed2b74a90c770de373e4ca9f99e72f92df090d0fb6789213fb361e954d9dd6709af20336857
+DIST sqlite-src-3370200.zip 13145234 BLAKE2B 296eb8ac0e83552c348847ea1d0b06ce1b610ca1f53d8b56fa872196ccdc29c343a3b5cc671716854950c97425f8a5b78968e1b22c137ea1ff3bf386e94d8acc SHA512 2db103965934bb34c8336cf82ff7d77e75dc1ca00fa6324ac5697f3bf4b41bffff355dec7593515a68816449e5c9827a9503f6d7841c4c13981c231d3414ff76
diff --git a/dev-db/sqlite/files/sqlite-3.34.1-build_1.1.patch b/dev-db/sqlite/files/sqlite-3.34.1-build_1.1.patch
deleted file mode 100644
index d7f759a..0000000
--- a/dev-db/sqlite/files/sqlite-3.34.1-build_1.1.patch
+++ /dev/null
@@ -1,375 +0,0 @@
-Add initialization functions for internal usage in libsqlite3.so.
-
-SQLite revision: 10e20c0b43500cfb9bbc0eaa061c57514f715d87238f4d835880cd846b9ebd1f
-
---- /ext/misc/amatch.c
-+++ /ext/misc/amatch.c
-@@ -1480,9 +1480,18 @@
- 
- #endif /* SQLITE_OMIT_VIRTUALTABLE */
- 
-+int sqlite3AmatchInit(sqlite3 *db){
-+  int rc = SQLITE_OK;
-+#ifndef SQLITE_OMIT_VIRTUALTABLE
-+  rc = sqlite3_create_module(db, "approximate_match", &amatchModule, 0);
-+#endif /* SQLITE_OMIT_VIRTUALTABLE */
-+  return rc;
-+}
-+
- /*
- ** Register the amatch virtual table
- */
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -1491,11 +1500,8 @@
-   char **pzErrMsg, 
-   const sqlite3_api_routines *pApi
- ){
--  int rc = SQLITE_OK;
-   SQLITE_EXTENSION_INIT2(pApi);
-   (void)pzErrMsg;  /* Not used */
--#ifndef SQLITE_OMIT_VIRTUALTABLE
--  rc = sqlite3_create_module(db, "approximate_match", &amatchModule, 0);
--#endif /* SQLITE_OMIT_VIRTUALTABLE */
--  return rc;
-+  return sqlite3AmatchInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/carray.c
-+++ /ext/misc/carray.c
-@@ -498,16 +498,8 @@
- 
- #endif /* SQLITE_OMIT_VIRTUALTABLE */
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_carray_init(
--  sqlite3 *db, 
--  char **pzErrMsg, 
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3CarrayInit(sqlite3 *db){
-   int rc = SQLITE_OK;
--  SQLITE_EXTENSION_INIT2(pApi);
- #ifndef SQLITE_OMIT_VIRTUALTABLE
-   rc = sqlite3_create_module(db, "carray", &carrayModule, 0);
- #ifdef SQLITE_TEST
-@@ -519,3 +511,18 @@
- #endif /* SQLITE_OMIT_VIRTUALTABLE */
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_carray_init(
-+  sqlite3 *db, 
-+  char **pzErrMsg, 
-+  const sqlite3_api_routines *pApi
-+){
-+  SQLITE_EXTENSION_INIT2(pApi);
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3CarrayInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/completion.c
-+++ /ext/misc/completion.c
-@@ -483,12 +483,13 @@
-   return rc;
- }
- 
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
- int sqlite3_completion_init(
--  sqlite3 *db, 
--  char **pzErrMsg, 
-+  sqlite3 *db,
-+  char **pzErrMsg,
-   const sqlite3_api_routines *pApi
- ){
-   int rc = SQLITE_OK;
-@@ -499,3 +500,4 @@
- #endif
-   return rc;
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/csv.c
-+++ /ext/misc/csv.c
-@@ -928,6 +928,22 @@
- #endif /* !defined(SQLITE_OMIT_VIRTUALTABLE) */
- 
- 
-+int sqlite3CsvInit(sqlite3 *db){
-+#ifndef SQLITE_OMIT_VIRTUALTABLE
-+  int rc;
-+  rc = sqlite3_create_module(db, "csv", &CsvModule, 0);
-+#ifdef SQLITE_TEST
-+  if( rc==SQLITE_OK ){
-+    rc = sqlite3_create_module(db, "csv_wr", &CsvModuleFauxWrite, 0);
-+  }
-+#endif
-+  return rc;
-+#else
-+  return SQLITE_OK;
-+#endif
-+}
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -941,17 +957,8 @@
-   char **pzErrMsg, 
-   const sqlite3_api_routines *pApi
- ){
--#ifndef SQLITE_OMIT_VIRTUALTABLE	
--  int rc;
-   SQLITE_EXTENSION_INIT2(pApi);
--  rc = sqlite3_create_module(db, "csv", &CsvModule, 0);
--#ifdef SQLITE_TEST
--  if( rc==SQLITE_OK ){
--    rc = sqlite3_create_module(db, "csv_wr", &CsvModuleFauxWrite, 0);
--  }
--#endif
--  return rc;
--#else
--  return SQLITE_OK;
--#endif
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3CsvInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/dbdata.c
-+++ /ext/misc/dbdata.c
-@@ -803,7 +803,7 @@
- /*
- ** Invoke this routine to register the "sqlite_dbdata" virtual table module
- */
--static int sqlite3DbdataRegister(sqlite3 *db){
-+int sqlite3DbdataRegister(sqlite3 *db){
-   static sqlite3_module dbdata_module = {
-     0,                            /* iVersion */
-     0,                            /* xCreate */
-@@ -838,6 +838,7 @@
-   return rc;
- }
- 
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -849,3 +850,4 @@
-   SQLITE_EXTENSION_INIT2(pApi);
-   return sqlite3DbdataRegister(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/decimal.c
-+++ /ext/misc/decimal.c
-@@ -590,14 +590,7 @@
-   decimal_free(pB);
- }
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_decimal_init(
--  sqlite3 *db, 
--  char **pzErrMsg, 
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3DecimalInit(sqlite3 *db){
-   int rc = SQLITE_OK;
-   static const struct {
-     const char *zFuncName;
-@@ -611,10 +604,6 @@
-     { "decimal_mul",   2,   decimalMulFunc     },
-   };
-   unsigned int i;
--  (void)pzErrMsg;  /* Unused parameter */
--
--  SQLITE_EXTENSION_INIT2(pApi);
--
-   for(i=0; i<sizeof(aFunc)/sizeof(aFunc[0]) && rc==SQLITE_OK; i++){
-     rc = sqlite3_create_function(db, aFunc[i].zFuncName, aFunc[i].nArg,
-                    SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC,
-@@ -632,3 +621,20 @@
-   }
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_decimal_init(
-+  sqlite3 *db, 
-+  char **pzErrMsg, 
-+  const sqlite3_api_routines *pApi
-+){
-+  (void)pzErrMsg;  /* Unused parameter */
-+
-+  SQLITE_EXTENSION_INIT2(pApi);
-+
-+  return sqlite3DecimalInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/eval.c
-+++ /ext/misc/eval.c
-@@ -102,6 +102,20 @@
- }
- 
- 
-+int sqlite3EvalInit(sqlite3 *db){
-+  int rc = SQLITE_OK;
-+  rc = sqlite3_create_function(db, "eval", 1,
-+                               SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
-+                               sqlEvalFunc, 0, 0);
-+  if( rc==SQLITE_OK ){
-+    rc = sqlite3_create_function(db, "eval", 2,
-+                                 SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
-+                                 sqlEvalFunc, 0, 0);
-+  }
-+  return rc;
-+}
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -110,16 +124,8 @@
-   char **pzErrMsg, 
-   const sqlite3_api_routines *pApi
- ){
--  int rc = SQLITE_OK;
-   SQLITE_EXTENSION_INIT2(pApi);
-   (void)pzErrMsg;  /* Unused parameter */
--  rc = sqlite3_create_function(db, "eval", 1, 
--                               SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
--                               sqlEvalFunc, 0, 0);
--  if( rc==SQLITE_OK ){
--    rc = sqlite3_create_function(db, "eval", 2,
--                                 SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
--                                 sqlEvalFunc, 0, 0);
--  }
--  return rc;
-+  return sqlite3EvalInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/fileio.c
-+++ /ext/misc/fileio.c
-@@ -340,7 +340,7 @@
- ** This function does the work for the writefile() UDF. Refer to 
- ** header comments at the top of this file for details.
- */
--static int writeFile(
-+static int writeFileContents(
-   sqlite3_context *pCtx,          /* Context to return bytes written in */
-   const char *zFile,              /* File to write */
-   sqlite3_value *pData,           /* Data to write */
-@@ -480,10 +480,10 @@
-     mtime = sqlite3_value_int64(argv[3]);
-   }
- 
--  res = writeFile(context, zFile, argv[1], mode, mtime);
-+  res = writeFileContents(context, zFile, argv[1], mode, mtime);
-   if( res==1 && errno==ENOENT ){
-     if( makeDirectory(zFile)==SQLITE_OK ){
--      res = writeFile(context, zFile, argv[1], mode, mtime);
-+      res = writeFileContents(context, zFile, argv[1], mode, mtime);
-     }
-   }
- 
-@@ -970,18 +970,9 @@
- # define fsdirRegister(x) SQLITE_OK
- #endif
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_fileio_init(
--  sqlite3 *db, 
--  char **pzErrMsg, 
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3FileioInit(sqlite3 *db){
-   int rc = SQLITE_OK;
--  SQLITE_EXTENSION_INIT2(pApi);
--  (void)pzErrMsg;  /* Unused parameter */
--  rc = sqlite3_create_function(db, "readfile", 1, 
-+  rc = sqlite3_create_function(db, "readfile", 1,
-                                SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
-                                readfileFunc, 0, 0);
-   if( rc==SQLITE_OK ){
-@@ -998,3 +989,18 @@
-   }
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_fileio_init(
-+  sqlite3 *db, 
-+  char **pzErrMsg, 
-+  const sqlite3_api_routines *pApi
-+){
-+  SQLITE_EXTENSION_INIT2(pApi);
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3FileioInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/ieee754.c
-+++ /ext/misc/ieee754.c
-@@ -245,14 +245,7 @@
- }
- 
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_ieee_init(
--  sqlite3 *db, 
--  char **pzErrMsg, 
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3IeeeInit(sqlite3 *db){
-   static const struct {
-     char *zFName;
-     int nArg;
-@@ -269,13 +262,26 @@
-   };
-   unsigned int i;
-   int rc = SQLITE_OK;
--  SQLITE_EXTENSION_INIT2(pApi);
--  (void)pzErrMsg;  /* Unused parameter */
-   for(i=0; i<sizeof(aFunc)/sizeof(aFunc[0]) && rc==SQLITE_OK; i++){
--    rc = sqlite3_create_function(db, aFunc[i].zFName, aFunc[i].nArg,	
-+    rc = sqlite3_create_function(db, aFunc[i].zFName, aFunc[i].nArg,
-                                SQLITE_UTF8|SQLITE_INNOCUOUS,
-                                (void*)&aFunc[i].iAux,
-                                aFunc[i].xFunc, 0, 0);
-   }
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_ieee_init(
-+  sqlite3 *db, 
-+  char **pzErrMsg, 
-+  const sqlite3_api_routines *pApi
-+){
-+  SQLITE_EXTENSION_INIT2(pApi);
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3IeeeInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
diff --git a/dev-db/sqlite/files/sqlite-3.34.1-build_1.2.patch b/dev-db/sqlite/files/sqlite-3.34.1-build_1.2.patch
deleted file mode 100644
index 5c5d6e9..0000000
--- a/dev-db/sqlite/files/sqlite-3.34.1-build_1.2.patch
+++ /dev/null
@@ -1,500 +0,0 @@
-Add initialization functions for internal usage in libsqlite3.so.
-
-SQLite revision: 10e20c0b43500cfb9bbc0eaa061c57514f715d87238f4d835880cd846b9ebd1f
-
---- /ext/misc/nextchar.c
-+++ /ext/misc/nextchar.c
-@@ -286,17 +286,8 @@
-   sqlite3_free(c.aResult);
- }
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_nextchar_init(
--  sqlite3 *db, 
--  char **pzErrMsg, 
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3NextcharInit(sqlite3 *db){
-   int rc = SQLITE_OK;
--  SQLITE_EXTENSION_INIT2(pApi);
--  (void)pzErrMsg;  /* Unused parameter */
-   rc = sqlite3_create_function(db, "next_char", 3,
-                                SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
-                                nextCharFunc, 0, 0);
-@@ -312,3 +303,18 @@
-   }
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_nextchar_init(
-+  sqlite3 *db, 
-+  char **pzErrMsg, 
-+  const sqlite3_api_routines *pApi
-+){
-+  SQLITE_EXTENSION_INIT2(pApi);
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3NextcharInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/percentile.c
-+++ /ext/misc/percentile.c
-@@ -202,6 +202,15 @@
- }
- 
- 
-+int sqlite3PercentileInit(sqlite3 *db){
-+  int rc = SQLITE_OK;
-+  rc = sqlite3_create_function(db, "percentile", 2,
-+                               SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
-+                               0, percentStep, percentFinal);
-+  return rc;
-+}
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -210,11 +219,8 @@
-   char **pzErrMsg, 
-   const sqlite3_api_routines *pApi
- ){
--  int rc = SQLITE_OK;
-   SQLITE_EXTENSION_INIT2(pApi);
-   (void)pzErrMsg;  /* Unused parameter */
--  rc = sqlite3_create_function(db, "percentile", 2, 
--                               SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
--                               0, percentStep, percentFinal);
--  return rc;
-+  return sqlite3PercentileInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/regexp.c
-+++ /ext/misc/regexp.c
-@@ -740,10 +740,18 @@
-   }
- }
- 
-+int sqlite3RegexpInit(sqlite3 *db){
-+  int rc = SQLITE_OK;
-+  rc = sqlite3_create_function(db, "regexp", 2, SQLITE_UTF8|SQLITE_INNOCUOUS,
-+                               0, re_sql_func, 0, 0);
-+  return rc;
-+}
-+
- /*
- ** Invoke this routine to register the regexp() function with the
- ** SQLite database connection.
- */
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -752,9 +760,8 @@
-   char **pzErrMsg, 
-   const sqlite3_api_routines *pApi
- ){
--  int rc = SQLITE_OK;
-   SQLITE_EXTENSION_INIT2(pApi);
--  rc = sqlite3_create_function(db, "regexp", 2, SQLITE_UTF8|SQLITE_INNOCUOUS,
--                               0, re_sql_func, 0, 0);
--  return rc;
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3RegexpInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/series.c
-+++ /ext/misc/series.c
-@@ -413,6 +413,15 @@
- 
- #endif /* SQLITE_OMIT_VIRTUALTABLE */
- 
-+int sqlite3SeriesInit(sqlite3 *db){
-+  int rc = SQLITE_OK;
-+#ifndef SQLITE_OMIT_VIRTUALTABLE
-+  rc = sqlite3_create_module(db, "generate_series", &seriesModule, 0);
-+#endif
-+  return rc;
-+}
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -421,7 +430,6 @@
-   char **pzErrMsg, 
-   const sqlite3_api_routines *pApi
- ){
--  int rc = SQLITE_OK;
-   SQLITE_EXTENSION_INIT2(pApi);
- #ifndef SQLITE_OMIT_VIRTUALTABLE
-   if( sqlite3_libversion_number()<3008012 ){
-@@ -429,7 +437,7 @@
-         "generate_series() requires SQLite 3.8.12 or later");
-     return SQLITE_ERROR;
-   }
--  rc = sqlite3_create_module(db, "generate_series", &seriesModule, 0);
- #endif
--  return rc;
-+  return sqlite3SeriesInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/sha1.c
-+++ /ext/misc/sha1.c
-@@ -175,7 +175,7 @@
- }
- 
- /* Compute a string using sqlite3_vsnprintf() and hash it */
--static void hash_step_vformat(
-+static void sha1_hash_step_vformat(
-   SHA1Context *p,                 /* Add content to this context */
-   const char *zFormat,
-   ...
-@@ -306,7 +306,7 @@
-     nCol = sqlite3_column_count(pStmt);
-     z = sqlite3_sql(pStmt);
-     n = (int)strlen(z);
--    hash_step_vformat(&cx,"S%d:",n);
-+    sha1_hash_step_vformat(&cx,"S%d:",n);
-     hash_step(&cx,(unsigned char*)z,n);
- 
-     /* Compute a hash over the result of the query */
-@@ -349,14 +349,14 @@
-           case SQLITE_TEXT: {
-             int n2 = sqlite3_column_bytes(pStmt, i);
-             const unsigned char *z2 = sqlite3_column_text(pStmt, i);
--            hash_step_vformat(&cx,"T%d:",n2);
-+            sha1_hash_step_vformat(&cx,"T%d:",n2);
-             hash_step(&cx, z2, n2);
-             break;
-           }
-           case SQLITE_BLOB: {
-             int n2 = sqlite3_column_bytes(pStmt, i);
-             const unsigned char *z2 = sqlite3_column_blob(pStmt, i);
--            hash_step_vformat(&cx,"B%d:",n2);
-+            sha1_hash_step_vformat(&cx,"B%d:",n2);
-             hash_step(&cx, z2, n2);
-             break;
-           }
-@@ -370,6 +370,20 @@
- }
- 
- 
-+int sqlite3ShaInit(sqlite3 *db){
-+  int rc = SQLITE_OK;
-+  rc = sqlite3_create_function(db, "sha1", 1,
-+                       SQLITE_UTF8 | SQLITE_INNOCUOUS | SQLITE_DETERMINISTIC,
-+                               0, sha1Func, 0, 0);
-+  if( rc==SQLITE_OK ){
-+    rc = sqlite3_create_function(db, "sha1_query", 1,
-+                                 SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
-+                                 sha1QueryFunc, 0, 0);
-+  }
-+  return rc;
-+}
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -378,16 +392,8 @@
-   char **pzErrMsg,
-   const sqlite3_api_routines *pApi
- ){
--  int rc = SQLITE_OK;
-   SQLITE_EXTENSION_INIT2(pApi);
-   (void)pzErrMsg;  /* Unused parameter */
--  rc = sqlite3_create_function(db, "sha1", 1, 
--                       SQLITE_UTF8 | SQLITE_INNOCUOUS | SQLITE_DETERMINISTIC,
--                               0, sha1Func, 0, 0);
--  if( rc==SQLITE_OK ){
--    rc = sqlite3_create_function(db, "sha1_query", 1, 
--                                 SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
--                                 sha1QueryFunc, 0, 0);
--  }
--  return rc;
-+  return sqlite3ShaInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/shathree.c
-+++ /ext/misc/shathree.c
-@@ -527,7 +527,7 @@
- /* Compute a string using sqlite3_vsnprintf() with a maximum length
- ** of 50 bytes and add it to the hash.
- */
--static void hash_step_vformat(
-+static void sha3_hash_step_vformat(
-   SHA3Context *p,                 /* Add content to this context */
-   const char *zFormat,
-   ...
-@@ -623,7 +623,7 @@
-     z = sqlite3_sql(pStmt);
-     if( z ){
-       n = (int)strlen(z);
--      hash_step_vformat(&cx,"S%d:",n);
-+      sha3_hash_step_vformat(&cx,"S%d:",n);
-       SHA3Update(&cx,(unsigned char*)z,n);
-     }
- 
-@@ -667,14 +667,14 @@
-           case SQLITE_TEXT: {
-             int n2 = sqlite3_column_bytes(pStmt, i);
-             const unsigned char *z2 = sqlite3_column_text(pStmt, i);
--            hash_step_vformat(&cx,"T%d:",n2);
-+            sha3_hash_step_vformat(&cx,"T%d:",n2);
-             SHA3Update(&cx, z2, n2);
-             break;
-           }
-           case SQLITE_BLOB: {
-             int n2 = sqlite3_column_bytes(pStmt, i);
-             const unsigned char *z2 = sqlite3_column_blob(pStmt, i);
--            hash_step_vformat(&cx,"B%d:",n2);
-+            sha3_hash_step_vformat(&cx,"B%d:",n2);
-             SHA3Update(&cx, z2, n2);
-             break;
-           }
-@@ -687,17 +687,8 @@
- }
- 
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_shathree_init(
--  sqlite3 *db,
--  char **pzErrMsg,
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3ShathreeInit(sqlite3 *db){
-   int rc = SQLITE_OK;
--  SQLITE_EXTENSION_INIT2(pApi);
--  (void)pzErrMsg;  /* Unused parameter */
-   rc = sqlite3_create_function(db, "sha3", 1,
-                       SQLITE_UTF8 | SQLITE_INNOCUOUS | SQLITE_DETERMINISTIC,
-                       0, sha3Func, 0, 0);
-@@ -718,3 +709,18 @@
-   }
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_shathree_init(
-+  sqlite3 *db,
-+  char **pzErrMsg,
-+  const sqlite3_api_routines *pApi
-+){
-+  SQLITE_EXTENSION_INIT2(pApi);
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3ShathreeInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/sqlar.c
-+++ /ext/misc/sqlar.c
-@@ -14,6 +14,8 @@
- ** for working with sqlar archives and used by the shell tool's built-in
- ** sqlar support.
- */
-+#ifdef SQLITE_HAVE_ZLIB
-+
- #include "sqlite3ext.h"
- SQLITE_EXTENSION_INIT1
- #include <zlib.h>
-@@ -101,6 +103,20 @@
- }
- 
- 
-+int sqlite3SqlarInit(sqlite3 *db){
-+  int rc = SQLITE_OK;
-+  rc = sqlite3_create_function(db, "sqlar_compress", 1,
-+                               SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
-+                               sqlarCompressFunc, 0, 0);
-+  if( rc==SQLITE_OK ){
-+    rc = sqlite3_create_function(db, "sqlar_uncompress", 2,
-+                                 SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
-+                                 sqlarUncompressFunc, 0, 0);
-+  }
-+  return rc;
-+}
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -109,16 +125,10 @@
-   char **pzErrMsg, 
-   const sqlite3_api_routines *pApi
- ){
--  int rc = SQLITE_OK;
-   SQLITE_EXTENSION_INIT2(pApi);
-   (void)pzErrMsg;  /* Unused parameter */
--  rc = sqlite3_create_function(db, "sqlar_compress", 1, 
--                               SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
--                               sqlarCompressFunc, 0, 0);
--  if( rc==SQLITE_OK ){
--    rc = sqlite3_create_function(db, "sqlar_uncompress", 2,
--                                 SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
--                                 sqlarUncompressFunc, 0, 0);
--  }
--  return rc;
-+  return sqlite3SqlarInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
-+
-+#endif /* SQLITE_HAVE_ZLIB */
---- /ext/misc/totype.c
-+++ /ext/misc/totype.c
-@@ -491,17 +491,8 @@
- #pragma warning(default: 4748)
- #endif
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_totype_init(
--  sqlite3 *db,
--  char **pzErrMsg,
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3TotypeInit(sqlite3 *db){
-   int rc = SQLITE_OK;
--  SQLITE_EXTENSION_INIT2(pApi);
--  (void)pzErrMsg;  /* Unused parameter */
-   rc = sqlite3_create_function(db, "tointeger", 1,
-         SQLITE_UTF8 | SQLITE_DETERMINISTIC | SQLITE_INNOCUOUS, 0,
-         tointegerFunc, 0, 0);
-@@ -512,3 +503,18 @@
-   }
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_totype_init(
-+  sqlite3 *db,
-+  char **pzErrMsg,
-+  const sqlite3_api_routines *pApi
-+){
-+  SQLITE_EXTENSION_INIT2(pApi);
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3TotypeInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/uint.c
-+++ /ext/misc/uint.c
-@@ -78,6 +78,11 @@
-   return (nKey1 - i) - (nKey2 - j);
- }
- 
-+int sqlite3UintInit(sqlite3 *db){
-+  return sqlite3_create_collation(db, "UINT", SQLITE_UTF8, 0, uintCollFunc);
-+}
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -88,5 +93,6 @@
- ){
-   SQLITE_EXTENSION_INIT2(pApi);
-   (void)pzErrMsg;  /* Unused parameter */
--  return sqlite3_create_collation(db, "uint", SQLITE_UTF8, 0, uintCollFunc);
-+  return sqlite3UintInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/uuid.c
-+++ /ext/misc/uuid.c
-@@ -206,21 +206,12 @@
-   sqlite3_result_blob(context, pBlob, 16, SQLITE_TRANSIENT);
- }
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_uuid_init(
--  sqlite3 *db,
--  char **pzErrMsg,
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3UuidInit(sqlite3 *db){
-   int rc = SQLITE_OK;
--  SQLITE_EXTENSION_INIT2(pApi);
--  (void)pzErrMsg;  /* Unused parameter */
-   rc = sqlite3_create_function(db, "uuid", 0, SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
-                                sqlite3UuidFunc, 0, 0);
-   if( rc==SQLITE_OK ){
--    rc = sqlite3_create_function(db, "uuid_str", 1, 
-+    rc = sqlite3_create_function(db, "uuid_str", 1,
-                        SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC,
-                        0, sqlite3UuidStrFunc, 0, 0);
-   }
-@@ -231,3 +222,18 @@
-   }
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_uuid_init(
-+  sqlite3 *db,
-+  char **pzErrMsg,
-+  const sqlite3_api_routines *pApi
-+){
-+  SQLITE_EXTENSION_INIT2(pApi);
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3UuidInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/zipfile.c
-+++ /ext/misc/zipfile.c
-@@ -24,6 +24,8 @@
- **    *  No support for zip64 extensions
- **    *  Only the "inflate/deflate" (zlib) compression method is supported
- */
-+#ifdef SQLITE_HAVE_ZLIB
-+
- #include "sqlite3ext.h"
- SQLITE_EXTENSION_INIT1
- #include <stdio.h>
-@@ -2139,7 +2141,7 @@
- /*
- ** Register the "zipfile" virtual table.
- */
--static int zipfileRegister(sqlite3 *db){
-+int sqlite3ZipfileInit(sqlite3 *db){
-   static sqlite3_module zipfileModule = {
-     1,                         /* iVersion */
-     zipfileConnect,            /* xCreate */
-@@ -2173,9 +2175,10 @@
-   return rc;
- }
- #else         /* SQLITE_OMIT_VIRTUALTABLE */
--# define zipfileRegister(x) SQLITE_OK
-+# define sqlite3ZipfileInit(x) SQLITE_OK
- #endif
- 
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -2186,5 +2189,8 @@
- ){
-   SQLITE_EXTENSION_INIT2(pApi);
-   (void)pzErrMsg;  /* Unused parameter */
--  return zipfileRegister(db);
-+  return sqlite3ZipfileInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
-+
-+#endif /* SQLITE_HAVE_ZLIB */
diff --git a/dev-db/sqlite/files/sqlite-3.34.1-build_2.1.patch b/dev-db/sqlite/files/sqlite-3.34.1-build_2.1.patch
deleted file mode 100644
index fe5fb7e..0000000
--- a/dev-db/sqlite/files/sqlite-3.34.1-build_2.1.patch
+++ /dev/null
@@ -1,291 +0,0 @@
-Move some code to libsqlite3.so to avoid duplication.
-Link executables against libsqlite3.so.
-Increase timeout for fuzzcheck.
-Update list of optionally available functions.
-Fix building with dlopen() not available.
-
-SQLite revision: 10e20c0b43500cfb9bbc0eaa061c57514f715d87238f4d835880cd846b9ebd1f
-
---- /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,29 @@
-   $(TOP)/ext/rbu/sqlite3rbu.h \
-   $(TOP)/ext/rbu/sqlite3rbu.c
- SRC += \
-+  $(TOP)/ext/misc/amatch.c \
-+  $(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/decimal.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/nextchar.c \
-+  $(TOP)/ext/misc/percentile.c \
-+  $(TOP)/ext/misc/regexp.c \
-+  $(TOP)/ext/misc/series.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,35 +461,21 @@
- # 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/cksumvfs.c \
-   $(TOP)/ext/misc/closure.c \
--  $(TOP)/ext/misc/csv.c \
--  $(TOP)/ext/misc/decimal.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
-@@ -647,25 +657,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
-@@ -776,7 +786,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
- #
-@@ -1082,18 +1092,6 @@
- # Source files that go into making shell.c
- SHELL_SRC = \
- 	$(TOP)/src/shell.c.in \
--        $(TOP)/ext/misc/appendvfs.c \
--	$(TOP)/ext/misc/completion.c \
--        $(TOP)/ext/misc/decimal.c \
--	$(TOP)/ext/misc/fileio.c \
--        $(TOP)/ext/misc/ieee754.c \
--        $(TOP)/ext/misc/series.c \
--	$(TOP)/ext/misc/shathree.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
- 
-@@ -1263,11 +1261,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.
-@@ -1301,24 +1299,23 @@
- shelltest: $(TESTPROGS)
- 	./testfixture$(TEXT) $(TOP)/test/permutations.test shell
- 
--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 \
-@@ -1329,36 +1326,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)
-@@ -1383,11 +1380,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
-@@ -108,7 +108,7 @@
- #########
- # Figure out whether or not we have these functions
- #
--AC_CHECK_FUNCS([fdatasync gmtime_r isnan localtime_r localtime_s malloc_usable_size strchrnul usleep utime pread pread64 pwrite pwrite64])
-+AC_CHECK_FUNCS([fdatasync fullfsync gmtime_r isnan localtime_r localtime_s malloc_usable_size posix_fallocate pread pread64 pwrite pwrite64 strchrnul usleep utime])
- 
- #########
- # By default, we use the amalgamation (this may be changed below...)
-@@ -582,6 +582,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
diff --git a/dev-db/sqlite/files/sqlite-3.34.1-build_2.2.patch b/dev-db/sqlite/files/sqlite-3.34.1-build_2.2.patch
deleted file mode 100644
index 7bb99c6..0000000
--- a/dev-db/sqlite/files/sqlite-3.34.1-build_2.2.patch
+++ /dev/null
@@ -1,441 +0,0 @@
-Move some code to libsqlite3.so to avoid duplication.
-Initialize some extensions in libsqlite3.so.
-Update test suite.
-
-SQLite revision: 10e20c0b43500cfb9bbc0eaa061c57514f715d87238f4d835880cd846b9ebd1f
-
---- /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
diff --git a/dev-db/sqlite/files/sqlite-3.35.0-build_1.1.patch b/dev-db/sqlite/files/sqlite-3.35.0-build_1.1.patch
deleted file mode 100644
index 1506f3d..0000000
--- a/dev-db/sqlite/files/sqlite-3.35.0-build_1.1.patch
+++ /dev/null
@@ -1,375 +0,0 @@
-Add initialization functions for internal usage in libsqlite3.so.
-
-SQLite revision: acd63062eb06748bfe9e4886639e4f2b54ea6a496a83f10716abbaba4115500b
-
---- /ext/misc/amatch.c
-+++ /ext/misc/amatch.c
-@@ -1480,9 +1480,18 @@
- 
- #endif /* SQLITE_OMIT_VIRTUALTABLE */
- 
-+int sqlite3AmatchInit(sqlite3 *db){
-+  int rc = SQLITE_OK;
-+#ifndef SQLITE_OMIT_VIRTUALTABLE
-+  rc = sqlite3_create_module(db, "approximate_match", &amatchModule, 0);
-+#endif /* SQLITE_OMIT_VIRTUALTABLE */
-+  return rc;
-+}
-+
- /*
- ** Register the amatch virtual table
- */
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -1491,11 +1500,8 @@
-   char **pzErrMsg, 
-   const sqlite3_api_routines *pApi
- ){
--  int rc = SQLITE_OK;
-   SQLITE_EXTENSION_INIT2(pApi);
-   (void)pzErrMsg;  /* Not used */
--#ifndef SQLITE_OMIT_VIRTUALTABLE
--  rc = sqlite3_create_module(db, "approximate_match", &amatchModule, 0);
--#endif /* SQLITE_OMIT_VIRTUALTABLE */
--  return rc;
-+  return sqlite3AmatchInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/carray.c
-+++ /ext/misc/carray.c
-@@ -498,16 +498,8 @@
- 
- #endif /* SQLITE_OMIT_VIRTUALTABLE */
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_carray_init(
--  sqlite3 *db, 
--  char **pzErrMsg, 
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3CarrayInit(sqlite3 *db){
-   int rc = SQLITE_OK;
--  SQLITE_EXTENSION_INIT2(pApi);
- #ifndef SQLITE_OMIT_VIRTUALTABLE
-   rc = sqlite3_create_module(db, "carray", &carrayModule, 0);
- #ifdef SQLITE_TEST
-@@ -519,3 +511,18 @@
- #endif /* SQLITE_OMIT_VIRTUALTABLE */
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_carray_init(
-+  sqlite3 *db, 
-+  char **pzErrMsg, 
-+  const sqlite3_api_routines *pApi
-+){
-+  SQLITE_EXTENSION_INIT2(pApi);
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3CarrayInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/completion.c
-+++ /ext/misc/completion.c
-@@ -483,12 +483,13 @@
-   return rc;
- }
- 
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
- int sqlite3_completion_init(
--  sqlite3 *db, 
--  char **pzErrMsg, 
-+  sqlite3 *db,
-+  char **pzErrMsg,
-   const sqlite3_api_routines *pApi
- ){
-   int rc = SQLITE_OK;
-@@ -499,3 +500,4 @@
- #endif
-   return rc;
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/csv.c
-+++ /ext/misc/csv.c
-@@ -928,6 +928,22 @@
- #endif /* !defined(SQLITE_OMIT_VIRTUALTABLE) */
- 
- 
-+int sqlite3CsvInit(sqlite3 *db){
-+#ifndef SQLITE_OMIT_VIRTUALTABLE
-+  int rc;
-+  rc = sqlite3_create_module(db, "csv", &CsvModule, 0);
-+#ifdef SQLITE_TEST
-+  if( rc==SQLITE_OK ){
-+    rc = sqlite3_create_module(db, "csv_wr", &CsvModuleFauxWrite, 0);
-+  }
-+#endif
-+  return rc;
-+#else
-+  return SQLITE_OK;
-+#endif
-+}
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -941,17 +957,8 @@
-   char **pzErrMsg, 
-   const sqlite3_api_routines *pApi
- ){
--#ifndef SQLITE_OMIT_VIRTUALTABLE	
--  int rc;
-   SQLITE_EXTENSION_INIT2(pApi);
--  rc = sqlite3_create_module(db, "csv", &CsvModule, 0);
--#ifdef SQLITE_TEST
--  if( rc==SQLITE_OK ){
--    rc = sqlite3_create_module(db, "csv_wr", &CsvModuleFauxWrite, 0);
--  }
--#endif
--  return rc;
--#else
--  return SQLITE_OK;
--#endif
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3CsvInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/dbdata.c
-+++ /ext/misc/dbdata.c
-@@ -803,7 +803,7 @@
- /*
- ** Invoke this routine to register the "sqlite_dbdata" virtual table module
- */
--static int sqlite3DbdataRegister(sqlite3 *db){
-+int sqlite3DbdataRegister(sqlite3 *db){
-   static sqlite3_module dbdata_module = {
-     0,                            /* iVersion */
-     0,                            /* xCreate */
-@@ -838,6 +838,7 @@
-   return rc;
- }
- 
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -849,3 +850,4 @@
-   SQLITE_EXTENSION_INIT2(pApi);
-   return sqlite3DbdataRegister(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/decimal.c
-+++ /ext/misc/decimal.c
-@@ -590,14 +590,7 @@
-   decimal_free(pB);
- }
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_decimal_init(
--  sqlite3 *db, 
--  char **pzErrMsg, 
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3DecimalInit(sqlite3 *db){
-   int rc = SQLITE_OK;
-   static const struct {
-     const char *zFuncName;
-@@ -611,10 +604,6 @@
-     { "decimal_mul",   2,   decimalMulFunc     },
-   };
-   unsigned int i;
--  (void)pzErrMsg;  /* Unused parameter */
--
--  SQLITE_EXTENSION_INIT2(pApi);
--
-   for(i=0; i<sizeof(aFunc)/sizeof(aFunc[0]) && rc==SQLITE_OK; i++){
-     rc = sqlite3_create_function(db, aFunc[i].zFuncName, aFunc[i].nArg,
-                    SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC,
-@@ -632,3 +621,20 @@
-   }
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_decimal_init(
-+  sqlite3 *db, 
-+  char **pzErrMsg, 
-+  const sqlite3_api_routines *pApi
-+){
-+  (void)pzErrMsg;  /* Unused parameter */
-+
-+  SQLITE_EXTENSION_INIT2(pApi);
-+
-+  return sqlite3DecimalInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/eval.c
-+++ /ext/misc/eval.c
-@@ -102,6 +102,20 @@
- }
- 
- 
-+int sqlite3EvalInit(sqlite3 *db){
-+  int rc = SQLITE_OK;
-+  rc = sqlite3_create_function(db, "eval", 1,
-+                               SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
-+                               sqlEvalFunc, 0, 0);
-+  if( rc==SQLITE_OK ){
-+    rc = sqlite3_create_function(db, "eval", 2,
-+                                 SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
-+                                 sqlEvalFunc, 0, 0);
-+  }
-+  return rc;
-+}
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -110,16 +124,8 @@
-   char **pzErrMsg, 
-   const sqlite3_api_routines *pApi
- ){
--  int rc = SQLITE_OK;
-   SQLITE_EXTENSION_INIT2(pApi);
-   (void)pzErrMsg;  /* Unused parameter */
--  rc = sqlite3_create_function(db, "eval", 1, 
--                               SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
--                               sqlEvalFunc, 0, 0);
--  if( rc==SQLITE_OK ){
--    rc = sqlite3_create_function(db, "eval", 2,
--                                 SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
--                                 sqlEvalFunc, 0, 0);
--  }
--  return rc;
-+  return sqlite3EvalInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/fileio.c
-+++ /ext/misc/fileio.c
-@@ -340,7 +340,7 @@
- ** This function does the work for the writefile() UDF. Refer to 
- ** header comments at the top of this file for details.
- */
--static int writeFile(
-+static int writeFileContents(
-   sqlite3_context *pCtx,          /* Context to return bytes written in */
-   const char *zFile,              /* File to write */
-   sqlite3_value *pData,           /* Data to write */
-@@ -480,10 +480,10 @@
-     mtime = sqlite3_value_int64(argv[3]);
-   }
- 
--  res = writeFile(context, zFile, argv[1], mode, mtime);
-+  res = writeFileContents(context, zFile, argv[1], mode, mtime);
-   if( res==1 && errno==ENOENT ){
-     if( makeDirectory(zFile)==SQLITE_OK ){
--      res = writeFile(context, zFile, argv[1], mode, mtime);
-+      res = writeFileContents(context, zFile, argv[1], mode, mtime);
-     }
-   }
- 
-@@ -970,18 +970,9 @@
- # define fsdirRegister(x) SQLITE_OK
- #endif
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_fileio_init(
--  sqlite3 *db, 
--  char **pzErrMsg, 
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3FileioInit(sqlite3 *db){
-   int rc = SQLITE_OK;
--  SQLITE_EXTENSION_INIT2(pApi);
--  (void)pzErrMsg;  /* Unused parameter */
--  rc = sqlite3_create_function(db, "readfile", 1, 
-+  rc = sqlite3_create_function(db, "readfile", 1,
-                                SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
-                                readfileFunc, 0, 0);
-   if( rc==SQLITE_OK ){
-@@ -998,3 +989,18 @@
-   }
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_fileio_init(
-+  sqlite3 *db, 
-+  char **pzErrMsg, 
-+  const sqlite3_api_routines *pApi
-+){
-+  SQLITE_EXTENSION_INIT2(pApi);
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3FileioInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/ieee754.c
-+++ /ext/misc/ieee754.c
-@@ -253,14 +253,7 @@
- }
- 
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_ieee_init(
--  sqlite3 *db, 
--  char **pzErrMsg, 
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3IeeeInit(sqlite3 *db){
-   static const struct {
-     char *zFName;
-     int nArg;
-@@ -277,13 +270,26 @@
-   };
-   unsigned int i;
-   int rc = SQLITE_OK;
--  SQLITE_EXTENSION_INIT2(pApi);
--  (void)pzErrMsg;  /* Unused parameter */
-   for(i=0; i<sizeof(aFunc)/sizeof(aFunc[0]) && rc==SQLITE_OK; i++){
--    rc = sqlite3_create_function(db, aFunc[i].zFName, aFunc[i].nArg,	
-+    rc = sqlite3_create_function(db, aFunc[i].zFName, aFunc[i].nArg,
-                                SQLITE_UTF8|SQLITE_INNOCUOUS,
-                                (void*)&aFunc[i].iAux,
-                                aFunc[i].xFunc, 0, 0);
-   }
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_ieee_init(
-+  sqlite3 *db, 
-+  char **pzErrMsg, 
-+  const sqlite3_api_routines *pApi
-+){
-+  SQLITE_EXTENSION_INIT2(pApi);
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3IeeeInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
diff --git a/dev-db/sqlite/files/sqlite-3.35.0-build_1.2.patch b/dev-db/sqlite/files/sqlite-3.35.0-build_1.2.patch
deleted file mode 100644
index 0c3577f..0000000
--- a/dev-db/sqlite/files/sqlite-3.35.0-build_1.2.patch
+++ /dev/null
@@ -1,500 +0,0 @@
-Add initialization functions for internal usage in libsqlite3.so.
-
-SQLite revision: acd63062eb06748bfe9e4886639e4f2b54ea6a496a83f10716abbaba4115500b
-
---- /ext/misc/nextchar.c
-+++ /ext/misc/nextchar.c
-@@ -286,17 +286,8 @@
-   sqlite3_free(c.aResult);
- }
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_nextchar_init(
--  sqlite3 *db, 
--  char **pzErrMsg, 
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3NextcharInit(sqlite3 *db){
-   int rc = SQLITE_OK;
--  SQLITE_EXTENSION_INIT2(pApi);
--  (void)pzErrMsg;  /* Unused parameter */
-   rc = sqlite3_create_function(db, "next_char", 3,
-                                SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
-                                nextCharFunc, 0, 0);
-@@ -312,3 +303,18 @@
-   }
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_nextchar_init(
-+  sqlite3 *db, 
-+  char **pzErrMsg, 
-+  const sqlite3_api_routines *pApi
-+){
-+  SQLITE_EXTENSION_INIT2(pApi);
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3NextcharInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/percentile.c
-+++ /ext/misc/percentile.c
-@@ -202,6 +202,15 @@
- }
- 
- 
-+int sqlite3PercentileInit(sqlite3 *db){
-+  int rc = SQLITE_OK;
-+  rc = sqlite3_create_function(db, "percentile", 2,
-+                               SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
-+                               0, percentStep, percentFinal);
-+  return rc;
-+}
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -210,11 +219,8 @@
-   char **pzErrMsg, 
-   const sqlite3_api_routines *pApi
- ){
--  int rc = SQLITE_OK;
-   SQLITE_EXTENSION_INIT2(pApi);
-   (void)pzErrMsg;  /* Unused parameter */
--  rc = sqlite3_create_function(db, "percentile", 2, 
--                               SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
--                               0, percentStep, percentFinal);
--  return rc;
-+  return sqlite3PercentileInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/regexp.c
-+++ /ext/misc/regexp.c
-@@ -740,10 +740,18 @@
-   }
- }
- 
-+int sqlite3RegexpInit(sqlite3 *db){
-+  int rc = SQLITE_OK;
-+  rc = sqlite3_create_function(db, "regexp", 2, SQLITE_UTF8|SQLITE_INNOCUOUS,
-+                               0, re_sql_func, 0, 0);
-+  return rc;
-+}
-+
- /*
- ** Invoke this routine to register the regexp() function with the
- ** SQLite database connection.
- */
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -752,9 +760,8 @@
-   char **pzErrMsg, 
-   const sqlite3_api_routines *pApi
- ){
--  int rc = SQLITE_OK;
-   SQLITE_EXTENSION_INIT2(pApi);
--  rc = sqlite3_create_function(db, "regexp", 2, SQLITE_UTF8|SQLITE_INNOCUOUS,
--                               0, re_sql_func, 0, 0);
--  return rc;
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3RegexpInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/series.c
-+++ /ext/misc/series.c
-@@ -423,6 +423,15 @@
- 
- #endif /* SQLITE_OMIT_VIRTUALTABLE */
- 
-+int sqlite3SeriesInit(sqlite3 *db){
-+  int rc = SQLITE_OK;
-+#ifndef SQLITE_OMIT_VIRTUALTABLE
-+  rc = sqlite3_create_module(db, "generate_series", &seriesModule, 0);
-+#endif
-+  return rc;
-+}
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -431,7 +440,6 @@
-   char **pzErrMsg, 
-   const sqlite3_api_routines *pApi
- ){
--  int rc = SQLITE_OK;
-   SQLITE_EXTENSION_INIT2(pApi);
- #ifndef SQLITE_OMIT_VIRTUALTABLE
-   if( sqlite3_libversion_number()<3008012 ){
-@@ -439,7 +447,7 @@
-         "generate_series() requires SQLite 3.8.12 or later");
-     return SQLITE_ERROR;
-   }
--  rc = sqlite3_create_module(db, "generate_series", &seriesModule, 0);
- #endif
--  return rc;
-+  return sqlite3SeriesInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/sha1.c
-+++ /ext/misc/sha1.c
-@@ -175,7 +175,7 @@
- }
- 
- /* Compute a string using sqlite3_vsnprintf() and hash it */
--static void hash_step_vformat(
-+static void sha1_hash_step_vformat(
-   SHA1Context *p,                 /* Add content to this context */
-   const char *zFormat,
-   ...
-@@ -306,7 +306,7 @@
-     nCol = sqlite3_column_count(pStmt);
-     z = sqlite3_sql(pStmt);
-     n = (int)strlen(z);
--    hash_step_vformat(&cx,"S%d:",n);
-+    sha1_hash_step_vformat(&cx,"S%d:",n);
-     hash_step(&cx,(unsigned char*)z,n);
- 
-     /* Compute a hash over the result of the query */
-@@ -349,14 +349,14 @@
-           case SQLITE_TEXT: {
-             int n2 = sqlite3_column_bytes(pStmt, i);
-             const unsigned char *z2 = sqlite3_column_text(pStmt, i);
--            hash_step_vformat(&cx,"T%d:",n2);
-+            sha1_hash_step_vformat(&cx,"T%d:",n2);
-             hash_step(&cx, z2, n2);
-             break;
-           }
-           case SQLITE_BLOB: {
-             int n2 = sqlite3_column_bytes(pStmt, i);
-             const unsigned char *z2 = sqlite3_column_blob(pStmt, i);
--            hash_step_vformat(&cx,"B%d:",n2);
-+            sha1_hash_step_vformat(&cx,"B%d:",n2);
-             hash_step(&cx, z2, n2);
-             break;
-           }
-@@ -370,6 +370,20 @@
- }
- 
- 
-+int sqlite3ShaInit(sqlite3 *db){
-+  int rc = SQLITE_OK;
-+  rc = sqlite3_create_function(db, "sha1", 1,
-+                       SQLITE_UTF8 | SQLITE_INNOCUOUS | SQLITE_DETERMINISTIC,
-+                               0, sha1Func, 0, 0);
-+  if( rc==SQLITE_OK ){
-+    rc = sqlite3_create_function(db, "sha1_query", 1,
-+                                 SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
-+                                 sha1QueryFunc, 0, 0);
-+  }
-+  return rc;
-+}
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -378,16 +392,8 @@
-   char **pzErrMsg,
-   const sqlite3_api_routines *pApi
- ){
--  int rc = SQLITE_OK;
-   SQLITE_EXTENSION_INIT2(pApi);
-   (void)pzErrMsg;  /* Unused parameter */
--  rc = sqlite3_create_function(db, "sha1", 1, 
--                       SQLITE_UTF8 | SQLITE_INNOCUOUS | SQLITE_DETERMINISTIC,
--                               0, sha1Func, 0, 0);
--  if( rc==SQLITE_OK ){
--    rc = sqlite3_create_function(db, "sha1_query", 1, 
--                                 SQLITE_UTF8|SQLITE_DIRECTONLY, 0,
--                                 sha1QueryFunc, 0, 0);
--  }
--  return rc;
-+  return sqlite3ShaInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/shathree.c
-+++ /ext/misc/shathree.c
-@@ -530,7 +530,7 @@
- /* Compute a string using sqlite3_vsnprintf() with a maximum length
- ** of 50 bytes and add it to the hash.
- */
--static void hash_step_vformat(
-+static void sha3_hash_step_vformat(
-   SHA3Context *p,                 /* Add content to this context */
-   const char *zFormat,
-   ...
-@@ -626,7 +626,7 @@
-     z = sqlite3_sql(pStmt);
-     if( z ){
-       n = (int)strlen(z);
--      hash_step_vformat(&cx,"S%d:",n);
-+      sha3_hash_step_vformat(&cx,"S%d:",n);
-       SHA3Update(&cx,(unsigned char*)z,n);
-     }
- 
-@@ -670,14 +670,14 @@
-           case SQLITE_TEXT: {
-             int n2 = sqlite3_column_bytes(pStmt, i);
-             const unsigned char *z2 = sqlite3_column_text(pStmt, i);
--            hash_step_vformat(&cx,"T%d:",n2);
-+            sha3_hash_step_vformat(&cx,"T%d:",n2);
-             SHA3Update(&cx, z2, n2);
-             break;
-           }
-           case SQLITE_BLOB: {
-             int n2 = sqlite3_column_bytes(pStmt, i);
-             const unsigned char *z2 = sqlite3_column_blob(pStmt, i);
--            hash_step_vformat(&cx,"B%d:",n2);
-+            sha3_hash_step_vformat(&cx,"B%d:",n2);
-             SHA3Update(&cx, z2, n2);
-             break;
-           }
-@@ -690,17 +690,8 @@
- }
- 
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_shathree_init(
--  sqlite3 *db,
--  char **pzErrMsg,
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3ShathreeInit(sqlite3 *db){
-   int rc = SQLITE_OK;
--  SQLITE_EXTENSION_INIT2(pApi);
--  (void)pzErrMsg;  /* Unused parameter */
-   rc = sqlite3_create_function(db, "sha3", 1,
-                       SQLITE_UTF8 | SQLITE_INNOCUOUS | SQLITE_DETERMINISTIC,
-                       0, sha3Func, 0, 0);
-@@ -721,3 +712,18 @@
-   }
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_shathree_init(
-+  sqlite3 *db,
-+  char **pzErrMsg,
-+  const sqlite3_api_routines *pApi
-+){
-+  SQLITE_EXTENSION_INIT2(pApi);
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3ShathreeInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/sqlar.c
-+++ /ext/misc/sqlar.c
-@@ -14,6 +14,8 @@
- ** for working with sqlar archives and used by the shell tool's built-in
- ** sqlar support.
- */
-+#ifdef SQLITE_HAVE_ZLIB
-+
- #include "sqlite3ext.h"
- SQLITE_EXTENSION_INIT1
- #include <zlib.h>
-@@ -101,6 +103,20 @@
- }
- 
- 
-+int sqlite3SqlarInit(sqlite3 *db){
-+  int rc = SQLITE_OK;
-+  rc = sqlite3_create_function(db, "sqlar_compress", 1,
-+                               SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
-+                               sqlarCompressFunc, 0, 0);
-+  if( rc==SQLITE_OK ){
-+    rc = sqlite3_create_function(db, "sqlar_uncompress", 2,
-+                                 SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
-+                                 sqlarUncompressFunc, 0, 0);
-+  }
-+  return rc;
-+}
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -109,16 +125,10 @@
-   char **pzErrMsg, 
-   const sqlite3_api_routines *pApi
- ){
--  int rc = SQLITE_OK;
-   SQLITE_EXTENSION_INIT2(pApi);
-   (void)pzErrMsg;  /* Unused parameter */
--  rc = sqlite3_create_function(db, "sqlar_compress", 1, 
--                               SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
--                               sqlarCompressFunc, 0, 0);
--  if( rc==SQLITE_OK ){
--    rc = sqlite3_create_function(db, "sqlar_uncompress", 2,
--                                 SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
--                                 sqlarUncompressFunc, 0, 0);
--  }
--  return rc;
-+  return sqlite3SqlarInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
-+
-+#endif /* SQLITE_HAVE_ZLIB */
---- /ext/misc/totype.c
-+++ /ext/misc/totype.c
-@@ -491,17 +491,8 @@
- #pragma warning(default: 4748)
- #endif
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_totype_init(
--  sqlite3 *db,
--  char **pzErrMsg,
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3TotypeInit(sqlite3 *db){
-   int rc = SQLITE_OK;
--  SQLITE_EXTENSION_INIT2(pApi);
--  (void)pzErrMsg;  /* Unused parameter */
-   rc = sqlite3_create_function(db, "tointeger", 1,
-         SQLITE_UTF8 | SQLITE_DETERMINISTIC | SQLITE_INNOCUOUS, 0,
-         tointegerFunc, 0, 0);
-@@ -512,3 +503,18 @@
-   }
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_totype_init(
-+  sqlite3 *db,
-+  char **pzErrMsg,
-+  const sqlite3_api_routines *pApi
-+){
-+  SQLITE_EXTENSION_INIT2(pApi);
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3TotypeInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/uint.c
-+++ /ext/misc/uint.c
-@@ -78,6 +78,11 @@
-   return (nKey1 - i) - (nKey2 - j);
- }
- 
-+int sqlite3UintInit(sqlite3 *db){
-+  return sqlite3_create_collation(db, "UINT", SQLITE_UTF8, 0, uintCollFunc);
-+}
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -88,5 +93,6 @@
- ){
-   SQLITE_EXTENSION_INIT2(pApi);
-   (void)pzErrMsg;  /* Unused parameter */
--  return sqlite3_create_collation(db, "uint", SQLITE_UTF8, 0, uintCollFunc);
-+  return sqlite3UintInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/uuid.c
-+++ /ext/misc/uuid.c
-@@ -206,21 +206,12 @@
-   sqlite3_result_blob(context, pBlob, 16, SQLITE_TRANSIENT);
- }
- 
--#ifdef _WIN32
--__declspec(dllexport)
--#endif
--int sqlite3_uuid_init(
--  sqlite3 *db,
--  char **pzErrMsg,
--  const sqlite3_api_routines *pApi
--){
-+int sqlite3UuidInit(sqlite3 *db){
-   int rc = SQLITE_OK;
--  SQLITE_EXTENSION_INIT2(pApi);
--  (void)pzErrMsg;  /* Unused parameter */
-   rc = sqlite3_create_function(db, "uuid", 0, SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
-                                sqlite3UuidFunc, 0, 0);
-   if( rc==SQLITE_OK ){
--    rc = sqlite3_create_function(db, "uuid_str", 1, 
-+    rc = sqlite3_create_function(db, "uuid_str", 1,
-                        SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC,
-                        0, sqlite3UuidStrFunc, 0, 0);
-   }
-@@ -231,3 +222,18 @@
-   }
-   return rc;
- }
-+
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
-+#ifdef _WIN32
-+__declspec(dllexport)
-+#endif
-+int sqlite3_uuid_init(
-+  sqlite3 *db,
-+  char **pzErrMsg,
-+  const sqlite3_api_routines *pApi
-+){
-+  SQLITE_EXTENSION_INIT2(pApi);
-+  (void)pzErrMsg;  /* Unused parameter */
-+  return sqlite3UuidInit(db);
-+}
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
---- /ext/misc/zipfile.c
-+++ /ext/misc/zipfile.c
-@@ -24,6 +24,8 @@
- **    *  No support for zip64 extensions
- **    *  Only the "inflate/deflate" (zlib) compression method is supported
- */
-+#ifdef SQLITE_HAVE_ZLIB
-+
- #include "sqlite3ext.h"
- SQLITE_EXTENSION_INIT1
- #include <stdio.h>
-@@ -2139,7 +2141,7 @@
- /*
- ** Register the "zipfile" virtual table.
- */
--static int zipfileRegister(sqlite3 *db){
-+int sqlite3ZipfileInit(sqlite3 *db){
-   static sqlite3_module zipfileModule = {
-     1,                         /* iVersion */
-     zipfileConnect,            /* xCreate */
-@@ -2173,9 +2175,10 @@
-   return rc;
- }
- #else         /* SQLITE_OMIT_VIRTUALTABLE */
--# define zipfileRegister(x) SQLITE_OK
-+# define sqlite3ZipfileInit(x) SQLITE_OK
- #endif
- 
-+#if !defined(SQLITE_CORE) || defined(SQLITE_TEST)
- #ifdef _WIN32
- __declspec(dllexport)
- #endif
-@@ -2186,5 +2189,8 @@
- ){
-   SQLITE_EXTENSION_INIT2(pApi);
-   (void)pzErrMsg;  /* Unused parameter */
--  return zipfileRegister(db);
-+  return sqlite3ZipfileInit(db);
- }
-+#endif /* !defined(SQLITE_CORE) || defined(SQLITE_TEST) */
-+
-+#endif /* SQLITE_HAVE_ZLIB */
diff --git a/dev-db/sqlite/files/sqlite-3.35.0-build_2.1.patch b/dev-db/sqlite/files/sqlite-3.35.0-build_2.1.patch
deleted file mode 100644
index 383a493..0000000
--- a/dev-db/sqlite/files/sqlite-3.35.0-build_2.1.patch
+++ /dev/null
@@ -1,292 +0,0 @@
-Move some code to libsqlite3.so to avoid duplication.
-Link executables against libsqlite3.so.
-Increase timeout for fuzzcheck.
-Update list of optionally available functions.
-Fix building with dlopen() not available.
-
-SQLite revision: acd63062eb06748bfe9e4886639e4f2b54ea6a496a83f10716abbaba4115500b
-
---- /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,29 @@
-   $(TOP)/ext/rbu/sqlite3rbu.h \
-   $(TOP)/ext/rbu/sqlite3rbu.c
- SRC += \
-+  $(TOP)/ext/misc/amatch.c \
-+  $(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/decimal.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/nextchar.c \
-+  $(TOP)/ext/misc/percentile.c \
-+  $(TOP)/ext/misc/regexp.c \
-+  $(TOP)/ext/misc/series.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,36 +461,21 @@
- # Statically linked extensions
- #
- TESTSRC += \
--  $(TOP)/ext/expert/sqlite3expert.c \
-   $(TOP)/ext/expert/test_expert.c \
--  $(TOP)/ext/misc/amatch.c \
--  $(TOP)/ext/misc/appendvfs.c \
--  $(TOP)/ext/misc/carray.c \
-   $(TOP)/ext/misc/cksumvfs.c \
-   $(TOP)/ext/misc/closure.c \
--  $(TOP)/ext/misc/csv.c \
--  $(TOP)/ext/misc/decimal.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
-@@ -648,25 +657,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
-@@ -777,7 +786,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
- #
-@@ -1083,18 +1092,6 @@
- # Source files that go into making shell.c
- SHELL_SRC = \
- 	$(TOP)/src/shell.c.in \
--        $(TOP)/ext/misc/appendvfs.c \
--	$(TOP)/ext/misc/completion.c \
--        $(TOP)/ext/misc/decimal.c \
--	$(TOP)/ext/misc/fileio.c \
--        $(TOP)/ext/misc/ieee754.c \
--        $(TOP)/ext/misc/series.c \
--	$(TOP)/ext/misc/shathree.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
- 
-@@ -1264,11 +1261,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 $(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.
-@@ -1302,24 +1299,23 @@
- shelltest: $(TESTPROGS)
- 	./testfixture$(TEXT) $(TOP)/test/permutations.test shell
- 
--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 \
-@@ -1330,36 +1326,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)
-@@ -1387,11 +1383,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
-@@ -108,7 +108,7 @@
- #########
- # Figure out whether or not we have these functions
- #
--AC_CHECK_FUNCS([fdatasync gmtime_r isnan localtime_r localtime_s malloc_usable_size strchrnul usleep utime pread pread64 pwrite pwrite64])
-+AC_CHECK_FUNCS([fdatasync fullfsync gmtime_r isnan localtime_r localtime_s malloc_usable_size posix_fallocate pread pread64 pwrite pwrite64 strchrnul usleep utime])
- 
- #########
- # By default, we use the amalgamation (this may be changed below...)
-@@ -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
diff --git a/dev-db/sqlite/files/sqlite-3.35.0-build_2.2.patch b/dev-db/sqlite/files/sqlite-3.35.0-build_2.2.patch
deleted file mode 100644
index 99350c7..0000000
--- a/dev-db/sqlite/files/sqlite-3.35.0-build_2.2.patch
+++ /dev/null
@@ -1,441 +0,0 @@
-Move some code to libsqlite3.so to avoid duplication.
-Initialize some extensions in libsqlite3.so.
-Update test suite.
-
-SQLite revision: acd63062eb06748bfe9e4886639e4f2b54ea6a496a83f10716abbaba4115500b
-
---- /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);
- 
-@@ -11108,6 +11079,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
-@@ -359,6 +359,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
-@@ -546,6 +548,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
-@@ -668,6 +672,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
diff --git a/dev-db/sqlite/metadata.xml b/dev-db/sqlite/metadata.xml
index 67b1888..1446d7c 100644
--- a/dev-db/sqlite/metadata.xml
+++ b/dev-db/sqlite/metadata.xml
@@ -1,17 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
 <pkgmetadata>
-	<maintainer type="person" proxied="yes">
-		<email>arfrever.fta@gmail.com</email>
-		<name>Arfrever Frehtes Taifersar Arahesis</name>
+	<maintainer type="person">
+		<email>jsmolic@gentoo.org</email>
 	</maintainer>
-	<maintainer type="person" proxied="proxy">
-		<email>floppym@gentoo.org</email>
-		<name>Mike Gilbert</name>
+	<maintainer type="project">
+		<email>base-system@gentoo.org</email>
 	</maintainer>
 	<use>
 		<flag name="secure-delete">Enable overwriting of deleted content with zeros by default (http://sqlite.org/pragma.html#pragma_secure_delete), causing some performance penalty</flag>
-		<flag name="tools">Install additional tools</flag>
+		<flag name="tools">Install additional tools, among which are included: sqlite3-analyzer, sqlite3-changeset, sqlite3-db-dump, sqlite3-diff, sqlite3-rbu, sqlite3-expert and others.</flag>
 	</use>
 	<upstream>
 		<remote-id type="cpe">cpe:/a:sqlite:sqlite</remote-id>
diff --git a/dev-db/sqlite/sqlite-3.34.1.ebuild b/dev-db/sqlite/sqlite-3.37.2.ebuild
similarity index 96%
rename from dev-db/sqlite/sqlite-3.34.1.ebuild
rename to dev-db/sqlite/sqlite-3.37.2.ebuild
index e2730e4..1a27171 100644
--- a/dev-db/sqlite/sqlite-3.34.1.ebuild
+++ b/dev-db/sqlite/sqlite-3.37.2.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2021 Gentoo Authors
+# Copyright 1999-2022 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI="7"
@@ -16,8 +16,8 @@
 if [[ "${PV}" == "9999" ]]; then
 	SRC_URI=""
 else
-	SRC_URI="https://sqlite.org/2021/${PN}-src-${SRC_PV}.zip
-		doc? ( https://sqlite.org/2021/${PN}-doc-${DOC_PV}.zip )"
+	SRC_URI="https://sqlite.org/2022/${PN}-src-${SRC_PV}.zip
+		doc? ( https://sqlite.org/2022/${PN}-doc-${DOC_PV}.zip )"
 fi
 
 LICENSE="public-domain"
@@ -136,8 +136,6 @@
 }
 
 src_prepare() {
-	eapply "${FILESDIR}/"${PN}-3.34.1-build_{1.1,1.2,2.1,2.2}.patch
-
 	eapply_user
 
 	eautoreconf
@@ -320,12 +318,6 @@
 		options+=(--disable-tcl)
 	fi
 
-	if [[ "${CHOST}" == *-mint* ]]; then
-		# sys/mman.h not available in MiNTLib.
-		# https://sqlite.org/compile.html#omit_wal
-		append-cppflags -DSQLITE_OMIT_WAL
-	fi
-
 	if [[ "${ABI}" == "x86" ]]; then
 		if $(tc-getCC) ${CPPFLAGS} ${CFLAGS} -E -P -dM - < /dev/null 2> /dev/null | grep -q "^#define __SSE__ 1$"; then
 			append-cflags -mfpmath=sse
diff --git a/metadata/md5-cache/dev-db/sqlite-3.34.1 b/metadata/md5-cache/dev-db/sqlite-3.37.2
similarity index 77%
rename from metadata/md5-cache/dev-db/sqlite-3.34.1
rename to metadata/md5-cache/dev-db/sqlite-3.37.2
index 8edc476..f0a00e0 100644
--- a/metadata/md5-cache/dev-db/sqlite-3.34.1
+++ b/metadata/md5-cache/dev-db/sqlite-3.37.2
@@ -10,12 +10,6 @@
 RDEPEND=sys-libs/zlib:0=[abi_x86_32(-)?,abi_x86_64(-)?,abi_x86_x32(-)?,abi_mips_n32(-)?,abi_mips_n64(-)?,abi_mips_o32(-)?,abi_ppc_32(-)?,abi_ppc_64(-)?,abi_s390_32(-)?,abi_s390_64(-)?,abi_arm_32(-)?,abi_arm_64(-)?] icu? ( dev-libs/icu:0=[abi_x86_32(-)?,abi_x86_64(-)?,abi_x86_x32(-)?,abi_mips_n32(-)?,abi_mips_n64(-)?,abi_mips_o32(-)?,abi_ppc_32(-)?,abi_ppc_64(-)?,abi_s390_32(-)?,abi_s390_64(-)?,abi_arm_32(-)?,abi_arm_64(-)?] ) readline? ( sys-libs/readline:0=[abi_x86_32(-)?,abi_x86_64(-)?,abi_x86_x32(-)?,abi_mips_n32(-)?,abi_mips_n64(-)?,abi_mips_o32(-)?,abi_ppc_32(-)?,abi_ppc_64(-)?,abi_s390_32(-)?,abi_s390_64(-)?,abi_arm_32(-)?,abi_arm_64(-)?] ) tcl? ( dev-lang/tcl:0=[abi_x86_32(-)?,abi_x86_64(-)?,abi_x86_x32(-)?,abi_mips_n32(-)?,abi_mips_n64(-)?,abi_mips_o32(-)?,abi_ppc_32(-)?,abi_ppc_64(-)?,abi_s390_32(-)?,abi_s390_64(-)?,abi_arm_32(-)?,abi_arm_64(-)?] ) tools? ( dev-lang/tcl:0= )
 RESTRICT=!test? ( test )
 SLOT=3
-<<<<<<< HEAD:metadata/md5-cache/dev-db/sqlite-3.34.1
-SRC_URI=https://sqlite.org/2021/sqlite-src-3340100.zip doc? ( https://sqlite.org/2021/sqlite-doc-3340100.zip )
-_eclasses_=autotools	d0e5375d47f4c809f406eb892e531513	eutils	fcb2aa98e1948b835b5ae66ca52868c5	flag-o-matic	5d5921a298e95441da2f85be419894c0	libtool	f143db5a74ccd9ca28c1234deffede96	multibuild	40fe59465edacd730c644ec2bc197809	multilib	2477ebe553d3e4d2c606191fe6c33602	multilib-build	1979aa0ff4d356d32507ca4650d9f37d	multilib-minimal	8bddda43703ba94d8341f4e247f97566	toolchain-funcs	605c126bed8d87e4378d5ff1645330cb
-_md5_=5ec9b05a23b1cff374c9ac49f307773f
-=======
-SRC_URI=https://sqlite.org/2020/sqlite-src-3320300.zip doc? ( https://sqlite.org/2020/sqlite-doc-3320300.zip )
+SRC_URI=https://sqlite.org/2022/sqlite-src-3370200.zip doc? ( https://sqlite.org/2022/sqlite-doc-3370200.zip )
 _eclasses_=autotools	d0e5375d47f4c809f406eb892e531513	eutils	fcb2aa98e1948b835b5ae66ca52868c5	flag-o-matic	5d5921a298e95441da2f85be419894c0	libtool	f143db5a74ccd9ca28c1234deffede96	multibuild	40fe59465edacd730c644ec2bc197809	multilib	2477ebe553d3e4d2c606191fe6c33602	multilib-build	1979aa0ff4d356d32507ca4650d9f37d	multilib-minimal	8bddda43703ba94d8341f4e247f97566	toolchain-funcs	f783d68a26b62d6b19e070e6bcada5e6
-_md5_=8d00e548b21f9a4ff66d6d7b03d2429f
->>>>>>> a260818a85fec2db7218d8ad60f4a0eea3335b52:metadata/md5-cache/dev-db/sqlite-3.32.3
+_md5_=f0673a59f6e599b785a78a53b24b8e7f
