<pre style='margin:0'>
Marius Schamschula (Schamschula) pushed a commit to branch master
in repository macports-ports.
</pre>
<p><a href="https://github.com/macports/macports-ports/commit/4877b0faddbc101ee38e67fbb04de541dc6aadc7">https://github.com/macports/macports-ports/commit/4877b0faddbc101ee38e67fbb04de541dc6aadc7</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'> new 4877b0faddb sqlite3: update to 3.49.0
</span>4877b0faddb is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 4877b0faddbc101ee38e67fbb04de541dc6aadc7
</span>Author: Marius Schamschula <mschamschula@gmail.com>
AuthorDate: Fri Feb 7 13:09:11 2025 -0600
<span style='display:block; white-space:pre;color:#404040;'> sqlite3: update to 3.49.0
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> See: https://sqlite.org/forum/forumpost/566126d8c7
</span>---
databases/sqlite3/Portfile | 15 +-
databases/sqlite3/files/Makefile.in | 235 +++++
databases/sqlite3/files/auto.def | 97 ++
databases/sqlite3/files/sqlite-config.tcl | 1393 +++++++++++++++++++++++++++++
4 files changed, 1734 insertions(+), 6 deletions(-)
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/databases/sqlite3/Portfile b/databases/sqlite3/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 248cd305453..d63a4a1eac6 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/databases/sqlite3/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/databases/sqlite3/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5,7 +5,7 @@ PortGroup clang_dependency 1.0
</span>
name sqlite3
# don't forget to update the checksums for sqlite3-tools when updating sqlite3
<span style='display:block; white-space:pre;background:#ffe0e0;'>-version 3.48.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+version 3.49.0
</span> revision 0
categories databases
license public-domain
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -28,9 +28,9 @@ master_sites ${homepage}2025
</span> set padded_ver [string range [subst [regsub -all {\.([0-9]+)} "${version}.0.0" {[format %02d \1]}]] 0 6]
distname sqlite-autoconf-${padded_ver}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums rmd160 5aa47064b017cd214a6f2f50f947e547bbb25dd5 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sha256 ac992f7fca3989de7ed1fe99c16363f848794c8c32a158dafd4eb927a2e02fd5 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- size 3337615
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums rmd160 c995ca11de72db8d55fdccda0a6b0cf7d9ed766f \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sha256 4d8bfa0b55e36951f6e5a9fb8c99f3b58990ab785c57b4f84f37d163a0672759 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ size 3222148
</span>
depends_lib port:libedit \
port:ncurses \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -50,7 +50,6 @@ if {${subport} ne "${name}-tools"} {
</span> }
configure.args --enable-threadsafe \
<span style='display:block; white-space:pre;background:#ffe0e0;'>- --enable-dynamic-extensions \
</span> --disable-readline \
--enable-editline \
AWK=/usr/bin/awk
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -68,7 +67,11 @@ platform darwin 8 {
</span>
if {${subport} eq ${name}} {
post-patch {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- reinplace "s|-ltinfo||" ${worksrcpath}/configure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # See https://sqlite.org/forum/forumpost/566126d8c7 this should not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # be needed for future versions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file copy -force ${filespath}/auto.def ${worksrcpath}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file copy -force ${filespath}/Makefile.in ${worksrcpath}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file copy -force ${filespath}/sqlite-config.tcl ${worksrcpath}/autosetup
</span> }
# search in worksrcpath for sqlite3.h first -- don't pick up an installed one!
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/databases/sqlite3/files/Makefile.in b/databases/sqlite3/files/Makefile.in
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..91c02447e9b
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/databases/sqlite3/files/Makefile.in
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,235 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This is a main makefile for the "autoconf" bundle of SQLite. This is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# a trimmed-down version of the canonical makefile, devoid of most
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# documentation. See /main.mk in the canonical source tree for the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# full docs and the "master copy" of most of the build target recipes.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+all:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+TOP = @abs_top_srcdir@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+PACKAGE_VERSION = @PACKAGE_VERSION@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Filename extensions for binaries and libraries
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+B.exe = @BUILD_EXEEXT@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+T.exe = @TARGET_EXEEXT@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+B.dll = @BUILD_DLLEXT@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+T.dll = @TARGET_DLLEXT@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+B.lib = @BUILD_LIBEXT@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+T.lib = @TARGET_LIBEXT@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Autotools-compatibility dirs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+prefix = @prefix@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+datadir = @datadir@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+mandir = @mandir@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+includedir = @includedir@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+exec_prefix = @exec_prefix@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+bindir = @bindir@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+libdir = @libdir@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Required binaries
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+INSTALL = @BIN_INSTALL@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+AR = @AR@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+AR.flags = cr
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+CC = @CC@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ENABLE_LIB_SHARED = @ENABLE_LIB_SHARED@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ENABLE_LIB_STATIC = @ENABLE_LIB_STATIC@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+CFLAGS = @CFLAGS@ @CPPFLAGS@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# $(LDFLAGS.configure) represents any LDFLAGS=... the client passes to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# configure. See main.mk.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+LDFLAGS.configure = @LDFLAGS@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+CFLAGS.core = @SH_CFLAGS@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+LDFLAGS.shlib = @SH_LDFLAGS@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+LDFLAGS.zlib = @LDFLAGS_ZLIB@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+LDFLAGS.math = @LDFLAGS_MATH@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+LDFLAGS.rpath = @LDFLAGS_RPATH@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+LDFLAGS.pthread = @LDFLAGS_PTHREAD@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+LDFLAGS.dlopen = @LDFLAGS_DLOPEN@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+LDFLAGS.readline = @LDFLAGS_READLINE@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+CFLAGS.readline = @CFLAGS_READLINE@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+LDFLAGS.icu = @LDFLAGS_ICU@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+CFLAGS.icu = @CFLAGS_ICU@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# When cross-compiling, we need to avoid the -s flag because it only
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# works on the build host's platform.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+INSTALL.strip.1 = $(INSTALL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+INSTALL.strip.0 = $(INSTALL) -s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+INSTALL.strip = $(INSTALL.strip.@IS_CROSS_COMPILING@)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+INSTALL.noexec = $(INSTALL) -m 0644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-dir.bin = $(DESTDIR)$(bindir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-dir.lib = $(DESTDIR)$(libdir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-dir.include = $(DESTDIR)$(includedir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-dir.pkgconfig = $(DESTDIR)$(libdir)/pkgconfig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-dir.man1 = $(DESTDIR)$(mandir)/man1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-dir.all = $(install-dir.bin) $(install-dir.include) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(install-dir.lib) $(install-dir.man1) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(install-dir.pkgconfig)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$(install-dir.all):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(INSTALL) -d "$@"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Vars with the AS_ prefix are specifically related to AutoSetup.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# AS_AUTO_DEF is the main configure script.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+AS_AUTO_DEF = $(TOP)/auto.def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Shell commands to re-run $(TOP)/configure with the same args it was
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# invoked with to produce this makefile.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+AS_AUTORECONFIG = @SQLITE_AUTORECONFIG@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Makefile: $(TOP)/Makefile.in $(AS_AUTO_DEF)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(AS_AUTORECONFIG)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ @touch $@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite3.pc: $(TOP)/sqlite3.pc.in $(AS_AUTO_DEF)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(AS_AUTORECONFIG)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ @touch $@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite_cfg.h: $(AS_AUTO_DEF)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(AS_AUTORECONFIG)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ @touch $@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# CFLAGS for sqlite3$(T.exe)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+SHELL_OPT ?= @OPT_SHELL@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Library-level feature flags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+OPT_FEATURE_FLAGS = @OPT_FEATURE_FLAGS@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+LDFLAGS.libsqlite3.soname = @LDFLAGS_LIBSQLITE3_SONAME@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# soname: see https://sqlite.org/src/forumpost/5a3b44f510df8ded
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+LDFLAGS.libsqlite3.os-specific = @LDFLAGS_MAC_CVERSION@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# os-specific: see https://sqlite.org/forum/forumpost/9dfd5b8fd525a5d7
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+LDFLAGS.libsqlite3 = \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(LDFLAGS.rpath) $(LDFLAGS.pthread) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(LDFLAGS.math) $(LDFLAGS.dlopen) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(LDFLAGS.zlib) $(LDFLAGS.icu) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(LDFLAGS.configure)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+CFLAGS.libsqlite3 = -I. $(CFLAGS.core) $(CFLAGS.icu) $(OPT_FEATURE_FLAGS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite3.o: sqlite3.h sqlite3.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(CC) -c sqlite3.c -o $@ $(CFLAGS) $(CFLAGS.libsqlite3)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+libsqlite3.LIB = libsqlite3$(T.lib)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+libsqlite3.SO = libsqlite3$(T.dll)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$(libsqlite3.SO): sqlite3.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(CC) -o $@ sqlite3.o $(LDFLAGS.shlib) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(LDFLAGS) $(LDFLAGS.libsqlite3) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(LDFLAGS.libsqlite3.os-specific) $(LDFLAGS.libsqlite3.soname)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+all: $(libsqlite3.SO)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+$(libsqlite3.LIB): sqlite3.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(AR) $(AR.flags) $@ sqlite3.o
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+all: $(libsqlite3.LIB)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-so-1: $(install-dir.lib) $(libsqlite3.SO)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(INSTALL) $(libsqlite3.SO) "$(install-dir.lib)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ @echo "Setting up $(libsqlite3.SO) version symlinks..."; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cd "$(install-dir.lib)" || exit $$?; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if [ x.dylib = x$(T.dll) ]; then \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rm -f libsqlite3.0$(T.dll) libsqlite3.$(PACKAGE_VERSION)$(T.dll) || exit $$?; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dllname=libsqlite3.$(PACKAGE_VERSION)$(T.dll); \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mv $(libsqlite3.SO) $$dllname || exit $$?; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ln -s $$dllname $(libsqlite3.SO) || exit $$?; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ln -s $$dllname libsqlite3.0$(T.dll) || exit $$?; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ls -la $$dllname $(libsqlite3.SO) libsqlite3.0$(T.dll); \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ else \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rm -f $(libsqlite3.SO).0 $(libsqlite3.SO).$(PACKAGE_VERSION) || exit $$?; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mv $(libsqlite3.SO) $(libsqlite3.SO).$(PACKAGE_VERSION) || exit $$?; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ln -s $(libsqlite3.SO).$(PACKAGE_VERSION) $(libsqlite3.SO) || exit $$?; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ln -s $(libsqlite3.SO).$(PACKAGE_VERSION) $(libsqlite3.SO).0 || exit $$?; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ls -la $(libsqlite3.SO) $(libsqlite3.SO).[03]*; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if [ -e $(libsqlite3.SO).0.8.6 ]; then \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ echo "ACHTUNG: legacy libtool-compatible install found. Re-linking it..."; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rm -f libsqlite3.la $(libsqlite3.SO).0.8.6 || exit $$?; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ln -s $(libsqlite3.SO).$(PACKAGE_VERSION) $(libsqlite3.SO).0.8.6 || exit $$?; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ls -la $(libsqlite3.SO).0.8.6; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ elif [ x1 = "x$(INSTALL_SO_086_LINK)" ]; then \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ echo "ACHTUNG: installing legacy libtool-style links because INSTALL_SO_086_LINK=1"; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rm -f libsqlite3.la $(libsqlite3.SO).0.8.6 || exit $$?; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ln -s $(libsqlite3.SO).$(PACKAGE_VERSION) $(libsqlite3.SO).0.8.6 || exit $$?; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ls -la $(libsqlite3.SO).0.8.6; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fi; \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-so-0 install-so-:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-so: install-so-$(ENABLE_LIB_SHARED)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install: install-so
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-lib-1: $(install-dir.lib) $(libsqlite3.LIB)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(INSTALL.noexec) $(libsqlite3.LIB) "$(install-dir.lib)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-lib-0 install-lib-:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-lib: install-lib-$(ENABLE_LIB_STATIC)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install: install-lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite3$(T.exe): shell.c sqlite3.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(CC) -o $@ \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ shell.c sqlite3.c \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -I. $(OPT_FEATURE_FLAGS) $(SHELL_OPT) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(CFLAGS) $(CFLAGS.readline) $(CFLAGS.icu) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(LDFLAGS) $(LDFLAGS.libsqlite3) $(LDFLAGS.readline)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+all: sqlite3$(T.exe)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-shell: sqlite3$(T.exe) $(install-dir.bin)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(INSTALL.strip) sqlite3$(T.exe) "$(install-dir.bin)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install: install-shell
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-headers: sqlite3.h $(install-dir.include)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(INSTALL.noexec) sqlite3.h sqlite3ext.h "$(install-dir.include)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install: install-headers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-pc: sqlite3.pc $(install-dir.pkgconfig)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(INSTALL.noexec) sqlite3.pc "$(install-dir.pkgconfig)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install: install-pc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install-man1: sqlite3.1 $(install-dir.man1)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $(INSTALL.noexec) sqlite3.1 "$(install-dir.man1)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+install: install-man1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+clean:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rm -f *.o sqlite3$(T.exe)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rm -f $(libsqlite3.LIB) $(libsqlite3.SO)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+distclean: clean
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rm -f jimsh0$(T.exe) config.* sqlite3.pc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+DIST_FILES := \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ README.txt VERSION \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ auto.def autosetup configure tea \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite3.h sqlite3.c shell.c sqlite3ext.h \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Makefile.in Makefile.msc Makefile.fallback \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite3.rc sqlite3rc.h Replace.cs \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite3.pc.in sqlite3.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Maintenance note: dist_name must be sqlite-$(PACKAGE_VERSION) so
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# that tool/mkautoconfamal.sh knows how to find it.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+dist_name = sqlite-$(PACKAGE_VERSION)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+dist_tarball = $(dist_name).tar.gz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+dist:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rm -fr $(dist_name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ mkdir -p $(dist_name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cp -rp $(DIST_FILES) $(dist_name)/.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tar czf $(dist_tarball) $(dist_name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rm -fr $(dist_name)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ls -l $(dist_tarball)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/databases/sqlite3/files/auto.def b/databases/sqlite3/files/auto.def
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..72f50094b89
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/databases/sqlite3/files/auto.def
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,97 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#/do/not/tclsh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ^^^ help out editors which guess this file's content type.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This is the main autosetup-compatible configure script for the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# "autoconf" bundle of the SQLite project.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This script must be kept compatible with JimTCL, a copy of which is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# included in this source tree as ./autosetup/jimsh0.c.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+use sqlite-config
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # <build-modes>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static=1 => {Disable build of static library}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ shared=1 => {Disable build of shared library}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # </build-modes>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # <lib-feature>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ threadsafe=1 => {Disable mutexing}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-tempstore:=no => {Use an in-RAM database for temporary tables: never,no,yes,always}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ load-extension=1 => {Disable loading of external extensions}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ math=1 => {Disable math functions}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ json=1 => {Disable JSON functions}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ memsys5 => {Enable MEMSYS5}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ memsys3 => {Enable MEMSYS3}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fts3 => {Enable the FTS3 extension}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fts4 => {Enable the FTS4 extension}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fts5 => {Enable the FTS5 extension}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ update-limit => {Enable the UPDATE/DELETE LIMIT clause}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ geopoly => {Enable the GEOPOLY extension}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rtree => {Enable the RTREE extension}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ session => {Enable the SESSION extension}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ all => {Enable FTS4, FTS5, Geopoly, RTree, Sessions}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # </lib-feature>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # <line-editing>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ readline=1 => {Disable readline support}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # --with-readline-lib is a backwards-compatible alias for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # --with-readline-ldflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-readline-lib:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-readline-ldflags:=auto
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ => {Readline LDFLAGS, e.g. -lreadline -lncurses}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # --with-readline-inc is a backwards-compatible alias for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # --with-readline-cflags.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-readline-inc:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-readline-cflags:=auto
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ => {Readline CFLAGS, e.g. -I/path/to/includes}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-readline-header:PATH
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ => {Full path to readline.h, from which --with-readline-cflags will be derived}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-linenoise:DIR => {Source directory for linenoise.c and linenoise.h}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ editline=0 => {Enable BSD editline support}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # </line-editing>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # <icu>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-icu-ldflags:LDFLAGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ => {Enable SQLITE_ENABLE_ICU and add the given linker flags for the ICU libraries}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-icu-cflags:CFLAGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ => {Apply extra CFLAGS/CPPFLAGS necessary for building with ICU. e.g. -I/usr/local/include}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-icu-config:=auto => {Enable SQLITE_ENABLE_ICU. Value must be one of: auto, pkg-config, /path/to/icu-config}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ icu-collations=0 => {Enable SQLITE_ENABLE_ICU_COLLATIONS. Requires --with-icu-ldflags=... or --with-icu-config}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # </icu>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # <developer>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Note that using the --debug/--enable-debug flag here requires patching
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # autosetup/autosetup to rename the --debug to --autosetup-debug.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-debug=0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ debug=0 =>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {Enable debug build flags. This option will impact performance by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ as much as 4x, as it includes large numbers of assert()s in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ performance-critical loops. Never use --debug for production
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ builds.}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # </developer>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ soname:=legacy =>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # --soname has a long story behind it: https://sqlite.org/src/forumpost/5a3b44f510df8ded
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {SONAME for libsqlite3.so. "none", or not using this flag, sets no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ soname. "legacy" sets it to its historical value of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libsqlite3.so.0. A value matching the glob "libsqlite3.*" sets
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ it to that literal value. Any other value is assumed to be a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ suffix which gets applied to "libsqlite3.so.",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ e.g. --soname=9.10 equates to "libsqlite3.so.9.10".
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite-post-options-init
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite-check-common-bins
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite-check-common-system-deps
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proj-check-rpath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite-handle-soname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite-setup-default-cflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite-handle-debug
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite-handle-threadsafe
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite-handle-tempstore
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite-handle-line-editing
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite-handle-load-extension
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite-handle-math
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite-handle-icu
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+define ENABLE_LIB_SHARED [opt-bool shared]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+define ENABLE_LIB_STATIC [opt-bool static]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+sqlite-common-late-stage-config
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/databases/sqlite3/files/sqlite-config.tcl b/databases/sqlite3/files/sqlite-config.tcl
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..cabb32aac06
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/databases/sqlite3/files/sqlite-config.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,1393 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This file holds functions for autosetup which are specific to the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# sqlite build tree. They are in this file, instead of auto.def, so
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# that they can be reused in the TEA sub-tree. This file requires
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# functions from proj.tcl.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+use cc cc-db cc-shared cc-lib pkg-config proj
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Object for communicating config-time state across various
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# auto.def-related pieces.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+array set sqliteConfig [proj-strip-hash-comments {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Gets set to 1 when using jimsh for code generation. May affect
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # later decisions.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ use-jim-for-codegen 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Pass msg-debug=1 to configure to enable obnoxiously loud output
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # from [msg-debug].
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-debug-enabled 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Output file for --dump-defines. Intended only for build debugging
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # and not part of the public build interface.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dump-defines-txt ./config.defines.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Output file for --dump-defines-json. This is the autosetup
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # counterpart of the historical "DEFS" var which was generated by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # the autotools in the pre-processed autotools builds (but not in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # the canonical tree). Generation of this file is disabled (via an
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # empty file name) until/unless someone voices a specific interest
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # in it. The original motivating use case is handled fine by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # sqlite_cfg.h.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dump-defines-json ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Set to 1 when cross-compiling This value may be changed by certain
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# build options, so it's important that config code which checks for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# cross-compilation uses this var instead of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# [proj-is-cross-compiling].
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set sqliteConfig(is-cross-compiling) [proj-is-cross-compiling]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Runs some common initialization which must happen immediately after
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# autosetup's [options] function is called. This is also a convenient
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# place to put some generic pieces common to both the canonical
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# top-level build and the "autoconf" build, but it's not intended to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# be a catch-all dumping ground for such.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-post-options-init {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Carry values from hidden --flag aliases over to their canonical
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # flag forms. This list must include only options which are common
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # to both the top-level auto.def and autoconf/auto.def.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-xfer-options-aliases {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-readline-inc => with-readline-cflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-readline-lib => with-readline-ldflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-debug => debug
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-autoreconfig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-file-extensions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {".exe" eq [get-define TARGET_EXEEXT]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define SQLITE_OS_UNIX 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define SQLITE_OS_WIN 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define SQLITE_OS_UNIX 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define SQLITE_OS_WIN 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::sqliteConfig(msg-debug-enabled) [proj-val-truthy [get-env msg-debug 0]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-setup-package-info
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Called by [sqlite-post-options-init] to set up PACKAGE_NAME and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# related defines.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-setup-package-info {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set srcdir $::autosetup(srcdir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set PACKAGE_VERSION [proj-file-content -trim $srcdir/VERSION]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define PACKAGE_NAME "sqlite"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define PACKAGE_URL {https://sqlite.org}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define PACKAGE_VERSION $PACKAGE_VERSION
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define PACKAGE_STRING "[get-define PACKAGE_NAME] $PACKAGE_VERSION"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define PACKAGE_BUGREPORT [get-define PACKAGE_URL]/forum
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Source dir = $srcdir"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Build dir = $::autosetup(builddir)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Configuring SQLite version $PACKAGE_VERSION"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Internal config-time debugging output routine. It generates no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# output unless msg-debug=1 is passed to the configure script.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc msg-debug {msg} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$::sqliteConfig(msg-debug-enabled)} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ puts stderr [proj-bold "** DEBUG: $msg"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Sets up the SQLITE_AUTORECONFIG define.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-autoreconfig {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # SQLITE_AUTORECONFIG contains make target rules for re-running the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # configure script with the same arguments it was initially invoked
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # with. This can be used to automatically reconfigure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proc squote {arg} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Wrap $arg in single-quotes if it looks like it might need that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # to avoid mis-handling as a shell argument. We assume that $arg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # will never contain any single-quote characters.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[string match {*[ &;$*"]*} $arg]} { return '$arg' }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return $arg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define-append SQLITE_AUTORECONFIG cd [squote $::autosetup(builddir)] && [squote $::autosetup(srcdir)/configure]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #{*}$::autosetup(argv) breaks with --flag='val with spaces', so...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach arg $::autosetup(argv) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define-append SQLITE_AUTORECONFIG [squote $arg]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rename squote ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+define OPT_FEATURE_FLAGS {} ; # -DSQLITE_OMIT/ENABLE flags.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+define OPT_SHELL {} ; # Feature-related CFLAGS for the sqlite3 CLI app
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Adds $args, if not empty, to OPT_FEATURE_FLAGS. If the first arg is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -shell then it strips that arg and passes the remaining args the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# sqlite-add-shell-opt in addition to adding them to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# OPT_FEATURE_FLAGS.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-add-feature-flag {args} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set shell ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"-shell" eq [lindex $args 0]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set args [lassign $args shell]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $args} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $shell} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-shell-opt {*}$args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define-append OPT_FEATURE_FLAGS {*}$args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Appends $args, if not empty, to OPT_SHELL.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-add-shell-opt {args} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $args} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define-append OPT_SHELL {*}$args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Check for log(3) in libm and die with an error if it is not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# found. $featureName should be the feature name which requires that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# function (it's used only in error messages). defines LDFLAGS_MATH to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# the required linker flags (which may be empty even if the math APIs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# are found, depending on the OS).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-affirm-have-math {featureName} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" eq [get-define LDFLAGS_MATH ""]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![msg-quiet proj-check-function-in-lib log m]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ user-error "Missing math APIs for $featureName"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_MATH [get-define lib_log ""]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ undefine lib_log
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Run checks for required binaries, like ld and ar. In the canonical
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# build this must come before [sqlite-handle-wasi-sdk].
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-check-common-bins {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cc-check-tools ld ar ; # must come before [sqlite-handle-wasi-sdk]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" eq [proj-bin-define install]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-warn "Cannot find install binary, so 'make install' will not work."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define BIN_INSTALL false
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Run checks for system-level includes and libs which are common to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# both the canonical build and the "autoconf" bundle.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-check-common-system-deps {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Check for needed/wanted data types
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cc-with {-includes stdint.h} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ {cc-check-types int8_t int16_t int32_t int64_t intptr_t \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ uint8_t uint16_t uint32_t uint64_t uintptr_t}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Check for needed/wanted functions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cc-check-functions gmtime_r isnan localtime_r localtime_s \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ malloc_usable_size strchrnul usleep utime pread pread64 pwrite pwrite64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-check-function-in-lib fdatasync rt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_FDATASYNC [get-define lib_fdatasync]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ undefine lib_fdatasync
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Check for needed/wanted headers
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cc-check-includes \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sys/types.h sys/stat.h dlfcn.h unistd.h \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ stdlib.h malloc.h memory.h \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ string.h strings.h \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ inttypes.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[cc-check-includes zlib.h] && [proj-check-function-in-lib deflate z]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # TODO? port over the more sophisticated zlib search from the fossil auto.def
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define HAVE_ZLIB 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_ZLIB -lz
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-shell-opt -DSQLITE_HAVE_ZLIB=1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define HAVE_ZLIB 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_ZLIB ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-setup-default-cflags {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # We differentiate between two C compilers: the one used for binaries
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # which are to run on the build system (in autosetup it's called
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # CC_FOR_BUILD and in Makefile.in it's $(B.cc)) and the one used for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # compiling binaries for the target system (CC a.k.a. $(T.cc)).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Normally they're the same, but they will differ when
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # cross-compiling.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # When cross-compiling we default to not using the -g flag, based on a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # /chat discussion prompted by
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # https://sqlite.org/forum/forumpost/9a67df63eda9925c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set defaultCFlags {-O2}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {!$::sqliteConfig(is-cross-compiling)} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend defaultCFlags -g
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define CFLAGS [proj-get-env CFLAGS $defaultCFlags]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # BUILD_CFLAGS is the CFLAGS for CC_FOR_BUILD.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define BUILD_CFLAGS [proj-get-env BUILD_CFLAGS {-g}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Copy all CFLAGS entries matching -DSQLITE_OMIT* and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # -DSQLITE_ENABLE* to OPT_FEATURE_FLAGS. This behavior is derived
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # from the legacy build and was missing the 3.48.0 release (the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # initial Autosetup port).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # https://sqlite.org/forum/forumpost/9801e54665afd728
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # If any configure flags for features are in conflict with
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # CFLAGS-specified feature flags, all bets are off. There are no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # guarantees about which one will take precedence.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach cf [get-define CFLAGS ""] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -glob -- $cf {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DSQLITE_OMIT* -
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -DSQLITE_ENABLE* {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-feature-flag $cf
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Handle various SQLITE_ENABLE_... feature flags.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-handle-common-feature-flags {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Feature flags..."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach {boolFlag featureFlag ifSetEvalThis} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ all {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # The 'all' option must be first in this list.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-opt-set fts4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-opt-set fts5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-opt-set geopoly
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-opt-set rtree
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-opt-set session
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fts4 -DSQLITE_ENABLE_FTS4 {sqlite-affirm-have-math fts4}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ fts5 -DSQLITE_ENABLE_FTS5 {sqlite-affirm-have-math fts5}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ geopoly -DSQLITE_ENABLE_GEOPOLY {proj-opt-set rtree}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ rtree -DSQLITE_ENABLE_RTREE {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ session {-DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK} {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ update-limit -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ memsys5 -DSQLITE_ENABLE_MEMSYS5 {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ memsys3 {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[opt-bool memsys5]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-warn "not enabling memsys3 because memsys5 is enabled."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ expr 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-feature-flag -DSQLITE_ENABLE_MEMSYS3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ scanstatus -DSQLITE_ENABLE_STMT_SCANSTATUS {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$boolFlag ni $::autosetup(options)} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Skip flags which are in the canonical build but not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # the autoconf bundle.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-if-opt-truthy $boolFlag {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-feature-flag $featureFlag
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {0 != [eval $ifSetEvalThis] && "all" ne $boolFlag} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result " + $boolFlag"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"all" ne $boolFlag} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result " - $boolFlag"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Invert the above loop's logic for some SQLITE_OMIT_... cases. If
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # config option $boolFlag is false, [sqlite-add-feature-flag
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # $featureFlag], where $featureFlag is intended to be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # -DSQLITE_OMIT_...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach {boolFlag featureFlag} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ json -DSQLITE_OMIT_JSON
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[proj-opt-truthy $boolFlag]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result " + $boolFlag"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-feature-flag $featureFlag
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result " - $boolFlag"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Remove duplicates from the final feature flag sets and show them to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# the user.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-finalize-feature-flags {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set oFF [get-define OPT_FEATURE_FLAGS]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $oFF} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define OPT_FEATURE_FLAGS [lsort -unique $oFF]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Library feature flags: [get-define OPT_FEATURE_FLAGS]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set oFF [get-define OPT_SHELL]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $oFF} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define OPT_SHELL [lsort -unique $oFF]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Shell options: [get-define OPT_SHELL]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Checks for the --debug flag, defining SQLITE_DEBUG to 1 if it is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# true. TARGET_DEBUG gets defined either way, with content depending
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# on whether --debug is true or false.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-handle-debug {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-checking "SQLITE_DEBUG build? "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-if-opt-truthy debug {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define SQLITE_DEBUG 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define TARGET_DEBUG {-g -DSQLITE_DEBUG=1 -DSQLITE_ENABLE_SELECTTRACE -DSQLITE_ENABLE_WHERETRACE -O0 -Wall}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-opt-set memsys5
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define TARGET_DEBUG {-DNDEBUG}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# "soname" for libsqlite3.so. See discussion at:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://sqlite.org/src/forumpost/5a3b44f510df8ded
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-handle-soname {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_LIBSQLITE3_SONAME ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[proj-opt-was-provided soname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set soname [join [opt-val soname] ""]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Enabling soname breaks linking for the --dynlink-tools feature,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # and this project has no direct use for soname, so default to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # none. Package maintainers, on the other hand, like to have an
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # soname.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set soname none
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -exact -- $soname {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ none - "" { return 0 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ legacy { set soname libsqlite3.so.0 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[string match libsqlite3.* $soname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # use it as-is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Assume it's a suffix
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set soname "libsqlite3.so.${soname}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-debug "soname=$soname"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[proj-check-soname $soname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_LIBSQLITE3_SONAME [get-define LDFLAGS_SONAME_PREFIX]$soname
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Setting SONAME using: [get-define LDFLAGS_LIBSQLITE3_SONAME]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {[proj-opt-was-provided soname]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # --soname was explicitly requested but not available, so fail fatally
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "This environment does not support SONAME."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # --soname was not explicitly requested but not available, so just warn
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "This environment does not support SONAME."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# If --enable-thresafe is set, this adds -DSQLITE_THREADSAFE=1 to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# OPT_FEATURE_FLAGS and sets LDFLAGS_PTHREAD to the linker flags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# needed for linking pthread. If --enable-threadsafe is not set, adds
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -DSQLITE_THREADSAFE=0 to OPT_FEATURE_FLAGS and sets LDFLAGS_PTHREAD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# to an empty string.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-handle-threadsafe {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-checking "Support threadsafe operation? "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-if-opt-truthy threadsafe {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-feature-flag -DSQLITE_THREADSAFE=1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![proj-check-function-in-lib pthread_create pthread]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ || ![proj-check-function-in-lib pthread_mutexattr_init pthread]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ user-error "Missing required pthread bits"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_PTHREAD [get-define lib_pthread_create]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ undefine lib_pthread_create
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Recall that LDFLAGS_PTHREAD might be empty even if pthreads if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # found because it's in -lc on some platforms.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-feature-flag -DSQLITE_THREADSAFE=0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_PTHREAD ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Handles the --with-tempstore flag.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# The test fixture likes to set SQLITE_TEMP_STORE on its own, so do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# not set that feature flag unless it was explicitly provided to the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# configure script.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-handle-tempstore {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[proj-opt-was-provided with-tempstore]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ts [opt-val with-tempstore no]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set tsn 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-checking "Use an in-RAM database for temporary tables? "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -exact -- $ts {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ never { set tsn 0 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ no { set tsn 1 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ yes { set tsn 2 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ always { set tsn 3 }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ user-error "Invalid --with-tempstore value '$ts'. Use one of: never, no, yes, always"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result $ts
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-feature-flag -DSQLITE_TEMP_STORE=$tsn
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Check for the Emscripten SDK for building the web-based wasm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# components. The core lib and tools do not require this but ext/wasm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# does. Most of the work is done via [proj-check-emsdk], then this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# function adds the following defines:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - EMCC_WRAPPER = "" or top-srcdir/tool/emcc.sh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - BIN_WASM_OPT = "" or path to wasm-opt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - BIN_WASM_STRIP = "" or path to wasm-strip
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Noting that:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 1) Not finding the SDK is not fatal at this level, nor is failure to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# find one of the related binaries.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 2) wasm-strip is part of the wabt package:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/WebAssembly/wabt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# and this project requires it for production-mode builds but not dev
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# builds.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-handle-emsdk {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define EMCC_WRAPPER ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define BIN_WASM_STRIP ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define BIN_WASM_OPT ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set srcdir $::autosetup(srcdir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$srcdir ne $::autosetup(builddir)} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # The EMSDK pieces require writing to the original source tree
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # even when doing an out-of-tree build. The ext/wasm pieces do not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # support an out-of-tree build so we treat that case as if EMSDK
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # were not found.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Out-of tree build: not checking for EMSDK."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set emccSh $srcdir/tool/emcc.sh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set extWasmConfig $srcdir/ext/wasm/config.make
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![get-define HAVE_WASI_SDK] && [proj-check-emsdk]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define EMCC_WRAPPER $emccSh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set emsdkHome [get-define EMSDK_HOME ""]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-assert {"" ne $emsdkHome}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define EMCC_WRAPPER ""; # just for testing
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-bin-define wasm-strip
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-bin-define bash; # ext/wasm/GNUmakefile requires bash
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[file-isexec $emsdkHome/upstream/bin/wasm-opt]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define BIN_WASM_OPT $emsdkHome/upstream/bin/wasm-opt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Maybe there's a copy in the path?
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-bin-define wasm-opt BIN_WASM_OPT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-make-from-dot-in $emccSh $extWasmConfig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ catch {exec chmod u+x $emccSh}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define EMCC_WRAPPER ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file delete -force -- $emccSh $extWasmConfig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# sqlite-check-line-editing jumps through proverbial hoops to try to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# find a working line-editing library, setting:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - HAVE_READLINE to 0 or 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - HAVE_LINENOISE to 0, 1, or 2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - HAVE_EDITLINE to 0 or 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Only one of ^^^ those will be set to non-0.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - LDFLAGS_READLINE = linker flags or empty string
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - CFLAGS_READLINE = compilation flags for clients or empty string.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Note that LDFLAGS_READLINE and CFLAGS_READLINE may refer to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# linenoise or editline, not necessarily libreadline. In some cases
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# it will set HAVE_READLINE=1 when it's really using editline, for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# reasons described in this function's comments.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Returns a string describing which line-editing approach to use, or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# "none" if no option is available.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Order of checks:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 1) --with-linenoise trumps all others and skips all of the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# complexities involved with the remaining options.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 2) --editline trumps --readline
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 3) --disable-readline trumps --readline
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 4) Default to automatic search for optional readline
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 5) Try to find readline or editline. If it's not found AND the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# corresponding --FEATURE flag was explicitly given, fail fatally,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# else fail silently.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-check-line-editing {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Checking for line-editing capability..."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define HAVE_READLINE 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define HAVE_LINENOISE 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define HAVE_EDITLINE 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_READLINE ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define CFLAGS_READLINE ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set failIfNotFound 0 ; # Gets set to 1 for explicit --FEATURE requests
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # so that we know whether to fail fatally or not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # if the library is not found.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set libsForReadline {readline edit} ; # -l<LIB> names to check for readline().
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # The libedit check changes this.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set editLibName "readline" ; # "readline" or "editline"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set editLibDef "HAVE_READLINE" ; # "HAVE_READLINE" or "HAVE_EDITLINE"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set dirLn [opt-val with-linenoise]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $dirLn} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Use linenoise from a copy of its sources (not a library)...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![file isdir $dirLn]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "--with-linenoise value is not a directory"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set lnH $dirLn/linenoise.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![file exists $lnH] } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "Cannot find linenoise.h in $dirLn"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set lnC ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set lnCOpts {linenoise-ship.c linenoise.c}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach f $lnCOpts {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[file exists $dirLn/$f]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set lnC $dirLn/$f
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" eq $lnC} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "Cannot find any of $lnCOpts in $dirLn"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set flavor ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set lnVal [proj-which-linenoise $lnH]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ switch -- $lnVal {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 1 { set flavor "antirez" }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2 { set flavor "msteveb" }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ default {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "Cannot determine the flavor of linenoise from $lnH"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define CFLAGS_READLINE "-I$dirLn $lnC"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define HAVE_LINENOISE $lnVal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-shell-opt -DHAVE_LINENOISE=$lnVal
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$::sqliteConfig(use-jim-for-codegen) && 2 == $lnVal} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define-append CFLAGS_JIMSH -DUSE_LINENOISE [get-define CFLAGS_READLINE]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ user-notice "Adding linenoise support to jimsh."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return "linenoise ($flavor)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {[opt-bool editline]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # libedit mimics libreadline and on some systems does not have its
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # own header installed (instead, that of libreadline is used).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # shell.c historically expects HAVE_EDITLINE to be set for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # libedit, but it then expects to see <editline/readline.h>, which
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # some system's don't actually have despite having libedit. If we
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # end up finding <editline/readline.h> below, we will use
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # -DHAVE_EDITLINE=1, else we will use -DHAVE_READLINE=1. In either
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # case, we will link against libedit.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set failIfNotFound 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set libsForReadline {edit}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set editLibName editline
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {![opt-bool readline]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Readline support explicitly disabled with --disable-readline"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return "none"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {[proj-opt-was-provided readline]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # If an explicit --[enable-]readline was used, fail if it's not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # found, else treat the feature as optional.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set failIfNotFound 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Transform with-readline-header=X to with-readline-cflags=-I...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set v [opt-val with-readline-header]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-opt-set with-readline-header ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $v} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"auto" eq $v} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-opt-set with-readline-cflags auto
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set v [file dirname $v]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[string match */readline $v]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Special case: if the path includes .../readline/readline.h,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # set the -I to one dir up from that because our sources
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # #include <readline/readline.h> or <editline/readline.h>.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set v [file dirname $v]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-opt-set with-readline-cflags "-I$v"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Look for readline.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rlInc [opt-val with-readline-cflags auto]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"auto" eq $rlInc} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rlInc ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$::sqliteConfig(is-cross-compiling)} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ^^^ this check is derived from the legacy configure script.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-warn "Skipping check for readline.h because we're cross-compiling."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set dirs "[get-define prefix] /usr /usr/local /usr/local/readline /usr/contrib /mingw"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set subdirs "include/$editLibName"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"editline" eq $editLibName} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend subdirs include/readline
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ^^^ editline, on some systems, does not have its own header,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # and uses libreadline's header.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend subdirs include
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ^^^ The dirs and subdirs lists are, except for the inclusion
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # of $prefix and editline, from the legacy configure script
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rlInc [proj-search-for-header-dir readline.h \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -dirs $dirs -subdirs $subdirs]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $rlInc} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[string match */readline $rlInc]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rlInc [file dirname $rlInc]; # shell #include's <readline/readline.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {[string match */editline $rlInc]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set editLibDef HAVE_EDITLINE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rlInc [file dirname $rlInc]; # shell #include's <editline/readline.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rlInc "-I${rlInc}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {"" ne $rlInc && ![string match *-I* $rlInc]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "Argument to --with-readline-cflags is intended to be CFLAGS and contain -I..."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # If readline.h was found/specified, look for lib(readline|edit)...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # This is not quite straightforward because both libreadline and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # libedit typically require some other library which (according to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # legacy autotools-generated tests) provides tgetent(3). On some
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # systems that's built into libreadline/edit, on some (most?) its in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # lib[n]curses, and on some it's in libtermcap.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rlLib ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $rlInc} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rlLib [opt-val with-readline-ldflags]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" eq $rlLib || "auto" eq $rlLib} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rlLib ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set libTerm ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[proj-check-function-in-lib tgetent "$editLibName ncurses curses termcap"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ^^^ that libs list comes from the legacy configure script ^^^
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set libTerm [get-define lib_tgetent]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ undefine lib_tgetent
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$editLibName eq $libTerm} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rlLib $libTerm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {[proj-check-function-in-lib readline $libsForReadline $libTerm]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rlLib [get-define lib_readline]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend rlLib $libTerm
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ undefine lib_readline
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # If we found a library, configure the build to use it...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $rlLib} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"editline" eq $editLibName && "HAVE_READLINE" eq $editLibDef} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Alert the user that, despite outward appearances, we won't be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # linking to the GPL'd libreadline. Presumably that distinction is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # significant for those using --editline.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-indented-notice {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ NOTE: the local libedit but uses <readline/readline.h> so we
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ will compile with -DHAVE_READLINE=1 but will link with
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ libedit.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rlLib [join $rlLib]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rlInc [join $rlInc]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_READLINE $rlLib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define CFLAGS_READLINE $rlInc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-assert {$editLibDef in {HAVE_READLINE HAVE_EDITLINE}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-assert {$editLibName in {readline editline}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-shell-opt -D${editLibDef}=1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Using $editLibName flags: $rlInc $rlLib"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Check whether rl_completion_matches() has a signature we can use
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # and disable that sub-feature if it doesn't.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![cctest \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -cflags "$rlInc -D${editLibDef}" -libs $rlLib -nooutput 1 -source {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <stdio.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #ifdef HAVE_EDITLINE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <editline/readline.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include <readline/readline.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static char * rcg(const char *z, int i){(void)z; (void)i; return 0;}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ int main(void) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ char ** x = rl_completion_matches("one", rcg);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ (void)x;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-warn "readline-style completion disabled due to rl_completion_matches() signature mismatch"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-shell-opt -DSQLITE_OMIT_READLINE_COMPLETION
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return $editLibName
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$failIfNotFound} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "Explicit --$editLibName failed to find a matching library."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return "none"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}; # sqlite-check-line-editing
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Runs sqlite-check-line-editing and adds a message around it In the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# canonical build this must not be called before
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# sqlite-determine-codegen-tcl.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-handle-line-editing {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Line-editing support for the sqlite3 shell: [sqlite-check-line-editing]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# ICU - International Components for Unicode
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Handles these flags:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# --with-icu-ldflags=LDFLAGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# --with-icu-cflags=CFLAGS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# --with-icu-config[=auto | pkg-config | /path/to/icu-config]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# --enable-icu-collations
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# --with-icu-config values:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - auto: use the first one of (pkg-config, icu-config) found on the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# system.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - pkg-config: use only pkg-config to determine flags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - /path/to/icu-config: use that to determine flags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# If --with-icu-config is used as neither pkg-config nor icu-config
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# are found, fail fatally.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# If both --with-icu-ldflags and --with-icu-config are provided, they
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# are cumulative. If neither are provided, icu-collations is not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# honored and a warning is emitted if it is provided.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Design note: though we could automatically enable ICU if the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# icu-config binary or (pkg-config icu-io) are found, we specifically
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# do not. ICU is always an opt-in feature.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-handle-icu {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_ICU [join [opt-val with-icu-ldflags ""]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define CFLAGS_ICU [join [opt-val with-icu-cflags ""]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[proj-opt-was-provided with-icu-config]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set icuConfigBin [opt-val with-icu-config]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set tryIcuConfigBin 1; # set to 0 if we end up using pkg-config
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"auto" eq $icuConfigBin || "pkg-config" eq $icuConfigBin} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[pkg-config-init 0] && [pkg-config icu-io]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Maintenance reminder: historical docs say to use both of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # (icu-io, icu-uc). icu-uc lacks a required lib and icu-io has
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # all of them on tested OSes.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set tryIcuConfigBin 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_ICU [get-define PKG_ICU_IO_LDFLAGS]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define-append LDFLAGS_ICU [get-define PKG_ICU_IO_LIBS]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define CFLAGS_ICU [get-define PKG_ICU_IO_CFLAGS]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {"pkg-config" eq $icuConfigBin} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "pkg-config cannot find package icu-io"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-assert {"auto" eq $icuConfigBin}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$tryIcuConfigBin} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"auto" eq $icuConfigBin} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set icuConfigBin [proj-first-bin-of \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /usr/local/bin/icu-config \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /usr/bin/icu-config]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" eq $icuConfigBin} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "--with-icu-config=auto cannot find (pkg-config icu-io) or icu-config binary"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[file-isexec $icuConfigBin]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set x [exec $icuConfigBin --ldflags]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" eq $x} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "$icuConfigBin --ldflags returned no data"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define-append LDFLAGS_ICU $x
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set x [exec $icuConfigBin --cppflags]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define-append CFLAGS_ICU $x
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "--with-icu-config=$bin does not refer to an executable"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ldflags [define LDFLAGS_ICU [string trim [get-define LDFLAGS_ICU]]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cflags [define CFLAGS_ICU [string trim [get-define CFLAGS_ICU]]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $ldflags} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-feature-flag -shell -DSQLITE_ENABLE_ICU
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Enabling ICU support with flags: $ldflags $cflags"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[opt-bool icu-collations]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Enabling ICU collations."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-feature-flag -shell -DSQLITE_ENABLE_ICU_COLLATIONS
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Recall that shell.c builds with sqlite3.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {[opt-bool icu-collations]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-warn "ignoring --enable-icu-collations because neither --with-icu-ldflags nor --with-icu-config provided any linker flags"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "ICU support is disabled."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}; # sqlite-handle-icu
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Handles the --enable-load-extension flag.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-handle-load-extension {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-if-opt-truthy load-extension {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[proj-check-function-in-lib dlopen dl]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_DLOPEN [get-define lib_dlopen]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ undefine lib_dlopen
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ user-error "dlopen() not found. Use --disable-load-extension to bypass this check."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_DLOPEN ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-feature-flag {-DSQLITE_OMIT_LOAD_EXTENSION=1}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Disabling loadable extensions."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Handles the --enable-math flag.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-handle-math {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-if-opt-truthy math {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![proj-check-function-in-lib ceil m]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ user-error "Cannot find libm functions. Use --disable-math to bypass this."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_MATH [get-define lib_ceil]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ undefine lib_ceil
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-add-feature-flag {-DSQLITE_ENABLE_MATH_FUNCTIONS}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Enabling math SQL functions [get-define LDFLAGS_MATH]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_MATH ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Disabling math SQL functions"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# If this OS looks like a Mac, checks for the Mac-specific
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# -current_version and -compatibility_version linker flags. Defines
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# LDFLAGS_MAC_CVERSION to an empty string and returns 0 if they're not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# supported, else defines that to the linker flags and returns 1.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# We don't check this on non-Macs because this whole thing is a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# libtool compatibility kludge to account for a version stamp which
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# libtool applied only on Mac platforms.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Based on https://sqlite.org/forum/forumpost/9dfd5b8fd525a5d7.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-check-mac-cversion {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_MAC_CVERSION ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rc 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[proj-looks-like-mac]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cc-with {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # These version numbers are historical libtool-defined values, not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # library-defined ones
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[cc-check-flags "-Wl,-current_version,9.6.0"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && [cc-check-flags "-Wl,-compatibility_version,9.0.0"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_MAC_CVERSION "-Wl,-compatibility_version,9.0.0 -Wl,-current_version,9.6.0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rc 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {[cc-check-flags "-compatibility_version 9.0.0"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && [cc-check-flags "-current_version 9.6.0"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LDFLAGS_MAC_CVERSION "-compatibility_version 9.0.0 -current_version 9.6.0"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set rc 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return $rc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Performs late-stage config steps common to both the canonical and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# autoconf bundle builds.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-common-late-stage-config {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-check-mac-cversion
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-process-dot-in-files
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-post-config-validation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Perform some late-stage work and generate the configure-process
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# output file(s).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-process-dot-in-files {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # When cross-compiling, we have to avoid using the -s flag to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # /usr/bin/install:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # https://sqlite.org/forum/forumpost/9a67df63eda9925c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define IS_CROSS_COMPILING $::sqliteConfig(is-cross-compiling)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Finish up handling of the various feature flags here because it's
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # convenient for both the canonical build and autoconf bundles that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # it be done here.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-handle-common-feature-flags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-finalize-feature-flags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # "Re-export" the autoconf-conventional --XYZdir flags into something
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # which is more easily overridable from a make invocation. See the docs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # for [proj-remap-autoconf-dir-vars] for the explanation of why.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # We do this late in the config process, immediately before we export
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # the Makefile and other generated files, so that configure tests
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # which make make use of the autotools-conventional flags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # (e.g. [proj-check-rpath]) may do so before we "mangle" them here.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-remap-autoconf-dir-vars
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-make-from-dot-in -touch Makefile sqlite3.pc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ make-config-header sqlite_cfg.h \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -bare {SIZEOF_* HAVE_DECL_*} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -none {HAVE_CFLAG_* LDFLAGS_* SH_* SQLITE_AUTORECONFIG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ TARGET_* USE_GCOV TCL_*} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -auto {HAVE_* PACKAGE_*} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -none *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-touch sqlite_cfg.h ; # help avoid frequent unnecessary @SQLITE_AUTORECONFIG@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Perform some high-level validation on the generated files...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 1) Ensure that no unresolved @VAR@ placeholders are in files which
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# use those.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 2) TBD
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-post-config-validation {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Check #1: ensure that files which get filtered for @VAR@ do not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # contain any unresolved @VAR@ refs. That may indicate an
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # unexported/unused var or a typo.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set srcdir $::autosetup(srcdir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach f [list Makefile sqlite3.pc \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $srcdir/tool/emcc.sh \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ $srcdir/ext/wasm/config.make] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![file exists $f]} continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set lnno 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach line [proj-file-content-list $f] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[regexp {(@[A-Za-z0-9_]+@)} $line match]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ error "Unresolved reference to $match at line $lnno of $f"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ incr lnno
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Handle --with-wasi-sdk[=DIR]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# This must be run relatively early on because it may change the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# toolchain and disable a number of config options. However, in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# canonical build this must come after [sqlite-check-common-bins].
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-handle-wasi-sdk {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set wasiSdkDir [opt-val with-wasi-sdk] ; # ??? [lindex [opt-val with-wasi-sdk] end]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define HAVE_WASI_SDK 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$wasiSdkDir eq ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {$::sqliteConfig(is-cross-compiling)} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "Cannot combine --with-wasi-sdk with cross-compilation"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Checking WASI SDK directory \[$wasiSdkDir]... "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-affirm-files-exist -v {*}[prefix "$wasiSdkDir/bin/" {clang wasm-ld ar}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define HAVE_WASI_SDK 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define WASI_SDK_DIR $wasiSdkDir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Disable numerous options which we know either can't work or are
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # not useful in this build...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Using wasi-sdk clang. Disabling CLI shell and modifying config flags:"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Boolean (--enable-/--disable-) flags which must be switched off:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach opt {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ dynlink-tools
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ editline
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ gcov
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ icu-collations
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ load-extension
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ readline
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ shared
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ threadsafe
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[opt-bool $opt]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result " --disable-$opt"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-opt-set $opt 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Non-boolean flags which need to be cleared:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach opt {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-emsdk
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-icu-config
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-icu-ldflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-icu-cflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-linenoise
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ with-tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[proj-opt-was-provided $opt]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result " removing --$opt"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-opt-set $opt ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Remember that we now have a discrepancy beteween
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # $::sqliteConfig(is-cross-compiling) and [proj-is-cross-compiling].
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::sqliteConfig(is-cross-compiling) 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Changing --host and --target have no effect here except to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # possibly cause confusion. Autosetup has finished processing them
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # by this point.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # host_alias=wasm32-wasi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # target=wasm32-wasi
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Merely changing CC, LD, and AR to the wasi-sdk's is enough to get
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # sqlite3.o building in WASM format.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define CC "${wasiSdkDir}/bin/clang"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define LD "${wasiSdkDir}/bin/wasm-ld"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define AR "${wasiSdkDir}/bin/ar"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define STRIP "${wasiSdkDir}/bin/strip"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}; # sqlite-handle-wasi-sdk
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# TCL...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# sqlite-check-tcl performs most of the --with-tcl and --with-tclsh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# handling. Some related bits and pieces are performed before and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# after that function is called.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Important [define]'d vars:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - HAVE_TCL indicates whether we have a tclsh suitable for building
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# the TCL SQLite extension and, by extension, the testing
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# infrastructure. This must only be 1 for environments where
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# tclConfig.sh can be found.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - TCLSH_CMD is the path to the canonical tclsh or "". It never
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# refers to jimtcl.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - TCL_CONFIG_SH is the path to tclConfig.sh or "".
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - TCLLIBDIR is the dir to which libtclsqlite3 gets installed.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - BTCLSH = the path to the tcl interpreter used for in-tree code
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# generation. It may be jimtcl or the canonical tclsh but may not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# be empty - this tree requires TCL to generated numerous
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# components.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# If --tcl or --with-tcl are provided but no TCL is found, this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# function fails fatally. If they are not explicitly provided then
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# failure to find TCL is not fatal but a loud warning will be emitted.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-check-tcl {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define TCLSH_CMD false ; # Significant is that it exits with non-0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define HAVE_TCL 0 ; # Will be enabled via --tcl or a successful search
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define TCLLIBDIR "" ; # Installation dir for TCL extension lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define TCL_CONFIG_SH ""; # full path to tclConfig.sh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Clear out all vars which would be set by tclConfigToAutoDef.sh, so
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # that the late-config validation of @VARS@ works even if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # --disable-tcl is used.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach k {TCL_INCLUDE_SPEC TCL_LIB_SPEC TCL_STUB_LIB_SPEC TCL_EXEC_PREFIX TCL_VERSION} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define $k ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ file delete -force ".tclenv.sh"; # ensure no stale state from previous configures.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![opt-bool tcl]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-indented-notice {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ NOTE: TCL is disabled via --disable-tcl. This means that none
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ of the TCL-based components will be built, including tests
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ and sqlite3_analyzer.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # TODO: document the steps this is taking.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set srcdir $::autosetup(srcdir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Checking for a suitable tcl... "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-assert [proj-opt-truthy tcl]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set use_tcl 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set with_tclsh [opt-val with-tclsh]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set with_tcl [opt-val with-tcl]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"prefix" eq $with_tcl} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set with_tcl [get-define prefix]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-debug "sqlite-check-tcl: use_tcl ${use_tcl}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-debug "sqlite-check-tcl: with_tclsh=${with_tclsh}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-debug "sqlite-check-tcl: with_tcl=$with_tcl"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" eq $with_tclsh && "" eq $with_tcl} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # If neither --with-tclsh nor --with-tcl are provided, try to find
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # a workable tclsh.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set with_tclsh [proj-first-bin-of tclsh9.0 tclsh8.6 tclsh]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-debug "sqlite-check-tcl: with_tclsh=${with_tclsh}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set doConfigLookup 1 ; # set to 0 to test the tclConfig.sh-not-found cases
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $with_tclsh} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # --with-tclsh was provided or found above. Validate it and use it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # to trump any value passed via --with-tcl=DIR.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![file-isexec $with_tclsh]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "TCL shell $with_tclsh is not executable"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define TCLSH_CMD $with_tclsh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #msg-result "Using tclsh: $with_tclsh"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$doConfigLookup &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ [catch {exec $with_tclsh $srcdir/tool/find_tclconfig.tcl} result] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set with_tcl $result
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $with_tcl && [file isdir $with_tcl]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "$with_tclsh recommends the tclConfig.sh from $with_tcl"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-warn "$with_tclsh is unable to recommend a tclConfig.sh"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set use_tcl 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cfg ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set tclSubdirs {tcl9.0 tcl8.6 lib}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ while {$use_tcl} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $with_tcl} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Ensure that we can find tclConfig.sh under ${with_tcl}/...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$doConfigLookup} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[file readable "${with_tcl}/tclConfig.sh"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cfg "${with_tcl}/tclConfig.sh"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach i $tclSubdirs {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[file readable "${with_tcl}/$i/tclConfig.sh"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cfg "${with_tcl}/$i/tclConfig.sh"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" eq $cfg} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "No tclConfig.sh found under ${with_tcl}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # If we have not yet found a tclConfig.sh file, look in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # $libdir which is set automatically by autosetup or by the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # --prefix command-line option. See
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # https://sqlite.org/forum/forumpost/e04e693439a22457
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set libdir [get-define libdir]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[file readable "${libdir}/tclConfig.sh"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cfg "${libdir}/tclConfig.sh"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach i $tclSubdirs {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[file readable "${libdir}/$i/tclConfig.sh"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cfg "${libdir}/$i/tclConfig.sh"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![file readable $cfg]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Using tclConfig.sh: $cfg"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define TCL_CONFIG_SH $cfg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Export a subset of tclConfig.sh to the current TCL-space. If $cfg
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # is an empty string, this emits empty-string entries for the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # various options we're interested in.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ eval [exec sh "$srcdir/tool/tclConfigShToAutoDef.sh" "$cfg"]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # ---------^^ a Windows/msys workaround, without which it cannot
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # exec a .sh file: https://sqlite.org/forum/forumpost/befb352a42a7cd6d
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" eq $with_tclsh && $cfg ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # We have tclConfig.sh but no tclsh. Attempt to locate a tclsh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # based on info from tclConfig.sh.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-assert {"" ne [get-define TCL_EXEC_PREFIX]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set with_tclsh [get-define TCL_EXEC_PREFIX]/bin/tclsh[get-define TCL_VERSION]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![file-isexec $with_tclsh]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set with_tclsh2 [get-define TCL_EXEC_PREFIX]/bin/tclsh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![file-isexec $with_tclsh2]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-warn "Cannot find a usable tclsh (tried: $with_tclsh $with_tclsh2)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set with_tclsh $with_tclsh2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define TCLSH_CMD $with_tclsh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$use_tcl} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Set up the TCLLIBDIR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # 2024-10-28: calculation of TCLLIBDIR is now done via the shell
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # in main.mk (search it for T.tcl.env.sh) so that
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # static/hand-written makefiles which import main.mk do not have
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # to define that before importing main.mk. Even so, we export
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # TCLLIBDIR from here, which will cause the canonical makefile to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # use this one rather than to re-calculate it at make-time.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set tcllibdir [get-env TCLLIBDIR ""]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" eq $tcllibdir} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Attempt to extract TCLLIBDIR from TCL's $auto_path
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $with_tclsh &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ [catch {exec echo "puts stdout \$auto_path" | "$with_tclsh"} result] == 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach i $result {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[file isdir $i]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set tcllibdir $i/sqlite3
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ break
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-warn "Cannot determine TCLLIBDIR."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # The makefile will fail fatally in this case if a target is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # invoked which requires TCLLIBDIR.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if {"" ne $tcllibdir} { msg-result "TCLLIBDIR = ${tcllibdir}"; }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define TCLLIBDIR $tcllibdir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }; # find TCLLIBDIR
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[file-isexec $with_tclsh]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Using tclsh: $with_tclsh"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$cfg ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define HAVE_TCL 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-warn "Found tclsh but no tclConfig.sh."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ show-notices
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # If TCL is not found: if it was explicitly requested then fail
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # fatally, else just emit a warning. If we can find the APIs needed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # to generate a working JimTCL then that will suffice for build-time
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # TCL purposes (see: proc sqlite-determine-codegen-tcl).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![get-define HAVE_TCL] &&
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ([proj-opt-was-provided tcl] || [proj-opt-was-provided with-tcl])} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "TCL support was requested but no tclConfig.sh could be found."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" eq $cfg} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-assert {0 == [get-define HAVE_TCL]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-indented-notice {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ WARNING: Cannot find a usable tclConfig.sh file. Use
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ --with-tcl=DIR to specify a directory where tclConfig.sh can be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ found. SQLite does not use TCL internally, but some optional
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ components require TCL, including tests and sqlite3_analyzer.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}; # sqlite-check-tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# sqlite-determine-codegen-tcl checks which TCL to use as a code
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# generator. By default, prefer jimsh simply because we have it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# in-tree (it's part of autosetup) unless --with-tclsh=X is used, in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# which case prefer X.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Returns the human-readable name of the TCL it selects. Fails fatally
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# if it cannot detect a TCL appropriate for code generation.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Defines:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - BTCLSH = the TCL shell used for code generation. It may set this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# to an unexpanded makefile var name.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# - CFLAGS_JIMSH = any flags needed for buildng a BTCLSH-compatible
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# jimsh. The defaults may be passed on to configure as
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# CFLAGS_JIMSH=...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-determine-codegen-tcl {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "Checking for TCL to use for code generation... "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define CFLAGS_JIMSH [proj-get-env CFLAGS_JIMSH {-O1}]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cgtcl [opt-val with-tclsh jimsh]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"jimsh" ne $cgtcl} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # When --with-tclsh=X is used, use that for all TCL purposes,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # including in-tree code generation, per developer request.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define BTCLSH "\$(TCLSH_CMD)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return $cgtcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set flagsToRestore {CC CFLAGS AS_CFLAGS CPPFLAGS AS_CPPFLAGS LDFLAGS LINKFLAGS LIBS CROSS}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define-push $flagsToRestore {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # We have to swap CC to CC_FOR_BUILD for purposes of the various
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # [cc-...] tests below. Recall that --with-wasi-sdk may have
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # swapped out CC with one which is not appropriate for this block.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Per consulation with autosetup's creator, doing this properly
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # requires us to [define-push] the whole $flagsToRestore list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # (plus a few others which are not relevant in this tree).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # These will get set to their previous values at the end of this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # block.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ foreach flag $flagsToRestore {define $flag ""}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define CC [get-define CC_FOR_BUILD]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # These headers are technically optional for JimTCL but necessary if
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # we want to use it for code generation:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set sysh [cc-check-includes dirent.h sys/time.h]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # jimsh0.c hard-codes #define's for HAVE_DIRENT_H and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # HAVE_SYS_TIME_H on the platforms it supports, so we do not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # need to add -D... flags for those. We check for them here only
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # so that we can avoid the situation that we later, at
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # make-time, try to compile jimsh but it then fails due to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # missing headers (i.e. fail earlier rather than later).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {$sysh && [cc-check-functions realpath]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define-append CFLAGS_JIMSH -DHAVE_REALPATH
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define BTCLSH "\$(JIMSH)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::sqliteConfig(use-jim-for-codegen) 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {$sysh && [cc-check-functions _fullpath]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # _fullpath() is a Windows API. It's not entirely clear
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # whether we need to add {-DHAVE_SYS_TIME_H -DHAVE_DIRENT_H}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # to CFLAGS_JIMSH in this case. On MinGW32 we definitely do
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # not want to because it already hard-codes them. On _MSC_VER
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # builds it does not.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define-append CFLAGS_JIMSH -DHAVE__FULLPATH
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define BTCLSH "\$(JIMSH)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set ::sqliteConfig(use-jim-for-codegen) 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {[file-isexec [get-define TCLSH_CMD]]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cgtcl [get-define TCLSH_CMD]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define BTCLSH "\$(TCLSH_CMD)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # One last-ditch effort to find TCLSH_CMD: use info from
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # tclConfig.sh to try to find a tclsh
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" eq [get-define TCLSH_CMD]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set tpre [get-define TCL_EXEC_PREFIX]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $tpre} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set tv [get-define TCL_VERSION]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[file-isexec "${tpre}/bin/tclsh${tv}"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define TCLSH_CMD "${tpre}/bin/tclsh${tv}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ } elseif {[file-isexec "${tpre}/bin/tclsh"]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define TCLSH_CMD "${tpre}/bin/tclsh"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set cgtcl [get-define TCLSH_CMD]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {![file-isexec $cgtcl]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-fatal "Cannot find a tclsh to use for code generation."
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define BTCLSH "\$(TCLSH_CMD)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }; # CC swap-out
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ return $cgtcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}; # sqlite-determine-codegen-tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Runs sqlite-check-tcl and sqlite-determine-codegen-tcl.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-handle-tcl {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite-check-tcl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "TCL for code generation: [sqlite-determine-codegen-tcl]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# If the --dump-defines configure flag is provided then emit a list of
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# all [define] values to config.defines.txt, else do nothing.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc sqlite-dump-defines {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-if-opt-truthy dump-defines {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ make-config-header $::sqliteConfig(dump-defines-txt) \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -bare {SQLITE_OS* SQLITE_DEBUG USE_*} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -str {BIN_* CC LD AR LDFLAG* OPT_*} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -auto {*}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # achtung: ^^^^ whichever SQLITE_OS_foo flag which is set to 0 will
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # get _undefined_ here unless it's part of the -bare set.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {"" ne $::sqliteConfig(dump-defines-json)} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ msg-result "--dump-defines is creating $::sqliteConfig(dump-defines-json)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ ########################################################################
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Dump config-defines.json...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # Demonstrate (mis?)handling of spaces in JSON-export array values:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ # define-append OPT_FOO.list {"-DFOO=bar baz" -DBAR="baz barre"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define OPT_FEATURE_FLAGS.list [get-define OPT_FEATURE_FLAGS]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ define OPT_SHELL.list [get-define OPT_SHELL]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ set dumpDefsOpt {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -bare {SIZEOF_* HAVE_DECL_*}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -none {HAVE_CFLAG_* LDFLAGS_* SH_* SQLITE_AUTORECONFIG TARGET_* USE_GCOV TCL_*}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -array {*.list}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ -auto {OPT_* PACKAGE_* HAVE_*}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if {[opt-bool defines-json-include-lowercase]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend dumpDefsOpt -none {lib_*} ; # remnants from proj-check-function-in-lib and friends
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend dumpDefsOpt -auto {[a-z]*}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ lappend dumpDefsOpt -none *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ proj-dump-defs-json $::sqliteConfig(dump-defines-json) {*}$dumpDefsOpt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ undefine OPT_FEATURE_FLAGS.list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ undefine OPT_SHELL.list
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span></pre><pre style='margin:0'>
</pre>