diff --git a/Makefile.in b/Makefile.in index c705318113..44a0f62932 100644 --- a/Makefile.in +++ b/Makefile.in @@ -95,7 +95,7 @@ INSTALL = @BIN_INSTALL@ AR = @AR@ AR.flags = cr # TODO? Add a configure test to determine this? CC = @CC@ -B.cc = @BUILD_CC@ @BUILD_CFLAGS@ +B.cc = @CC_FOR_BUILD@ @BUILD_CFLAGS@ T.cc = @CC@ CFLAGS = @CPPFLAGS@ @CFLAGS@ @SH_CFLAGS@ diff --git a/auto.def b/auto.def index ce2f590f31..e5da690c24 100644 --- a/auto.def +++ b/auto.def @@ -19,14 +19,10 @@ use cc cc-db cc-shared cc-lib proj pkg-config set DUMP_DEFINES_TXT ./config.defines.txt # $DUMP_DEFINES_JSON is the autosetup counterpart of the historical # "DEFS" var which was generated by the autotools in the pre-processed -# autotools builds (but not in the canonical tree). This is used by at -# least one high-profile client to extract build config info for use -# in compiling a scripting-language binding, so its name should not be -# arbitrarily changed. -# -# 2024-10-26: generation of this file is disabled (via an empty file -# name) until/unless someone voices a specific interest in it. The -# original motivating use case is handled fine by sqlite_cfg.h. +# autotools builds (but not in the canonical tree). Generation of this +# file is disabled (via an empty file name) until/unless someone +# voices a specific interest in it. The original motivating use case +# is handled fine by sqlite_cfg.h. set DUMP_DEFINES_JSON ""; #./config.defines.json ######################################################################## @@ -291,27 +287,15 @@ if {".exe" eq [get-define TARGET_EXEEXT]} { # Programs needed if {"" eq [proj-bin-define install]} { proj-warn "Cannot find install binary, so 'make install' will not work." - # Reminder: we historically have ./install-sh in the source tree. - # Can we not simply use that? - # - # define BIN_INSTALL "$top_srcdir/install-sh" - # - # Nope: it MOVES its source files over the target, which breaks the - # installation in some cases, e.g. when libtclsqlite3.so is built in - # response to 'make install' and libsqlite3.a is moved before - # libtclsqlite3.so is linked. It's easy to hack to use cp instead - # of mv (simply replace the instcmd=... bit) but that won't retain - # the source timestamp and permissions unless we use cp's -p flag, - # which may not be portable enough. } ######################################################################## # We differentiate between two C compilers: the one used for binaries -# which are to run on the build system (BUILD_CC, a.k.a. BCC) and the -# one used for compiling binaries for the target system (CC, -# a.k.a. TCC). Normally they're the same, but they will differ when +# which are to run on the build system (in autosetup it's called +# CC_FOR_BUILD and in Makefile.in it's $(B.cc)) and the one used for +# compiling binaries for the target system (CC a.k.a. $(T.cc)). +# Normally they're the same, but they will differ when # cross-compiling. -define BUILD_CC [get-define CC_FOR_BUILD] define BUILD_CFLAGS [get-env BUILD_CFLAGS {-g}] ######################################################################## @@ -457,8 +441,8 @@ proj-if-opt-truthy with-debug { # be empty - this tree requires TCL to generated numerous # components. # -define TCLSH_CMD {exit 1} -define HAVE_TCL 0 +define TCLSH_CMD false ; # Significant is that it exits with non-0 +define HAVE_TCL 0 ; # Will be enabled via --tcl or a successful search proc sqlite-check-tcl {} { # TODO: document the steps this is taking. if {![opt-bool tcl]} { @@ -629,12 +613,21 @@ proc sqlite-check-tcl {} { sqlite-check-tcl ######################################################################## -# Check which TCL to use as a code generator. Prefer jimsh simply -# because we have it in-tree (it's part of autosetup), unless -# --with-tclsh=X is used, in which case prefix X. +# sqlite-determine-codegen-tcl checks which TCL to use as a code +# generator. By default, prefer jimsh simply because we have it +# in-tree (it's part of autosetup) unless --with-tclsh=X is used, in +# which case prefix X. # # Returns the name of the TCL it selects. Fails fatally if it cannot # detect a TCL appropriate for code generation. +# +# Defines: +# +# - BTCLSH = the TCL shell used for code generation. It may set this +# to an unexpanded makefile var name. +# +# - CFLAGS_JIMSH = any flags needed for buildng a BTCLSH-compatible +# jimsh. proc sqlite-determine-codegen-tcl {} { msg-result "Checking for TCL to use for code generation... " define CFLAGS_JIMSH {} @@ -669,9 +662,7 @@ proc sqlite-determine-codegen-tcl {} { } elseif {[file-isexec "${tpre}/bin/tclsh"]} { define TCLSH_CMD "${tpre}/bin/tclsh" } - unset tv } - unset tpre } set cgtcl [get-define TCLSH_CMD] if {![file exists $cgtcl]} { @@ -683,7 +674,6 @@ proc sqlite-determine-codegen-tcl {} { return $cgtcl }; # sqlite-determine-codegen-tcl msg-result "TCL for code generation: [sqlite-determine-codegen-tcl]" - # /TCL ######################################################################## @@ -741,7 +731,9 @@ if {1} { # - CFLAGS_READLINE = compilation flags for clients or empty string. # # Note that LDFLAGS_READLINE and CFLAGS_READLINE may refer to -# linenoise or editline, not necessarily libreadline. +# linenoise or editline, not necessarily libreadline. In some cases +# it will set HAVE_READLINE=1 when it's really using editline, for +# reasons described in this function's comments. # # Returns a string describing which line-editing approach to use, or # "none" if no option is available. @@ -766,14 +758,14 @@ proc sqlite-check-line-editing {} { define HAVE_EDITLINE 0 define LDFLAGS_READLINE "" define CFLAGS_READLINE "" - set failIfNotFound 0 ; # Set to 1 for explicit --FEATURE requests when FEATURE is not found - set libsForReadline {readline edit} ; # -l names to check for readline() + set failIfNotFound 0 ; # Set to 1 for explicit --FEATURE requests + set libsForReadline {readline edit} ; # -l names to check for readline(). + # The libedit check changes this. set editLibName "readline" ; # "readline" or "editline" set editLibDef "HAVE_READLINE" ; # "HAVE_READLINE" or "HAVE_EDITLINE" - set check [opt-val with-linenoise] - if {"" ne $check} { - # Use linenoise... - set dirLn $check + set dirLn [opt-val with-linenoise] + if {"" ne $dirLn} { + # Use linenoise from a copy of its sources (not a library)... if {![file isdir $dirLn]} { proj-fatal "--with-linenoise value is not a directory" } elseif {![file exists $dirLn/linenoise.c] } { @@ -787,16 +779,13 @@ proc sqlite-check-line-editing {} { sqlite-add-shell-opt -DHAVE_LINENOISE=1 return "linenoise" } elseif {[opt-bool editline]} { - # libedit mimics of libreadline and on some systems does not - # have its own header installed (instead, that of libreadline is used). - # We treat --editline as, for purposes of this tree, readline except - # that we'll link against libedit if it's available (and fail if - # it's not). We will use either API's header file + # libedit mimics libreadline and on some systems does not have its + # own header installed (instead, that of libreadline is used). # # shell.c historically expects HAVE_EDITLINE to be set for # libedit, but it then expects to see , which - # some system's don't actually have, despite having libedit. If we - # end up finding below, we will use + # some system's don't actually have, despite having libedit. If + # we end up finding below, we will use # -DHAVE_EDITLINE=1, else we will use -DHAVE_READLINE=1. In either # case, we will link against libedit. set failIfNotFound 1 @@ -806,8 +795,8 @@ proc sqlite-check-line-editing {} { msg-result "Readline support explicitly disabled with --disable-readline" return "none" } elseif {[proj-opt-was-provided readline]} { - # If an explicit --enable-readline was used, fail if it's not found, - # else treat the feature as optional. + # If an explicit --[enable-]readline was used, fail if it's not + # found, else treat the feature as optional. set failIfNotFound 1 } @@ -836,12 +825,12 @@ proc sqlite-check-line-editing {} { if {"auto" eq $rlInc} { set rlInc "" if {$::cross_compiling} { - # ^^^ this check is derived from the legacy configure script + # ^^^ this check is derived from the legacy configure script. proj-warn "Skipping check for readline.h because we're cross-compiling." } else { set dirs "[get-define prefix] /usr /usr/local /usr/local/readline /usr/contrib /mingw" set subdirs "include/$editLibName" - if {"readline" ne $editLibName} { + if {"editline" eq $editLibName} { lappend subdirs include/readline # ^^^ editline, on some systems, does not have its own header, # and uses libreadline's header. @@ -863,7 +852,13 @@ proc sqlite-check-line-editing {} { } } - # If readline.h was found/specified, look for libreadline... + # If readline.h was found/specified, look for lib(readline|edit)... + # + # This is not quite straightforward because both libreadline and + # libedit typically require some other library which (according to + # legacy autotools-generated tests) provides tgetent(3). On some + # systems that's built into libreadline/edit, on some (most?) its in + # lib[n]curses, and on some it's in libtermcap. set rlLib "" if {"" ne $rlInc} { set rlLib [opt-val with-readline-ldflags] @@ -885,11 +880,12 @@ proc sqlite-check-line-editing {} { } } + # If we found a library, configure the build to use it... if {"" ne $rlLib} { if {"editline" eq $editLibName && "HAVE_READLINE" eq $editLibDef} { proj-indented-notice { - NOTE: this is libedit but using , - so will be compiled using -DHAVE_READLINE=1 but linked with + NOTE: the local libedit but uses so we + will compile with -DHAVE_READLINE=1 but will link with libedit. } } @@ -899,13 +895,10 @@ proc sqlite-check-line-editing {} { define CFLAGS_READLINE $rlInc proj-assert {expr {$editLibDef in {HAVE_READLINE HAVE_EDITLINE}}} proj-assert {expr {$editLibName in {readline editline}}} - define $editLibDef 1 sqlite-add-shell-opt -D${editLibDef}=1 msg-result "Using $editLibName flags: $rlInc $rlLib" - # Now check whether rl_completion_matches() has a signature we can use. - # cctest is producing unexpected test output when using: - # -includes {stdio.h readline/readline.h} - # so we have to use -source instead and write the whole test app inline + # Check whether rl_completion_matches() has a signature we can use + # and disable that sub-feature if it doesn't. if {![cctest \ -cflags "$rlInc -D${editLibDef}" -libs $rlLib -nooutput 1 -source { #include @@ -962,22 +955,6 @@ proj-if-opt-truthy math { msg-result "Disabling math SQL functions" } -define cross_compiling ${cross_compiling} - -######################################################################## -# Emscripten SDK for building the web-based wasm components. -# -set emccsh $srcdir/tool/emcc.sh -if {![get-define HAVE_WASI_SDK] && [proj-check-emsdk]} { - define EMCC_WRAPPER $emccsh - proj-make-from-dot-in $emccsh - catch {exec chmod u+x $emccsh} -} else { - define EMCC_WRAPPER "" - file delete -force $emccsh -} -unset emccsh - ######################################################################## # ICU - International Components for Unicode # @@ -988,7 +965,7 @@ unset emccsh # --enable-icu-collations # # If both icu-ldflags and icu-config are provided, they are -# cumulative. If neither are provided, icu-collations is not honored +# cumulative. If neither are provided, icu-collations is not honored # and a warning is emitted if it is provided. # # Design note: though we can automatically enable ICU if the @@ -1038,15 +1015,31 @@ proc sqlite-check-icu {} { }; # sqlite-check-icu sqlite-check-icu +######################################################################## +# Emscripten SDK for building the web-based wasm components. +# +proc sqlite-check-emsdk {} { + set emccsh $::srcdir/tool/emcc.sh + if {![get-define HAVE_WASI_SDK] && [proj-check-emsdk]} { + define EMCC_WRAPPER $emccsh + proj-make-from-dot-in $emccsh + catch {exec chmod u+x $emccsh} + } else { + define EMCC_WRAPPER "" + file delete -force $emccsh + } +} +sqlite-check-emsdk + ######################################################################## # Check for log(3) in libm and die with an error if it is not -# found. $why should be the feature name which requires that function -# (it's used only in error messages). defines LDFLAGS_MATH to the -# required linker flags (which may be empty even if the math APIs are -# found, depending on the OS). -proc affirm-have-math {why} { +# found. $featureName should be the feature name which requires that +# function (it's used only in error messages). defines LDFLAGS_MATH to +# the required linker flags (which may be empty even if the math APIs +# are found, depending on the OS). +proc affirm-have-math {featureName} { if {![msg-quiet proj-check-function-in-lib log m]} { - user-error "Missing math APIs for $why" + user-error "Missing math APIs for $featureName" } define LDFLAGS_MATH [get-define lib_log ""] undefine lib_log diff --git a/manifest b/manifest index 1c1ec9b24b..08feab3ee4 100644 --- a/manifest +++ b/manifest @@ -1,9 +1,9 @@ -C Reformulate\sthe\sreadline\scompletion\ssignature\scompatibility\stest\sso\sthat\s-Wunused-variable\sin\sthe\sCFLAGS\sdoes\snot\scause\sit\sto\sfail.\sProblem\sreported\svia\semail. -D 2024-10-29T19:03:22.644 +C General\sauto.def\scleanups\sand\sdocs. +D 2024-10-29T20:27:36.141 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md c5b4009dca54d127d2d6033c22fd9cc34f53bedb6ef12c7cbaa468381c74ab28 -F Makefile.in cdf1c8db0b33fa83f400bcd63742113a727517adc55b322d2e004339c012cac2 +F Makefile.in 064898709d63e882764d2011522f0898c42a5dc2e7663ff4f4ed8fcfe6b7b067 F Makefile.linux-generic 69b54c58ab2424a0d30f340d9defd7e87c25690a55b77acb9bdc657bd9a223f1 F Makefile.msc a92237976eb92c5efaa0dd2524746aec12c196e12df8d4dbff9543a4648c3312 F README.md c3c0f19532ce28f6297a71870f3c7b424729f0e6d9ab889616d3587dd2332159 @@ -13,7 +13,7 @@ F art/icon-80x90.gif 65509ce3e5f86a9cd64fe7fca2d23954199f31fe44c1e09e208c80fb83d F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2 -F auto.def 1e6852f218b4d74fa79b2c85bbb19b3cf3b2c7c8e89225c8d639df2f0fd5a68f +F auto.def 50cf59530afe1a068fd1a981d5a12461e8acaaeff69778c0909aa1d29f1fea44 F autoconf/INSTALL 83e4a25da9fd053c7b3665eaaaf7919707915903 F autoconf/Makefile.am adedc1324b6a87fdd1265ddd336d2fb7d4f36a0e77b86ea553ae7cc4ea239347 F autoconf/Makefile.fallback 22fe523eb36dfce31e0f6349f782eb084e86a5620b2b0b4f84a2d6133f53f5ac @@ -2198,8 +2198,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 49a486c5069de041aedcbde4de178293e0463ae9918ecad7539eedf0ec77a139 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P 265ba15df1e64a50722118ac6d84667b0abd35fe8f4db28facf7788c50ac6cde -R e4fa5cb9421ab06b93f3a08ca998b3a0 +P 3891669a3fdd71f7095cf464f6e4e2b870d6c23e79b9f796b1125b2040f05519 +R da60f4bccf0dcae6e53b9b5b4cce8fd0 U stephan -Z af5ebb66ac586f10a87182e001c0a012 +Z ef2b5bc13a71a0b0f34c8682ca475280 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 697d2e3417..f4f4c0c131 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -3891669a3fdd71f7095cf464f6e4e2b870d6c23e79b9f796b1125b2040f05519 +e2f41c2540d8ff7686bfe22336598896de9083d139fc5a291c0f19896b9c1d20