SQLite Forum

Build branch-3.47 in Termux on Android fails
Login

Build branch-3.47 in Termux on Android fails

(1) By anonymous on 2024-10-29 21:00:38 [source]

Building SQLite branch-3.47 in Termux on Android fails.

checkout: e3c27c6d8a8610ac4ad8ad95e0958ffad05fd58a 2024-10-24 19:31:17 UTC parent: 31e104cc40e335108b57afe8184782ad389b1e8e 2024-10-24 16:02:25 UTC tags: branch-3.47 comment: Patch sqlite3_rsync.c to disable undesirable automatic line ending conversions on Windows. (user: drh)

../configure --disable-tcl

checking build system type... armv8l-unknown-linux-gnueabi checking host system type... armv8l-unknown-linux-gnueabi checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for a sed that does not truncate output... /data/data/com.termux/files/usr/bin/sed checking for grep that handles long lines and -e... /data/data/com.termux/files/usr/bin/grep checking for egrep... /data/data/com.termux/files/usr/bin/grep -E checking for fgrep... /data/data/com.termux/files/usr/bin/grep -F checking for ld used by gcc... /data/data/com.termux/files/usr/bin/ld checking if the linker (/data/data/com.termux/files/usr/bin/ld) is GNU ld... yes checking for BSD- or MS-compatible name lister (nm)... /data/data/com.termux/files/usr/bin/nm -B checking the name lister (/data/data/com.termux/files/usr/bin/nm -B) interface... BSD nm checking whether ln -s works... yes checking the maximum length of command line arguments... 32768 checking whether the shell understands some XSI constructs... yes checking whether the shell understands "+="... no checking for /data/data/com.termux/files/usr/bin/ld option to reload object files... -r checking for objdump... objdump checking how to recognize dependent libraries... pass_all checking for ar... ar checking for strip... strip checking for ranlib... ranlib checking command to parse /data/data/com.termux/files/usr/bin/nm -B output from gcc object... ok checking how to run the C preprocessor... gcc -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for dlfcn.h... yes checking for objdir... .libs checking if gcc supports -fno-rtti -fno-exceptions... yes checking for gcc option to produce PIC... -fPIC -DPIC checking if gcc PIC flag -fPIC -DPIC works... yes checking if gcc static flag -static works... no checking if gcc supports -c -o file.o... yes checking if gcc supports -c -o file.o... (cached) yes checking whether the gcc linker (/data/data/com.termux/files/usr/bin/ld) supports shared libraries... yes checking whether -lc should be explicitly linked in... no checking dynamic linker characteristics... GNU/Linux ld.so checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes checking for a BSD-compatible install... /data/data/com.termux/files/usr/bin/install -c checking for special C compiler options needed for large files... no checking for _FILE_OFFSET_BITS value needed for large files... 64 checking for int8_t... yes checking for int16_t... yes checking for int32_t... yes checking for int64_t... yes checking for intptr_t... yes checking for uint8_t... yes checking for uint16_t... yes checking for uint32_t... yes checking for uint64_t... yes checking for uintptr_t... yes checking for sys/types.h... (cached) yes checking for stdlib.h... (cached) yes checking for stdint.h... (cached) yes checking for inttypes.h... (cached) yes checking malloc.h usability... yes checking malloc.h presence... yes checking for malloc.h... yes checking for fdatasync... yes checking for gmtime_r... yes checking for isnan... yes checking for localtime_r... yes checking for localtime_s... no checking for malloc_usable_size... yes checking for strchrnul... yes checking for usleep... yes checking for utime... yes checking for pread... yes checking for pread64... yes checking for pwrite... yes checking for pwrite64... yes ../configure: 10337: test: x: unexpected operator unable to run tests because of --disable-tcl ../configure: 10456: test: x: unexpected operator configure: Version set to 3.47 configure: Release set to 3.47.0 checking for WASI SDK directory... no checking whether to support threadsafe operation... yes checking for library containing pthread_create... none required checking for library containing pthread_mutexattr_init... none required checking whether to support shared library linked as release mode or not... no checking whether to use an in-ram database for temporary tables... no checking if executables have the .exe suffix... unknown checking for library containing readline... -ledit not using linenoise checking for library containing fdatasync... none required checking build type... release checking zlib.h usability... yes checking zlib.h presence... yes checking for zlib.h... yes checking for library containing deflate... -lz checking for library containing dlopen... none required checking whether to support math functions... yes checking for library containing ceil... -lm checking whether to support JSON functions... yes checking whether to support MEMSYS5... no checking whether to support MEMSYS3... no checking whether to support FTS3... no checking whether to support FTS4... no checking whether to support FTS5... no checking whether to support LIMIT on UPDATE and DELETE statements... no checking whether to support GEOPOLY... no checking whether to support RTREE... no checking whether to support SESSION... no configure: creating ./config.status config.status: creating Makefile config.status: creating sqlite3.pc config.status: creating sqlite_cfg.h config.status: executing libtool commands

