dev-db/sqlite: Version bump (3.31.1).
authorArfrever Frehtes Taifersar Arahesis <Arfrever@Apache.Org>
Mon, 9 Mar 2020 16:27:11 +0000 (16:27 +0000)
committerMike Gilbert <floppym@gentoo.org>
Mon, 9 Mar 2020 19:26:39 +0000 (15:26 -0400)
Signed-off-by: Arfrever Frehtes Taifersar Arahesis <Arfrever@Apache.Org>
Signed-off-by: Mike Gilbert <floppym@gentoo.org>
dev-db/sqlite/Manifest
dev-db/sqlite/files/sqlite-3.31.0-full_archive-build.patch [new file with mode: 0644]
dev-db/sqlite/files/sqlite-3.31.1-full_archive-architectures.patch [new file with mode: 0644]
dev-db/sqlite/files/sqlite-3.31.1-nonfull_archive-architectures.patch [new file with mode: 0644]
dev-db/sqlite/sqlite-3.31.1.ebuild [new file with mode: 0644]

index 5ab8f5737dd8d37ab30aab0bc215ff48b1b5ee9c..af34cd489009696ceeeeeb2ec980a1a04f745068 100644 (file)
@@ -1,6 +1,9 @@
 DIST sqlite-autoconf-3290000.tar.gz 2833613 BLAKE2B b68a4f9bfe90653f5ce9dbf94b44cecc843fbb639883a7be9dd40150749f8d2eca0c231b215137d2f8da78d33356d72640a943ba06516c6d7c10ebd04cae4766 SHA512 85dcaa72cc2476c628e801d4ce46cf10ed8997f56cb0334062df5553f18c29d607883a1049bf75258204f2f53a29a02a01f014dcca383b05dfac1e2123778024
 DIST sqlite-autoconf-3300100.tar.gz 2848951 BLAKE2B 3a541a2b07ebbaf7ddca4693b71765e2ecd11974dd64b4a7a19eaee4eea8a17a6004c69f3b2163213fe7568480152709745e029107711813d4bdd41052763cd1 SHA512 9ec0283c417fb0323b0e43550af2a49e9a63988e4212c27ea62cc9da3534caa6faf5bdc7e051b6772c4ce61560a433b3d3288b68e05e9ba8495f61a3bcebda3e
+DIST sqlite-autoconf-3310100.tar.gz 2887243 BLAKE2B ef5d40b6e6c59a51ae95368eb9f6a938188813f89d5328ea1c1180ef35f124c14b3e83b0832ae5c2fa24cc2df352f1b0ea5f20b64d0762d50a700d9895f9a12e SHA512 d85250ba5f78f0c918880f663741709aba662192f04888b2324a0df17affdf5b8540e8428c6c7315119806e7adad758ea281c9b403c0ad94ac6a9bd1b93fd617
 DIST sqlite-doc-3290000.zip 9415641 BLAKE2B 97fef1f01d3e7730e5220541ad9ccdf9f8538aa43939c0f513919c8505b3a4f4b4c89eb2e04fddae80b7eeed440eb0f06f7cfd93cd56f0539bd6fdd5f47e1ff7 SHA512 ca856cf250e395d9c7e9817337adb5a16b1d96a20548a4010f5137188d35bb9d49a4a6da47bf2a696deffa68d2976dbb35a036adce19b8320e0e286876ac094f
 DIST sqlite-doc-3300100.zip 9485342 BLAKE2B bf5e3909a327c773106d4990b3e3be5dd63db2dbc1a7f8a7c1bd16f39bec83a6b2a98c4c56ded3b58f4087dcdcc934e542db36e142bf338a411ed7115d67d6b3 SHA512 373e843015307071443a0db5fb930f9120718f6118cc2e21b506fdc8535fbe6996e9889e8b5809ffb91257addfe778bdf3412a81e11f6bced2c5e0330337d00d
+DIST sqlite-doc-3310100.zip 9600405 BLAKE2B 324fb7a0a38bc56476e41504c14996e9d5d83ac659403991515413d49f5ee3aad064ccece25f52b6041ef26bf23f320a9be1b6b02c5fbe96c36372107f54fc2e SHA512 5572e2c2dac30c014ef9cd60a620b7a7bb610f91a47e2890c0641540d39b9d5ce0e914ee697583130317633918b7827e2612a7cbc024f5bd6aa22ad28a78b56b
 DIST sqlite-src-3290000.zip 12557725 BLAKE2B b1aeb80734a2cb7d45c6f2e278bad2996b56ecaf792a8f26322bf50aeaa430eea267f23edb1721bb80ecb6e0c8e14c7a5d8f26178d056fd23efb52f496cc03e1 SHA512 575398fbe20c6471ee2abcbde170b8d48efbb3cb2716a65f42f05c52429a45d14e8046e50c59bbf75bfe2d8f151c34abd50b440c50af571f19e19f3290b230df
 DIST sqlite-src-3300100.zip 12648162 BLAKE2B bb239bac9115c74778de0347b4f4e24a82f149f55fe7dea8b89eb859bfe4cf6f6c2f065f5e1741c40624bb88ecd395140064a41d475a1c64a0188990fd6248e7 SHA512 f40236d0bb25f3ea01a1192dace3b6732fb671fbdabb7cfa8d0cc2b99d21aef00ae380999fdee904501cb03304644cddfb2506951f36a2f6a83693f311c3c11d