make "CFLAGS= -O2 -DSQLITE_OS_UNIX=1"

gcc -g -O2 -o mksourceid /data/data/com.termux/files/home/project/SQLiteDEV/bld/../tool/mksourceid.c sh /data/data/com.termux/files/home/project/SQLiteDEV/bld/../tool/cktclsh.sh 8.4 /data/data/com.termux/files/home/project/SQLiteDEV/bld/../tool/cktclsh.sh: 5: cktclsh8.4.tcl: not found ERROR: This makefile target requires tclsh 8.4 or later. make: *** [Makefile:807: has_tclsh84] Error 1

apt list

... eltclsh/stable 1.19-2 arm libsqlite-tcl/stable 3.46.1 arm tcl/stable,now 8.6.14 arm [installed] tcllib/stable 2.0 all ...

Building branch-3.46 works. It appears something has changed in the way TCL is identified.

(2) By Stephan Beal (stephan) on 2024-10-29 21:08:58 in reply to 1 [link] [source]

Building SQLite branch-3.47 in Termux on Android fails.

It would be really interesting to know whether the trunk builds in that environment. The build has been completely overhauled since the 3.47 release.

If it fails, and you can give us some instructions for reproducing your setup, that environment will be added to those we test the new build process on. If it doesn't fail, then... great :).

(3) By anonymous on 2024-10-29 21:59:38 in reply to 2 [link] [source]

Building SQLite trunk in Termux on Android also fails.

checkout: 1d24a29c6ef05185950ba5c45f2a60a92f12a8e5 2024-10-29 08:42:06 UTC parent: 80ac10ed8d0ee9eaf83a6c43608098c631f5f953 2024-10-29 08:18:45 UTC tags: trunk comment: When either --readline or --editline are explicitly provided but the corresponding feature is not found, fail fatally. If not explicitly requested, simply disable that feature if the lib is not found. (user: stephan)

../configure --disable-tcl

Host System...armv8l-unknown-linux-androideabi Build System...armv8l-unknown-linux-androideabi C compiler... cc C++ compiler... c++ Build C compiler...cc Checking for stdlib.h...ok srcdir = /data/data/com.termux/files/home/project/SQLiteDEV top_srcdir = /data/data/com.termux/files/home/project/SQLiteDEV Configuring SQLite version 3.48.0 This appears to be an out-of-tree build. Looking for install ... /data/data/com.termux/files/usr/bin/install Checking for sys/types.h...ok Checking if -D_FILE_OFFSET_BITS=64 is needed...yes Checking for int8_t...ok Checking for int16_t...ok Checking for int32_t...ok Checking for int64_t...ok Checking for intptr_t...ok Checking for uint8_t...ok Checking for uint16_t...ok Checking for uint32_t...ok Checking for uint64_t...ok Checking for uintptr_t...ok Checking for gmtime_r...ok Checking for isnan...ok Checking for localtime_r...ok Checking for localtime_s...not found Checking for malloc_usable_size...ok Checking for strchrnul...ok Checking for usleep...ok Checking for utime...ok Checking for pread...ok Checking for pread64...ok Checking for pwrite...ok Checking for pwrite64...ok Checking libs for fdatasync...none needed Checking for sys/types.h...(cached) ok Checking for sys/stat.h...ok Checking for dlfcn.h...ok Checking for unistd.h...ok Checking for stdlib.h...(cached) ok Checking for malloc.h...ok Checking for memory.h...ok Checking for string.h...ok Checking for strings.h...ok Checking for inttypes.h...ok Checking for zlib.h...ok Checking libs for deflate...-lz Checking whether the C compiler accepts -rpath /usr/local/lib...yes Build shared library? yes Build static library? yes Use amalgamation for builds? yes Use gcov? no test-runner flags: no Use #line macros in the amalgamation: no SQLITE_DEBUG build? no TCL disabled via --disable-tcl Checking for TCL to use for code generation... Checking for dirent.h...ok Checking for sys/time.h...ok Checking for realpath...ok TCL for code generation: jimsh Support threadsafe operation? yes Checking libs for pthread_create...none needed Checking libs for pthread_mutexattr_init...none needed Use an in-ram database for temporary tables? no Checking for line-editing capability... Line-editing support for the sqlite3 shell: none Checking libs for dlopen...none needed Checking libs for ceil...-lm Enabling math SQL functions -lm Emscripten SDK? not found ICU support is disabled. Feature flags... . − fts4 . − fts5 . − geopoly . − rtree . − session . − update-limit . − memsys5 . − memsys3 . + json Library feature flags: -DSQLITE_ENABLE_MATH_FUNCTIONS -DSQLITE_THREADSAFE=1 Shell options: -DSQLITE_HAVE_ZLIB=1 Created Makefile from Makefile.in Created sqlite3.pc from sqlite3.pc.in Created sqlite_cfg.h Source tree is configured! Run make to build it.