+DIST sqlite-src-3310100.zip 12510166 BLAKE2B a856695e8552b8b4dcb28452fdbd48305fdb9072f9d6587f4b1f4445daf386e920eb936dcb50fdfe41a49f84b26a7c5fedcffea5acf3ba3fa935c36695d4b8ee SHA512 af92a00877bcd90372d6f83a27fea12b4fe8d1155b223a6bccbccc31bb8e3d2269cd9e68f329bc55f70d1068ccbf220ff5abccea6f593fd7a3a4bdd732d1cdbe
diff --git a/dev-db/sqlite/files/sqlite-3.31.0-full_archive-build.patch b/dev-db/sqlite/files/sqlite-3.31.0-full_archive-build.patch
new file mode 100644 (file)
index 0000000..9ff44c0
--- /dev/null
@@ -0,0 +1,466 @@
+Move some code to libsqlite3.so to avoid duplication.
+Link executables against libsqlite3.so.
+Increase timeout for fuzzcheck.
+Fix building with dlopen() not available.
+
+--- /Makefile.in
++++ /Makefile.in
+@@ -311,6 +311,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 \
+@@ -363,8 +366,12 @@
+   $(TOP)/ext/rbu/sqlite3rbu.h \
+   $(TOP)/ext/rbu/sqlite3rbu.c
+ SRC += \
++  $(TOP)/ext/misc/appendvfs.c \
++  $(TOP)/ext/misc/dbdata.c \
+   $(TOP)/ext/misc/json1.c \
+-  $(TOP)/ext/misc/stmt.c
++  $(TOP)/ext/misc/sqlar.c \
++  $(TOP)/ext/misc/stmt.c \
++  $(TOP)/ext/misc/zipfile.c
+ # Generated source code files
+ #
+@@ -435,7 +442,6 @@
+ # 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 \
+@@ -461,7 +467,6 @@
+   $(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
+@@ -639,25 +644,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
+@@ -767,7 +772,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
+ #
+@@ -1064,14 +1069,9 @@
+ # Source files that go into making shell.c
+ SHELL_SRC = \
+       $(TOP)/src/shell.c.in \
+-        $(TOP)/ext/misc/appendvfs.c \
+       $(TOP)/ext/misc/shathree.c \
+       $(TOP)/ext/misc/fileio.c \
+       $(TOP)/ext/misc/completion.c \
+-      $(TOP)/ext/misc/sqlar.c \
+-      $(TOP)/ext/expert/sqlite3expert.c \
+-      $(TOP)/ext/expert/sqlite3expert.h \
+-      $(TOP)/ext/misc/zipfile.c \
+       $(TOP)/ext/misc/memtrace.c \
+         $(TOP)/src/test_windirent.c
+@@ -1239,11 +1239,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.
+@@ -1274,24 +1274,23 @@
+ smoketest:    $(TESTPROGS) fuzzcheck$(TEXE)
+       ./testfixture$(TEXE) $(TOP)/test/main.test $(TESTOPTS)
+-sqlite3_analyzer.c: sqlite3.c $(TOP)/src/tclsqlite.c $(TOP)/tool/spaceanal.tcl $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqlite3_analyzer.c.in
++sqlite3_analyzer.c:   $(TOP)/src/tclsqlite.c $(TOP)/tool/spaceanal.tcl $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqlite3_analyzer.c.in
+       $(TCLSH_CMD) $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqlite3_analyzer.c.in >sqlite3_analyzer.c
+-sqlite3_analyzer$(TEXE): sqlite3_analyzer.c
+-      $(LTLINK) sqlite3_analyzer.c -o $@ $(LIBTCL) $(TLIBS)
++sqlite3_analyzer$(TEXE):      sqlite3_analyzer.c libsqlite3.la
++      $(LTLINK) sqlite3_analyzer.c -o $@ libsqlite3.la $(LIBTCL)
+-sqltclsh.c: sqlite3.c $(TOP)/src/tclsqlite.c $(TOP)/tool/sqltclsh.tcl $(TOP)/ext/misc/appendvfs.c $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqltclsh.c.in
++sqltclsh.c:   $(TOP)/src/tclsqlite.c $(TOP)/tool/sqltclsh.tcl $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqltclsh.c.in
+       $(TCLSH_CMD) $(TOP)/tool/mkccode.tcl $(TOP)/tool/sqltclsh.c.in >sqltclsh.c
+-sqltclsh$(TEXE): sqltclsh.c
+-      $(LTLINK) sqltclsh.c -o $@ $(LIBTCL) $(TLIBS)
++sqltclsh$(TEXE):      sqltclsh.c libsqlite3.la
++      $(LTLINK) sqltclsh.c -o $@ libsqlite3.la $(LIBTCL)
+-sqlite3_expert$(TEXE): $(TOP)/ext/expert/sqlite3expert.h $(TOP)/ext/expert/sqlite3expert.c $(TOP)/ext/expert/expert.c sqlite3.c
+-      $(LTLINK)       $(TOP)/ext/expert/sqlite3expert.h $(TOP)/ext/expert/sqlite3expert.c $(TOP)/ext/expert/expert.c sqlite3.c -o sqlite3_expert $(TLIBS)
++sqlite3_expert$(TEXE):        $(TOP)/ext/expert/sqlite3expert.h $(TOP)/ext/expert/expert.c libsqlite3.la
++      $(LTLINK) $(TOP)/ext/expert/expert.c -o sqlite3_expert libsqlite3.la
+ CHECKER_DEPS =\
+   $(TOP)/tool/mkccode.tcl \
+-  sqlite3.c \
+   $(TOP)/src/tclsqlite.c \
+   $(TOP)/ext/repair/sqlite3_checker.tcl \
+   $(TOP)/ext/repair/checkindex.c \
+@@ -1302,36 +1301,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)
+@@ -1356,11 +1355,11 @@
+ kvtest$(TEXE):        $(TOP)/test/kvtest.c sqlite3.c
+       $(LTLINK) $(KV_OPT) -o $@ $(TOP)/test/kvtest.c sqlite3.c $(TLIBS)
+-rbu$(EXE): $(TOP)/ext/rbu/rbu.c $(TOP)/ext/rbu/sqlite3rbu.c sqlite3.lo
+-      $(LTLINK) -I. -o $@ $(TOP)/ext/rbu/rbu.c sqlite3.lo $(TLIBS)
++rbu$(EXE):    $(TOP)/ext/rbu/rbu.c libsqlite3.la
++      $(LTLINK) -I. -o $@ $(TOP)/ext/rbu/rbu.c libsqlite3.la
+-loadfts$(EXE): $(TOP)/tool/loadfts.c libsqlite3.la
+-      $(LTLINK) $(TOP)/tool/loadfts.c libsqlite3.la -o $@ $(TLIBS)
++loadfts$(EXE):        $(TOP)/tool/loadfts.c libsqlite3.la
++      $(LTLINK) $(TOP)/tool/loadfts.c libsqlite3.la -o $@
+ # This target will fail if the SQLite amalgamation contains any exported
+ # symbols that do not begin with "sqlite3_". It is run as part of the
+--- /configure.ac
++++ /configure.ac
+@@ -587,6 +587,9 @@
+ if test "${enable_load_extension}" = "yes" ; then
+   OPT_FEATURE_FLAGS=""
+   AC_SEARCH_LIBS(dlopen, dl)
++  if test "${ac_cv_search_dlopen}" = "no" ; then
++    OPT_FEATURE_FLAGS="-DSQLITE_OMIT_LOAD_EXTENSION=1"
++  fi
+ else
+   OPT_FEATURE_FLAGS="-DSQLITE_OMIT_LOAD_EXTENSION=1"
+ fi
+--- /ext/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>
+@@ -121,3 +123,5 @@
+   }
+   return rc;
+ }
++
++#endif /* SQLITE_HAVE_ZLIB */
+--- /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>
+@@ -2186,3 +2188,5 @@
+   (void)pzErrMsg;  /* Unused parameter */
+   return zipfileRegister(db);
+ }
++
++#endif /* SQLITE_HAVE_ZLIB */
+--- /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/shell.c.in
++++ /src/shell.c.in
+@@ -61,6 +61,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;
+@@ -127,6 +128,10 @@
+ # define SHELL_USE_LOCAL_GETLINE 1
+ #endif
++#ifdef SQLITE_HAVE_ZLIB
++#include <zlib.h>
++#endif
++
+ #if defined(_WIN32) || defined(WIN32)
+ # include <io.h>
+@@ -939,18 +944,7 @@
+ 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
+-#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)
+ /*
+@@ -4173,10 +4167,13 @@
+     sqlite3_shathree_init(p->db, 0, 0);
+     sqlite3_completion_init(p->db, 0, 0);
+ #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB)
++    extern int sqlite3_dbdata_init(sqlite3 *, char **, const sqlite3_api_routines *);
+     sqlite3_dbdata_init(p->db, 0, 0);
+ #endif
+ #ifdef SQLITE_HAVE_ZLIB
++    extern int sqlite3_zipfile_init(sqlite3 *, char **, const sqlite3_api_routines *);
+     sqlite3_zipfile_init(p->db, 0, 0);
++    extern int sqlite3_sqlar_init(sqlite3 *, char **, const sqlite3_api_routines *);
+     sqlite3_sqlar_init(p->db, 0, 0);
+ #endif
+     sqlite3_create_function(p->db, "shell_add_schema", 3, SQLITE_UTF8, 0,
+@@ -6176,6 +6173,7 @@
+         goto end_ar_command;
+       }
+       sqlite3_fileio_init(cmd.db, 0, 0);
++      extern int sqlite3_sqlar_init(sqlite3 *, char **, const sqlite3_api_routines *);
+       sqlite3_sqlar_init(cmd.db, 0, 0);
+       sqlite3_create_function(cmd.db, "shell_putsnl", 1, SQLITE_UTF8, cmd.p,
+                               shellPutsFunc, 0, 0);
+@@ -10354,6 +10352,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
+--- /test/sessionfuzz.c
++++ /test/sessionfuzz.c
+@@ -700,42 +700,6 @@
+ #include <assert.h>
+ #include "zlib.h"
+-/*
+-** Implementation of the "sqlar_uncompress(X,SZ)" SQL function
+-**
+-** Parameter SZ is interpreted as an integer. If it is less than or
+-** equal to zero, then this function returns a copy of X. Or, if
+-** SZ is equal to the size of X when interpreted as a blob, also
+-** return a copy of X. Otherwise, decompress blob X using zlib
+-** utility function uncompress() and return the results (another
+-** blob).
+-*/
+-static void sqlarUncompressFunc(
+-  sqlite3_context *context,
+-  int argc,
+-  sqlite3_value **argv
+-){
+-  uLong nData;
+-  uLongf sz;
+-
+-  assert( argc==2 );
+-  sz = sqlite3_value_int(argv[1]);
+-
+-  if( sz<=0 || sz==(nData = sqlite3_value_bytes(argv[0])) ){
+-    sqlite3_result_value(context, argv[0]);
+-  }else{
+-    const Bytef *pData= sqlite3_value_blob(argv[0]);
+-    Bytef *pOut = sqlite3_malloc(sz);
+-    if( Z_OK!=uncompress(pOut, &sz, pData, nData) ){
+-      sqlite3_result_error(context, "error in uncompress()", -1);
+-    }else{
+-      sqlite3_result_blob(context, pOut, sz, SQLITE_TRANSIENT);
+-    }
+-    sqlite3_free(pOut);
+-  }
+-}
+-
+-
+ /* Run a chunk of SQL.  If any errors happen, print an error message
+ ** and exit.
+ */
+--- /tool/mksqlite3c.tcl
++++ /tool/mksqlite3c.tcl
+@@ -117,6 +117,7 @@
+    rtree.h
+    sqlite3session.h
+    sqlite3.h
++   sqlite3expert.h
+    sqlite3ext.h
+    sqlite3rbu.h
+    sqliteicu.h
+@@ -403,6 +404,11 @@
+    sqlite3session.c
+    fts5.c
+    stmt.c
++   appendvfs.c
++   dbdata.c
++   sqlar.c
++   sqlite3expert.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,19 +27,17 @@
+ #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
++  extern int sqlite3_sqlar_init(sqlite3 *, char **, const sqlite3_api_routines *);
+   sqlite3_auto_extension((void(*)(void))sqlite3_sqlar_init);
++  extern int sqlite3_zipfile_init(sqlite3 *, char **, const sqlite3_api_routines *);
+   sqlite3_auto_extension((void(*)(void))sqlite3_zipfile_init);
+ #endif
diff --git a/dev-db/sqlite/files/sqlite-3.31.1-full_archive-architectures.patch b/dev-db/sqlite/files/sqlite-3.31.1-full_archive-architectures.patch
new file mode 100644 (file)
index 0000000..a0cf751
--- /dev/null
@@ -0,0 +1,72 @@
+https://sqlite.org/cgi/src/info/04885763c4cd00cb
+https://sqlite.org/cgi/src/info/b20503aaf5b6595a
+
+--- /ext/fts5/test/fts5matchinfo.test
++++ /ext/fts5/test/fts5matchinfo.test
+@@ -500,14 +500,18 @@
+   INSERT INTO t1 VALUES('c', 'd');
+ }
++if {$tcl_platform(byteOrder)=="littleEndian"} {
++  set res {X'02000000'}
++} else {
++  set res {X'00000002'}
++}
+ do_execsql_test 15.1 {
+   SELECT quote(matchinfo(t1, 'n')) FROM t1 LIMIT 1;
+-} {X'02000000'}
+-
++} $res
+ do_execsql_test 15.2 {
+   DELETE FROM t1_content WHERE rowid=1;
+   SELECT quote(matchinfo(t1, 'n')) FROM t1 LIMIT 1;
+-} {X'02000000'}
++} $res
+ fts5_aux_test_functions db
+ do_execsql_test 15.3 {
+@@ -517,4 +521,3 @@
+ }
+ finish_test
+-
+--- /src/insert.c
++++ /src/insert.c
+@@ -2170,12 +2170,14 @@
+             x = *sqlite3VdbeGetOp(v, addrConflictCk);
+             if( x.opcode!=OP_IdxRowid ){
+               int p2;      /* New P2 value for copied conflict check opcode */
++              const char *zP4;
+               if( sqlite3OpcodeProperty[x.opcode]&OPFLG_JUMP ){
+                 p2 = lblRecheckOk;
+               }else{
+                 p2 = x.p2;
+               }
+-              sqlite3VdbeAddOp4(v, x.opcode, x.p1, p2, x.p3, x.p4.z, x.p4type);
++              zP4 = x.p4type==P4_INT32 ? SQLITE_INT_TO_PTR(x.p4.i) : x.p4.z;
++              sqlite3VdbeAddOp4(v, x.opcode, x.p1, p2, x.p3, zP4, x.p4type);
+               sqlite3VdbeChangeP5(v, x.p5);
+               VdbeCoverageIf(v, p2!=x.p2);
+             }
+--- /test/fts4aa.test
++++ /test/fts4aa.test
+@@ -229,13 +229,18 @@
+ # 2019-11-18 https://bugs.chromium.org/p/chromium/issues/detail?id=1025467
+ db close
+ sqlite3 db :memory:
++if {$tcl_platform(byteOrder)=="littleEndian"} {
++  set res {X'0200000000000000000000000E0000000E00000001000000010000000100000001000000'}
++} else {
++  set res {X'0000000200000000000000000000000E0000000E00000001000000010000000100000001'}
++}
+ do_execsql_test fts4aa-6.10 {
+   CREATE VIRTUAL TABLE f USING fts4();
+   INSERT INTO f_segdir VALUES (77,91,0,0,'255 77',x'0001308000004d5c4ddddddd4d4d7b4d4d4d614d8019ff4d05000001204d4d2e4d6e4d4d4d4b4d6c4d004d4d4d4d4d4d3d000000004d5d4d4d645d4d004d4d4d4d4d4d4d4d4d454d6910004d05ffff054d646c4d004d5d4d4d4d4d3d000000004d4d4d4d4d4d4d4d4d4d4d69624d4d4d04004d4d4d4d4d604d4ce1404d554d45');
+   INSERT INTO f_segdir VALUES (77,108,0,0,'255 77',x'0001310000fa64004d4d4d3c5d4d654d4d4d614d8000ff4d05000001204d4d2e4d6e4d4d4dff4d4d4d4d4d4d00104d4d4d4d000000004d4d4d0400311d4d4d4d4d4d4d4d4d4d684d6910004d05ffff054d4d6c4d004d4d4d4d4d4d3d000000004d4d4d4d644d4d4d4d4d4d69624d4d4d03ed4d4d4d4d4d604d4ce1404d550080');
+   INSERT INTO f_stat VALUES (0,x'80808080100000000064004d4d4d3c4d4d654d4d4d614d8000ff4df6ff1a00204d4d2e4d6e4d4d4d104d4d4d4d4d4d00104d4d4d4d4d4d69574d4d4d000031044d4d4d3e4d4d4c4d05004d6910');
+   SELECT quote(matchinfo(f,'pnax')) from f where f match '0 1';
+-} {X'0200000000000000000000000E0000000E00000001000000010000000100000001000000'}
++} $res
+ # 2019-11-18 Detect infinite loop in fts3SelectLeaf()
+ db close
diff --git a/dev-db/sqlite/files/sqlite-3.31.1-nonfull_archive-architectures.patch b/dev-db/sqlite/files/sqlite-3.31.1-nonfull_archive-architectures.patch
new file mode 100644 (file)
index 0000000..79f6f07
--- /dev/null
@@ -0,0 +1,20 @@
+https://sqlite.org/cgi/src/info/04885763c4cd00cb
+
+--- /sqlite3.c
++++ /sqlite3.c
+@@ -121302,12 +121302,14 @@
+             x = *sqlite3VdbeGetOp(v, addrConflictCk);
+             if( x.opcode!=OP_IdxRowid ){
+               int p2;      /* New P2 value for copied conflict check opcode */
++              const char *zP4;
+               if( sqlite3OpcodeProperty[x.opcode]&OPFLG_JUMP ){
+                 p2 = lblRecheckOk;
+               }else{
+                 p2 = x.p2;
+               }
+-              sqlite3VdbeAddOp4(v, x.opcode, x.p1, p2, x.p3, x.p4.z, x.p4type);
++              zP4 = x.p4type==P4_INT32 ? SQLITE_INT_TO_PTR(x.p4.i) : x.p4.z;
++              sqlite3VdbeAddOp4(v, x.opcode, x.p1, p2, x.p3, zP4, x.p4type);
+               sqlite3VdbeChangeP5(v, x.p5);
+               VdbeCoverageIf(v, p2!=x.p2);
+             }
diff --git a/dev-db/sqlite/sqlite-3.31.1.ebuild b/dev-db/sqlite/sqlite-3.31.1.ebuild
new file mode 100644 (file)
index 0000000..13c2752
--- /dev/null
@@ -0,0 +1,390 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="7"
+
+inherit autotools flag-o-matic multilib-minimal toolchain-funcs
+
+if [[ "${PV}" != "9999" ]]; then
+       SRC_PV="$(printf "%u%02u%02u%02u" $(ver_rs 1- " "))"
+       DOC_PV="${SRC_PV}"
+       # DOC_PV="$(printf "%u%02u%02u00" $(ver_rs 1-3 " "))"
+fi
+
+DESCRIPTION="SQL database engine"
+HOMEPAGE="https://sqlite.org/"
+if [[ "${PV}" == "9999" ]]; then
+       SRC_URI=""
+else
+       SRC_URI="doc? ( https://sqlite.org/2020/${PN}-doc-${DOC_PV}.zip )
+               tcl? ( https://sqlite.org/2020/${PN}-src-${SRC_PV}.zip )
+               test? ( https://sqlite.org/2020/${PN}-src-${SRC_PV}.zip )
+               tools? ( https://sqlite.org/2020/${PN}-src-${SRC_PV}.zip )
+               !tcl? ( !test? ( !tools? ( https://sqlite.org/2020/${PN}-autoconf-${SRC_PV}.tar.gz ) ) )"
+fi
+
+LICENSE="public-domain"
+SLOT="3"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sh ~sparc ~x86 ~ppc-aix ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
+IUSE="debug doc icu +readline secure-delete static-libs tcl test tools"
+if [[ "${PV}" == "9999" ]]; then
+       PROPERTIES="live"
+fi
+RESTRICT="!test? ( test )"
+
+if [[ "${PV}" == "9999" ]]; then
+       BDEPEND=">=dev-lang/tcl-8.6:0
+               dev-vcs/fossil"
+else
+       BDEPEND="doc? ( app-arch/unzip )
+               tcl? (
+                       app-arch/unzip
+                       >=dev-lang/tcl-8.6:0
+               )
+               test? (
+                       app-arch/unzip
+                       >=dev-lang/tcl-8.6:0
+               )
+               tools? (
+                       app-arch/unzip
+                       >=dev-lang/tcl-8.6:0
+               )"
+fi
+RDEPEND="sys-libs/zlib:0=[${MULTILIB_USEDEP}]
+       icu? ( dev-libs/icu:0=[${MULTILIB_USEDEP}] )
+       readline? ( sys-libs/readline:0=[${MULTILIB_USEDEP}] )
+       tcl? ( dev-lang/tcl:0=[${MULTILIB_USEDEP}] )
+       tools? ( dev-lang/tcl:0=[${MULTILIB_USEDEP}] )"
+DEPEND="${RDEPEND}
+       test? ( >=dev-lang/tcl-8.6:0[${MULTILIB_USEDEP}] )"
+
+full_archive() {
+       [[ "${PV}" == "9999" ]] || use tcl || use test || use tools
+}
+
+pkg_setup() {
+       if [[ "${PV}" == "9999" ]]; then
+               S="${WORKDIR}/${PN}"
+       else
+               if full_archive; then
+                       S="${WORKDIR}/${PN}-src-${SRC_PV}"
+               else
+                       S="${WORKDIR}/${PN}-autoconf-${SRC_PV}"
+               fi
+       fi
+}
+
+src_unpack() {
+       if [[ "${PV}" == "9999" ]]; then
+               local distdir="${PORTAGE_ACTUAL_DISTDIR:-${DISTDIR}}"
+               addwrite "${distdir}"
+               mkdir -p "${distdir}/fossil-src/${PN}" || die
+
+               mkdir "${WORKDIR}/${PN}" || die
+               pushd "${WORKDIR}/${PN}" > /dev/null || die
+               if [[ ! -f "${distdir}/fossil-src/${PN}/sqlite.fossil" ]]; then
+                       einfo fossil clone --verbose https://sqlite.org/src sqlite.fossil
+                       fossil clone --verbose https://sqlite.org/src sqlite.fossil || die
+                       echo
+               else
+                       cp -p "${distdir}/fossil-src/${PN}/sqlite.fossil" . || die
+                       einfo fossil pull --repository sqlite.fossil --verbose https://sqlite.org/src
+                       fossil pull --repository sqlite.fossil --verbose https://sqlite.org/src || die
+                       echo
+               fi
+               cp -p sqlite.fossil "${distdir}/fossil-src/${PN}" || die
+               einfo fossil open --quiet sqlite.fossil
+               fossil open --quiet sqlite.fossil || die
+               echo
+               popd > /dev/null || die
+
+               if use doc; then
+                       mkdir "${WORKDIR}/${PN}-doc" || die
+                       pushd "${WORKDIR}/${PN}-doc" > /dev/null || die
+                       if [[ ! -f "${distdir}/fossil-src/${PN}/sqlite-doc.fossil" ]]; then
+                               einfo fossil clone --verbose https://sqlite.org/docsrc sqlite-doc.fossil
+                               fossil clone --verbose https://sqlite.org/docsrc sqlite-doc.fossil || die
+                               echo
+                       else
+                               cp -p "${distdir}/fossil-src/${PN}/sqlite-doc.fossil" . || die
+                               einfo fossil pull --repository sqlite-doc.fossil --verbose https://sqlite.org/docsrc
+                               fossil pull --repository sqlite-doc.fossil --verbose https://sqlite.org/docsrc || die
+                               echo
+                       fi
+                       cp -p sqlite-doc.fossil "${distdir}/fossil-src/${PN}" || die
+                       einfo fossil open --quiet sqlite-doc.fossil
+                       fossil open --quiet sqlite-doc.fossil || die
+                       echo
+                       popd > /dev/null || die
+               fi
+       else
+               default
+       fi
+}
+
+src_prepare() {
+       if full_archive; then
+               eapply "${FILESDIR}/${PN}-3.31.0-full_archive-build.patch"
+               eapply "${FILESDIR}/${PN}-3.31.1-full_archive-architectures.patch"
+
+               eapply_user
+
+               # Fix AC_CHECK_FUNCS.
+               # https://mailinglists.sqlite.org/cgi-bin/mailman/private/sqlite-dev/2016-March/002762.html
+               sed -e "s/AC_CHECK_FUNCS(.*)/AC_CHECK_FUNCS([fdatasync fullfsync gmtime_r isnan localtime_r localtime_s malloc_usable_size posix_fallocate pread pread64 pwrite pwrite64 strchrnul usleep utime])/" -i configure.ac || die "sed failed"
+       else
+               eapply "${FILESDIR}/${PN}-3.25.0-nonfull_archive-build.patch"
+               eapply "${FILESDIR}/${PN}-3.31.1-nonfull_archive-architectures.patch"
+
+               eapply_user
+
+               # Fix AC_CHECK_FUNCS.
+               # https://mailinglists.sqlite.org/cgi-bin/mailman/private/sqlite-dev/2016-March/002762.html
+               sed \
+                       -e "s/AC_CHECK_FUNCS(\[fdatasync.*/AC_CHECK_FUNCS([fdatasync fullfsync gmtime_r isnan localtime_r localtime_s malloc_usable_size posix_fallocate pread pread64 pwrite pwrite64 strchrnul usleep utime])/" \
+                       -e "/AC_CHECK_FUNCS(posix_fallocate)/d" \
+                       -i configure.ac || die "sed failed"
+       fi
+
+       eautoreconf
+
+       multilib_copy_sources
+}
+
+multilib_src_configure() {
+       local -x CPPFLAGS="${CPPFLAGS}" CFLAGS="${CFLAGS}"
+       local options=()
+
+       options+=(
+               --enable-$(full_archive && echo load-extension || echo dynamic-extensions)
+               --enable-threadsafe
+       )
+       if ! full_archive; then
+               options+=(--disable-static-shell)
+       fi
+
+       # Support detection of misuse of SQLite API.
+       # https://sqlite.org/compile.html#enable_api_armor
+       append-cppflags -DSQLITE_ENABLE_API_ARMOR
+
+       # Support column metadata functions.
+       # https://sqlite.org/c3ref/column_database_name.html
+       append-cppflags -DSQLITE_ENABLE_COLUMN_METADATA
+
+       # Support sqlite_dbpage virtual table.
+       # https://sqlite.org/compile.html#enable_dbpage_vtab
+       append-cppflags -DSQLITE_ENABLE_DBPAGE_VTAB
+
+       # Support dbstat virtual table.
+       # https://sqlite.org/dbstat.html
+       append-cppflags -DSQLITE_ENABLE_DBSTAT_VTAB
+
+       # Support sqlite3_serialize() and sqlite3_deserialize() functions.
+       # https://sqlite.org/compile.html#enable_deserialize
+       # https://sqlite.org/c3ref/serialize.html
+       # https://sqlite.org/c3ref/deserialize.html
+       append-cppflags -DSQLITE_ENABLE_DESERIALIZE
+
+       # Support comments in output of EXPLAIN.
+       # https://sqlite.org/compile.html#enable_explain_comments
+       append-cppflags -DSQLITE_ENABLE_EXPLAIN_COMMENTS
+
+       # Support Full-Text Search versions 3, 4 and 5.
+       # https://sqlite.org/fts3.html
+       # https://sqlite.org/fts5.html
+       append-cppflags -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS -DSQLITE_ENABLE_FTS4
+       options+=(--enable-fts5)
+
+       # Support hidden columns.
+       append-cppflags -DSQLITE_ENABLE_HIDDEN_COLUMNS
+
+       # Support JSON1 extension.
+       # https://sqlite.org/json1.html
+       append-cppflags -DSQLITE_ENABLE_JSON1
+
+       # Support memsys5 memory allocator.
+       # https://sqlite.org/malloc.html#memsys5
+       append-cppflags -DSQLITE_ENABLE_MEMSYS5
+
+       # Support sqlite3_normalized_sql() function.
+       # https://sqlite.org/c3ref/expanded_sql.html
+       append-cppflags -DSQLITE_ENABLE_NORMALIZE
+
+       # Support sqlite_offset() function.
+       # https://sqlite.org/lang_corefunc.html#sqlite_offset
+       append-cppflags -DSQLITE_ENABLE_OFFSET_SQL_FUNC
+
+       # Support pre-update hook functions.
+       # https://sqlite.org/c3ref/preupdate_count.html
+       append-cppflags -DSQLITE_ENABLE_PREUPDATE_HOOK
+
+       # Support Resumable Bulk Update extension.
+       # https://sqlite.org/rbu.html
+       append-cppflags -DSQLITE_ENABLE_RBU
+
+       # Support R*Trees.
+       # https://sqlite.org/rtree.html
+       # https://sqlite.org/geopoly.html
+       append-cppflags -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_GEOPOLY
+
+       # Support scan status functions.
+       # https://sqlite.org/c3ref/stmt_scanstatus.html
+       # https://sqlite.org/c3ref/stmt_scanstatus_reset.html
+       append-cppflags -DSQLITE_ENABLE_STMT_SCANSTATUS
+
+       # Support sqlite_stmt virtual table.
+       # https://sqlite.org/stmt.html
+       append-cppflags -DSQLITE_ENABLE_STMTVTAB
+
+       # Support Session extension.
+       # https://sqlite.org/sessionintro.html
+       options+=(--enable-session)
+
+       # Support unknown() function.
+       # https://sqlite.org/compile.html#enable_unknown_sql_function
+       append-cppflags -DSQLITE_ENABLE_UNKNOWN_SQL_FUNCTION
+
+       # Support unlock notification.
+       # https://sqlite.org/unlock_notify.html
+       append-cppflags -DSQLITE_ENABLE_UNLOCK_NOTIFY
+
+       # Support LIMIT and ORDER BY clauses on DELETE and UPDATE statements.
+       # https://sqlite.org/compile.html#enable_update_delete_limit
+       append-cppflags -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT
+
+       # Support soundex() function.
+       # https://sqlite.org/lang_corefunc.html#soundex
+       append-cppflags -DSQLITE_SOUNDEX
+
+       # Support URI filenames.
+       # https://sqlite.org/uri.html
+       append-cppflags -DSQLITE_USE_URI
+
+       # debug USE flag.
+       if full_archive; then
+               options+=($(use_enable debug))
+       else
+               if use debug; then
+                       append-cppflags -DSQLITE_DEBUG
+               else
+                       append-cppflags -DNDEBUG
+               fi
+       fi
+
+       # icu USE flag.
+       if use icu; then
+               # Support ICU extension.
+               # https://sqlite.org/compile.html#enable_icu
+               append-cppflags -DSQLITE_ENABLE_ICU
+               if full_archive; then
+                       sed -e "s/^TLIBS = @LIBS@/& -licui18n -licuuc/" -i Makefile.in || die "sed failed"
+               else
+                       sed -e "s/^LIBS = @LIBS@/& -licui18n -licuuc/" -i Makefile.in || die "sed failed"
+               fi
+       fi
+
+       # readline USE flag.
+       options+=(
+               --disable-editline
+               $(use_enable readline)
+       )
+       if full_archive && use readline; then
+               options+=(--with-readline-inc="-I${EPREFIX}/usr/include/readline")
+       fi
+
+       # secure-delete USE flag.
+       if use secure-delete; then
+               # Enable secure_delete pragma by default.
+               # https://sqlite.org/pragma.html#pragma_secure_delete
+               append-cppflags -DSQLITE_SECURE_DELETE
+       fi
+
+       # static-libs USE flag.
+       options+=($(use_enable static-libs static))
+
+       # tcl, test, tools USE flags.
+       if full_archive; then
+               options+=(--enable-tcl)
+       fi
+
+       if [[ "${CHOST}" == *-mint* ]]; then
+               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
+               else
+                       append-cflags -ffloat-store
+               fi
+       fi
+
+       econf "${options[@]}"
+}
+
+multilib_src_compile() {
+       emake HAVE_TCL="$(usex tcl 1 "")" TCLLIBDIR="${EPREFIX}/usr/$(get_libdir)/${P}"
+
+       if use tools && multilib_is_native_abi; then
+               emake changeset dbdump dbhash dbtotxt index_usage rbu scrub showdb showjournal showshm showstat4 showwal sqldiff sqlite3_analyzer sqlite3_checker sqlite3_expert sqltclsh
+       fi
+}
+
+multilib_src_test() {
+       if [[ "${EUID}" -eq 0 ]]; then
+               ewarn "Skipping tests due to root permissions"
+               return
+       fi
+
+       local -x SQLITE_HISTORY="${T}/sqlite_history_${ABI}"
+
+       emake HAVE_TCL="$(usex tcl 1 "")" $(use debug && echo fulltest || echo test)
+}
+
+multilib_src_install() {
+       emake DESTDIR="${D}" HAVE_TCL="$(usex tcl 1 "")" TCLLIBDIR="${EPREFIX}/usr/$(get_libdir)/${P}" install
+
+       if use tools && multilib_is_native_abi; then
+               install_tool() {
+                       if [[ -f ".libs/${1}" ]]; then
+                               newbin ".libs/${1}" "${2}"
+                       else
+                               newbin "${1}" "${2}"
+                       fi
+               }
+
+               install_tool changeset sqlite3-changeset
+               install_tool dbdump sqlite3-db-dump
+               install_tool dbhash sqlite3-db-hash
+               install_tool dbtotxt sqlite3-db-to-txt
+               install_tool index_usage sqlite3-index-usage
+               install_tool rbu sqlite3-rbu
+               install_tool scrub sqlite3-scrub
+               install_tool showdb sqlite3-show-db
+               install_tool showjournal sqlite3-show-journal
+               install_tool showshm sqlite3-show-shm
+               install_tool showstat4 sqlite3-show-stat4
+               install_tool showwal sqlite3-show-wal
+               install_tool sqldiff sqlite3-diff
+               install_tool sqlite3_analyzer sqlite3-analyzer
+               install_tool sqlite3_checker sqlite3-checker
+               install_tool sqlite3_expert sqlite3-expert
+               install_tool sqltclsh sqlite3-tclsh
+
+               unset -f install_tool
+       fi
+}
+
+multilib_src_install_all() {
+       find "${D}" -name "*.la" -type f -delete || die
+
+       doman sqlite3.1
+
+       if use doc; then
+               rm "${WORKDIR}/${PN}-doc-${DOC_PV}/"*.{db,txt} || die
+               (
+                       docinto html
+                       dodoc -r "${WORKDIR}/${PN}-doc-${DOC_PV}/"*
+               )
+       fi
+}