make "CFLAGS= -O2 -DSQLITE_OS_UNIX=1"

cc -O2 -DSQLITE_OS_UNIX=1 -DSQLITE_ENABLE_MATH_FUNCTIONS -DSQLITE_THREADSAFE=1 -DNDEBUG -D_HAVE_SQLITE_CONFIG_H -DBUILD_sqlite -I/usr/local/include -I. -I/data/data/com.termux/files/home/project/SQLiteDEV/src -I/data/data/com.termux/files/home/project/SQLiteDEV/ext/rtree -I/data/data/com.termux/files/home/project/SQLiteDEV/ext/icu -I/data/data/com.termux/files/home/project/SQLiteDEV/ext/fts3 -I/data/data/com.termux/files/home/project/SQLiteDEV/ext/session -I/data/data/com.termux/files/home/project/SQLiteDEV/ext/misc -shared -o libsqlite3.so sqlite3.o -rpath /usr/local/lib -lm -lz ld.lld: error: relocation R_ARM_REL32 cannot be used against symbol 'sqlite3_version'; recompile with -fPIC > > > defined in sqlite3.o > > > referenced by sqlite3.c > > > sqlite3.o:(sqlite3_libversion) ld.lld: error: relocation R_ARM_REL32 cannot be used against symbol 'sqlite3_data_directory'; recompile with -fPIC > > > defined in sqlite3.o > > > referenced by sqlite3.c > > > sqlite3.o:(sqlite3_shutdown) ld.lld: error: relocation R_ARM_REL32 cannot be used against symbol 'sqlite3_temp_directory'; recompile with -fPIC > > > defined in sqlite3.o > > > referenced by sqlite3.c > > > sqlite3.o:(sqlite3_shutdown) ld.lld: error: relocation R_ARM_REL32 cannot be used against symbol 'sqlite3_temp_directory'; recompile with -fPIC > > > defined in sqlite3.o > > > referenced by sqlite3.c > > > sqlite3.o:(unixGetTempname) ld.lld: error: relocation R_ARM_REL32 cannot be used against symbol 'sqlite3_temp_directory'; recompile with -fPIC > > > defined in sqlite3.o > > > referenced by sqlite3.c > > > sqlite3.o:(sqlite3Pragma) ld.lld: error: relocation R_ARM_REL32 cannot be used against symbol 'sqlite3_temp_directory'; recompile with -fPIC > > > defined in sqlite3.o > > > referenced by sqlite3.c > > > sqlite3.o:(sqlite3Pragma) ld.lld: error: relocation R_ARM_REL32 cannot be used against symbol 'sqlite3_temp_directory'; recompile with -fPIC > > > defined in sqlite3.o > > > referenced by sqlite3.c > > > sqlite3.o:(sqlite3Pragma) ld.lld: error: relocation R_ARM_REL32 cannot be used against symbol 'sqlite3_temp_directory'; recompile with -fPIC > > > defined in sqlite3.o > > > referenced by sqlite3.c > > > sqlite3.o:(sqlite3Pragma) ld.lld: error: relocation R_ARM_REL32 cannot be used against symbol 'sqlite3_version'; recompile with -fPIC > > > defined in sqlite3.o > > > referenced by sqlite3.c > > > sqlite3.o:(versionFunc) cc: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [/data/data/com.termux/files/home/project/SQLiteDEV/main.mk:1335: libsqlite3.so] Error 1

So... different errors, still not going as expected.

(4) By Stephan Beal (stephan) on 2024-10-29 22:07:37 in reply to 3 [link] [source]

recompile with -fPIC

i believe the problem here is that you are overriding the -fPIC which is in the default CFLAGS (but i'm on a mobile device so cannot readily confirm that). Please try passing the same flags via CPPFLAGS instead of CFLAGS.

(5) By anonymous on 2024-10-29 23:47:55 in reply to 4 [link] [source]

Thanks, using make "CPPFLAGS= -O2 -DSQLITE_OS_UNIX=1" works, but drops my flags, using make "CFLAGS= -fPIC -O2 -DSQLITE_OS_UNIX=1" however builds with my flags.

If I remember correctly I once overruled CFLAGS because of an unwanted -g parameter.

Unfortunately now I get a shell that doesn't have or understand READLINE - I think I saw another thread about that issue.

But this doesn't fix the issue with branch-3.47 ...

So staying on 3.46.1 and waiting for either 3.48 or a fix for the branch-3.47 issue.

If you are interested in the setup, it is a tablet running Android 11 and Termux. Using the F-Droid version of Termux instead of the Playstore version is recommended and Termux appears to have some issues with Android 12+.

Installed packages are:

apt/stable,now 2.8.1-1 arm [installed] bash-completion/stable,now 2.14.0 all [installed,automatic] bash/stable,now 5.2.37 arm [installed] binutils-bin/stable,now 2.43.1 arm [installed,automatic] binutils-libs/stable,now 2.43.1 arm [installed,automatic] binutils/stable,now 2.43.1 arm [installed] busybox/stable,now 1.36.1-2 arm [installed] bzip2/stable,now 1.0.8-6 arm [installed] ca-certificates/stable,now 1:2024.09.24 all [installed] caddy/stable,now 2.8.4 arm [installed] clang/stable,now 19.1.2 arm [installed,automatic] command-not-found/stable,now 2.4.0-48 arm [installed] coreutils/stable,now 9.5-3 arm [installed] curl/stable,now 8.10.1-2 arm [installed] dash/stable,now 0.5.12 arm [installed] debianutils/stable,now 5.20 arm [installed] dialog/stable,now 1.3-20240307-0 arm [installed,automatic] diffutils/stable,now 3.10 arm [installed] dnsutils/stable,now 9.16.41 arm [installed] dos2unix/stable,now 7.5.2 arm [installed] dpkg/stable,now 1.22.6-1 arm [installed] ed/stable,now 1.20.2 arm [installed] file/stable,now 5.45 arm [installed] findutils/stable,now 4.10.0 arm [installed] fossil/stable,now 2.24 arm [installed] gawk/stable,now 5.3.0 arm [installed] gdbm/stable,now 1.24 arm [installed,automatic] git/stable,now 2.47.0 arm [installed,automatic] glib/stable,now 2.80.5-2 arm [installed,automatic] gnupg/stable,now 2.4.5-3 arm [installed] gpgv/stable,now 2.4.5-3 arm [installed] grep/stable,now 3.11 arm [installed] gzip/stable,now 1.13 arm [installed] inetutils/stable,now 2.4-2 arm [installed] iperf3/stable,now 3.17.1 arm [installed] jq/stable,now 1.7.1 arm [installed] krb5/stable,now 1.21.3 arm [installed,automatic] ldd/stable,now 0.3 arm [installed] ldns/stable,now 1.8.4 arm [installed,automatic] less/stable,now 661 arm [installed] libandroid-glob/stable,now 0.6-2 arm [installed] libandroid-posix-semaphore/stable,now 0.1-3 arm [installed,automatic] libandroid-selinux/stable,now 14.0.0.11 arm [installed,automatic] libandroid-support/stable,now 29 arm [installed] libandroid-utimes/stable,now 0.4 arm [installed,automatic] libassuan/stable,now 3.0.1-2 arm [installed,automatic] libbz2/stable,now 1.0.8-6 arm [installed] libc++/stable,now 27b arm [installed] libcap-ng/stable,now 2:0.8.5 arm [installed,automatic] libcompiler-rt/stable,now 19.1.2 arm [installed,automatic] libcrypt/stable,now 0.2-5 arm [installed] libcurl/stable,now 8.10.1-2 arm [installed] libdb/stable,now 18.1.40-4 arm [installed,automatic] libedit/stable,now 20240517-3.1-0 arm [installed,automatic] libevent/stable,now 2.1.12-2 arm [installed,automatic] libexpat/stable,now 2.6.3 arm [installed,automatic] libffi/stable,now 3.4.6-1 arm [installed,automatic] libgcrypt/stable,now 1.11.0 arm [installed] libgmp/stable,now 6.3.0-1 arm [installed] libgnutls/stable,now 3.8.5 arm [installed,automatic] libgpg-error/stable,now 1.50 arm [installed] libiconv/stable,now 1.17 arm [installed] libicu/stable,now 75.1 arm [installed,automatic] libidn2/stable,now 2.3.7 arm [installed,automatic] libksba/stable,now 1.6.7-1 arm [installed,automatic] libllvm/stable,now 19.1.2 arm [installed,automatic] liblua54/stable,now 5.4.7 arm [installed,automatic] liblz4/stable,now 1.10.0 arm [installed,automatic] liblzma/stable,now 5.6.3 arm [installed] libmd/stable,now 1.1.0 arm [installed,automatic] libmpfr/stable,now 4.2.1 arm [installed] libnettle/stable,now 3.10 arm [installed,automatic] libnghttp2/stable,now 1.64.0 arm [installed] libnghttp3/stable,now 1.6.0 arm [installed,automatic] libnpth/stable,now 1.6-2 arm [installed,automatic] libresolv-wrapper/stable,now 1.1.7-4 arm [installed,automatic] libsmartcols/stable,now 2.40.2-1 arm [installed,automatic] libsodium/stable,now 1.0.20 arm [installed,automatic] libsqlite/stable,now 3.46.1 arm [installed] libssh2/stable,now 1.11.1 arm [installed,automatic] libunbound/stable,now 1.22.0 arm [installed,automatic] libunistring/stable,now 1.3 arm [installed,automatic] libuuid/stable,now 2.40.2-1 arm [installed,automatic] libuv/stable,now 1.49.2 arm [installed,automatic] libxml2/stable,now 2.13.4-1 arm [installed,automatic] libxslt/stable,now 1.1.42-1 arm [installed,automatic] libzip/stable,now 1.11.1 arm [installed,automatic] libzmq/stable,now 4.3.5 arm [installed] lld/stable,now 19.1.2 arm [installed,automatic] llvm/stable,now 19.1.2 arm [installed,automatic] lua54/stable,now 5.4.7 arm [installed] lzip/stable,now 1.24.1 arm [installed] m4/stable,now 1.4.19-4 arm [installed] make/stable,now 4.4.1 arm [installed,automatic] man/stable,now 1.14.6-1 arm [installed] mc/stable,now 4.8.32 arm [installed] mlocate/stable,now 0.26-5 arm [installed] nano/stable,now 8.2 arm [installed] ncurses-ui-libs/stable,now 6.5.20240831-2 arm [installed,automatic] ncurses-utils/stable,now 6.5.20240831-2 arm [installed] ncurses/stable,now 6.5.20240831-2 arm [installed] ndk-sysroot/stable,now 27b arm [installed,automatic] net-tools/stable,now 2.10.0 arm [installed] oniguruma/stable,now 6.9.9 arm [installed,automatic] openssh-sftp-server/stable,now 9.9p1-4 arm [installed,automatic] openssh/stable,now 9.9p1-4 arm [installed] openssl-tool/stable,now 1:3.3.2 arm [installed] openssl/stable,now 1:3.3.2 arm [installed] pass/stable,now 1.7.4-4 all [installed] patch/stable,now 2.7.6-4 arm [installed] pcre2/stable,now 10.44 arm [installed,automatic] pcre/stable,now 8.45-1 arm [installed] perl/stable,now 5.38.2-3 arm [installed,automatic] php/stable,now 8.3.10-1 arm [installed] pinentry/stable,now 1.3.1-1 arm [installed,automatic] pkg-config/stable,now 0.29.2-2 arm [installed,automatic] procps/stable,now 3.3.17-5 arm [installed] psmisc/stable,now 23.7 arm [installed] python-ensurepip-wheels/stable,now 3.12.7-1 all [installed,automatic] python-pip/stable,now 24.3.1 all [installed] python/stable,now 3.12.7-1 arm [installed] rclone/stable,now 1.68.1 arm [installed] readline/stable,now 8.2.13 arm [installed] resolv-conf/stable,now 1.3 arm [installed,automatic] sed/stable,now 4.9-1 arm [installed] sqlite/stable,now 3.46.1 arm [installed] tar/stable,now 1.35 arm [installed] tcl/stable,now 8.6.14 arm [installed] termux-am-socket/stable,now 1.5.0 arm [installed,automatic] termux-am/stable,now 0.8.0-1 all [installed] termux-auth/stable,now 1.5.0 arm [installed,automatic] termux-exec/stable,now 1:1.0 arm [installed] termux-keyring/stable,now 3.12-1 all [installed] termux-licenses/stable,now 2.0-3 all [installed] termux-tools/stable,now 1.44.2 arm [installed] texinfo/stable,now 7.1.1 arm [installed] tidy/stable,now 5.9.14-next-0 arm [installed,automatic] tree/stable,now 2.1.3 arm [installed,automatic] unrar/stable,now 7.0.9 arm [installed] unzip/stable,now 6.0-9 arm [installed] update-info-dir/stable,now 7.1.1 all [installed,automatic] util-linux/stable,now 2.40.2-1 arm [installed] vim-runtime/stable,now 9.1.0800 all [installed,automatic] vim/stable,now 9.1.0800 arm [installed] wget/stable,now 1.24.5 arm [installed] which/stable,now 2.21 arm [installed] wol/stable,now 0.7.1-3 arm [installed] xxhash/stable,now 0.8.2 arm [installed,automatic] xz-utils/stable,now 5.6.3 arm [installed] yq/stable,now 4.44.3 arm [installed] zip/stable,now 3.0-5 arm [installed] zlib/stable,now 1.3.1 arm [installed] zstd/stable,now 1.5.6-2 arm [installed,automatic]

With this trunk can be build!

(7) By Stephan Beal (stephan) on 2024-10-30 00:14:27 in reply to 5 [link] [source]

If I remember correctly I once overruled CFLAGS because of an unwanted -g parameter.

As of the current trunk, overriding CFLAGS is fine and won't nuke your -fPIC. To the best of my knowledge we currently only use -g by default on the source tree's own in-tree tools (code generators, etc.), not the end user deliverables. That said: my knowledge of the build internals for versions <= 3.47 is only superficial - it's possible that that build system used -g more readily.

Unfortunately now I get a shell that doesn't have or understand READLINE - I think I saw another thread about that issue.

readline/stable,now 8.2.13 arm

i don't know whether that package includes the header files. You may need to install a package named (probably) readline-dev. That's just a guess, though.

Please post the output of:

find /usr -type f -name readline.h

If the output is empty then you definitely need the dev package. If the output is not empty, that info may help us improve the readline detection.

But this doesn't fix the issue with branch-3.47 ...

Nope - 3.47 uses a completely different build process.

tool/cktclsh.sh: 5: cktclsh8.4.tcl: not found

The --disable-tcl flag does not eliminate the tree's requirement for TCL. It eliminates the build of the TCL SQLite extension and the related testing tools. TCL is still required for much of the code generation steps, and --disable-tcl does not eliminate that requirement. 3.48's build system eliminates the dependency on TCL for the code generator tools.

The error you're seeing is a side effect of the configure step not having found tclsh, and your configure output definitely points to syntax error in the configure script in that area which looks like a likely culprit:

../configure: 10337: test: x: unexpected operator
unable to run tests because of --disable-tcl
../configure: 10456: test: x: unexpected operator

i don't have an immediate solution for that, and cannot reproduce it locally, but we will look into it.

(8) By Stephan Beal (stephan) on 2024-10-30 00:29:33 in reply to 7 [link] [source]

../configure: 10337: test: x: unexpected operator

We now have a possible culprit: those two invocations of "test" use the == operator, which is accepted on many shells but might not be accepted on yours. If you're able to, please try replacing all three instances of == on those two lines with = then re-run configure.

The affected lines look like:

if test x"${with_tclsh}" == x -a x"${with_tcl}" == x; then

...

if test x"$TCLSH_CMD" == x; then

There are many other instances of == in that file but they are not in test invocations and must not be changed.

(9) By Stephan Beal (stephan) on 2024-10-30 00:36:34 in reply to 8 [link] [source]

We now have a possible culprit: ...

Got a bit ahead of myself. That fix is now in branch-3.47. It might resolve the follow-up tcl error - i'm not certain - but it will resolve the "suspiciously adjacent" syntax errors your shell reports.

(10) By anonymous on 2024-10-30 23:44:51 in reply to 9 [link] [source]

Thanks!

That does indeed solve the issue with branch-3.47.

(11) By anonymous on 2024-10-30 23:51:11 in reply to 7 [link] [source]

Thanks!

That works too.

My usage of CPFLAGS was originally for suppression of -g - and that was somewhere in the 3.30's (or earlier?).

(12) By anonymous on 2024-10-31 00:41:09 in reply to 7 [link] [source]

Tried locate readline.h and got

/data/data/com.termux/files/usr/include/editline/readline.h /data/data/com.termux/files/usr/include/readline/readline.h

(picked the larger of the two).

Tried ../configure --disable-tcl --with-readline-header=/data/data/com.termux/files/usr/include/readline/readline.h

And yes!

After make "CFLAGS= -O2 -DSQLITE_OS_UNIX=1" a working shell with readline.

(13) By Stephan Beal (stephan) on 2024-10-31 01:16:37 in reply to 12 [link] [source]

Tried ../configure --disable-tcl --with-readline-header=...

Fantastic! Thank you for reporting this.

/data/data/com.termux/files/usr/include/editline/readline.h
/data/data/com.termux/files/usr/include/readline/readline.h

(picked the larger of the two).

In this particular case, either one should actually work for long, boring reasons, but for the sake of completeness...

editline/readline.h is part of libedit, a.k.a. editline, which is a BSD-licensed library functionally similar to readline. editline/readline.h contains libedit's readline-compatible API declarations, making it a drop-in replacement for many uses of libreadline but without the viral licensing conditions.

If you're really curious and want to see that in action, you can probably do:

./configure --with-readline-header=/data/data/com.termux/files/usr/include/editline/readline.h --with-readline-ldflags=-ledit

If that builds (it "should" so long as libedit is installed) then running "ldd sqlite3" will show that it's actually linked to libedit, not libreadline.

More simply:

./configure --editline

"should" find and use libedit, but it would not surprise me if that fails in the termux environment for the same reason its automatic detection of readline.h failed (the header's in a weird place).

(14) By Stephan Beal (stephan) on 2024-10-31 01:20:58 in reply to 12 [link] [source]

After make "CFLAGS= -O2 -DSQLITE_OS_UNIX=1" a working shell with readline.

By the way: is there a particular reason you're setting -DSQLITE_OS_UNIX=1? You shouldn't need to set that. i.e. it should build identically without that flag.

(15) By anonymous on 2024-10-31 23:18:56 in reply to 14 [link] [source]

That... is a VERY good question.

It was carried over from my MINT21 build environment; that came from my MINT19 build environment; that originated in a MINT18 VM.

And why?

I think it was needed at that time, maybe just for an integrated extension that misbehaved under Linux.

I did not document it unfortunately.

So... removed it and no differences found.

(6.1) By Stephan Beal (stephan) on 2024-10-30 01:23:07 edited from 6.0 in reply to 4 [link] [source]

i believe the problem here is that you are overriding the -fPIC which is in the default CFLAGS

That's definitely the case. The current trunk now separately tracks the "core" CFLAGS (those which should not be overridden by make invocations) and will retain -fPIC when clients pass their own CFLAGS.

If you would, please try again with the latest trunk. Also, if you'll tell me how to set up a similar environment i'll set one up rather than continue to pester you to test these changes :). (Edit: you answered that in parallel as our responses crossed each other.)

Please try passing the same flags via CPPFLAGS instead of CFLAGS.

Correction: that won't work because of how CPPFLAGS is used. For historical compatibility, CPPFLAGS is only honored when running ./configure and it's appended to the CFLAGS (which your usage then overrides, nuking the configure-time CPPFLAGS). "Feature or bug" i cannot rightly say, but it's how CPPFLAGS has always been applied in historical builds.