# Created by migrate-autoconf - fix items marked XXX global autosetup use cc cc-shared cc-lib hwaci-common set DUMP_DEFINES_FILE defines.list set cross_compiling 0 set enable_shared 1 ######################################################################## # Note that boolean flags... # # 1) Are in the form flagname (default=false) or flagname=0 (false) or # flagname=1 (true). # # 2) If they default to false, the actual flag mapped to them is # --enable-FLAG. # # 3) If they default to true, the actual flag mapped to them is # --disable-FLAG. # # 4) For boolean options, configure will accept any of --flag, --enable-flag, # or --disable-flag. Unfortunately, it reserves --debug for its own use. # # 5) Mapping with their full name, e.g. enable-foo=1 or disable-bar=0, # will lead to breakage in calls to either [opt-bool foo] or # [opt-bool enable-foo]. # # (2) and (3) mean that the help text for flag=1 should start with # "Disable" and flag=0 should start with "Enable". # # In trying to helpfully map between --foo/--enable-foo/--disable-foo, # it ends up creating some degree of confusion. # # Reminders about flag handling quirks.. # # 1) autosetup treats prefixes of 'enable' and 'disable' specially, # leading to some incompatibilities with the historical sqlite3 # configure script flags. # # Defining non-boolean flags named enable-foo requires different # downstream handling of those flags. e.g. # # enable-tempstore:=no => {...} # # requires that [opt-val enable-tempstore], rather than [opt-val # tempstore], be used, which is in constrast to boolean flags, where # [opt-bool flag] must be used instead of [opt-bool enable-flag]. # # Also, passing --enable-tempstore with no value (to presumably get the # default value) breaks: autosetup tries to find a boolean-type tempstore # flag and cannot, so it complains that flag --tempstore is not defined. # i.e. --enable-tempstore requires that it be passed a value. # # An awkward workaround for that, discovered only by random trial and # error, is to define both {tempstore=1} and {enable-tempstore:}. With # that in place --enable-tempstore, with no value, works as expected # (why? Nobody knows!) but --tempstore can only ever be legally passed # a boolean value (0, 1, yes, no, enabled, disabled). It does, # however, pollute the --help with a synthetic --disable-tempstore # option. After an hour of fighting with it, a switch from # --enable-tempstore to --with-tempstore seems like the better # approach, in that it doesn't lead to a losing fight with autosetup. options { with-debug:=1 => {Enable debug build flags} with-tclsh:PATHNAME => {Full pathname of tclsh to use} with-tcl:DIR => {Directory containing tclConfig.sh} tcl=1 => {Disable building accessory programs that require TCL-dev} test-status => {Enable status of tests} threadsafe=1 => {Disable mutexing} releasemode => {libtool link to release mode} with-tempstore:=no => {Use an in-ram database for temporary tables: never,no,yes,always} editline=0 => {BSD editline support} readline=0 => {readline support} with-readline-lib => {readline library} with-readline-inc => {readline include paths} with-linenoise:DIR => {} amalgamation=1 => {Disable the amalgamation and instead build all files separately} load-extension=1 => {Disable loading of external extensions} math=1 => {Disable math functions} json=1 => {Disable JSON functions} all => {Enable FTS4, FTS5, Geopoly, RTree, Sessions} memsys5 => {Enable MEMSYS5} memsys3 => {Enable MEMSYS3} fts3 => {Enable the FTS3 extension} fts4 => {Enable the FTS4 extension} fts5 => {Enable the FTS5 extension} update-limit => {Enable the UPDATE/DELETE LIMIT clause} geopoly => {Enable the GEOPOLY extension} rtree => {Enable the RTREE extension} session => {Enable the SESSION extension} gcov=0 => {Enable coverage testing using gcov} linemacros => {Enable #line macros in the amalgamation.} with-wasi-sdk:=/opt/wasi-sdk => {Top-most dir of the wasi-sdk for a WASI build} with-emsdk:DIR => {Top-most dir of the Emscripten SDK installation} dump-defines=1 => {Dump autosetup defines to $DUMP_DEFINES_FILE} } # debug=0 => {debugging & verbose explain} set srcdir $autosetup(srcdir) puts "srcdir = $srcdir" set VERSION [readfile $srcdir/VERSION] puts "VERSION = $VERSION" define PACKAGE_VERSION $VERSION #puts "with-wasi-sdk? = [opt-val with-wasi-sdk]" #puts "with-debug? = [opt-val with-debug]" # # The build process allows for using a cross-compiler. But the default # action is to target the same platform that we are running on. The # configure script needs to discover the following properties of the # build and target systems: # # srcdir # # The is the name of the directory that contains the # "configure" shell script. All source files are # located relative to this directory. # # bindir # # The name of the directory where executables should be # written by the "install" target of the makefile. # # program_prefix # # Add this prefix to the names of all executables that run # on the target machine. Default: "" # # ENABLE_SHARED # # True if shared libraries should be generated. # # BUILD_CC # # The name of a command that is used to convert C # source files into executables that run on the build # platform. # # BUILD_CFLAGS # # Switches that the build compiler needs in order to construct # command-line programs. # # BUILD_LIBS # # Libraries that the build compiler needs in order to construct # command-line programs. # # TCL_* # # Lots of values are read in from the tclConfig.sh script, # if that script is available. This values are used for # constructing and installing the TCL extension. # # TARGET_READLINE_LIBS # # This is the library directives passed to the target linker # that cause the executable to link against the readline library. # This might be a switch like "-lreadline" or pathnames of library # file like "../../src/libreadline.a". # # TARGET_READLINE_INC # # This variables define the directory that contain header # files for the readline library. If the compiler is able # to find on its own, then this can be blank. ######################################################################## # OPT_FEATURE_FLAGS = -DSQLITE_OMIT/ENABLE flags. define OPT_FEATURE_FLAGS {} # Adds $flag, if not empty, to OPT_FEATURE_FLAGS. proc add-feature-flag {flag} { if {"" ne $flag} { define-append OPT_FEATURE_FLAGS $flag } } # add-feature-flag -DSQLITE_JUST_TESTING=3 hwaci-check-exeext if {".exe" eq [get-define TARGET_EXEEXT]} { define SQLITE_OS_UNIX 0 define SQLITE_OS_WIN 1 # todo? add -DSQLITE_OS_WIN=1 to CFLAGS? } else { define SQLITE_OS_UNIX 1 define SQLITE_OS_WIN 0 # todo? add -DSQLITE_OS_UNIX=1 to CFLAGS? } ######### # Programs needed if {"" eq [hwaci-bin-define install]} { msg-result "Cannot find install binary, so 'make install' will not work." } ######### # Enable large file support (if special flags are necessary) cc-check-lfs ######### # Check for needed/wanted data types cc-check-types int8_t int16_t int32_t int64_t intptr_t \ uint8_t uint16_t uint32_t uint64_t uintptr_t ######### # Figure out whether or not we have these functions cc-check-functions fdatasync gmtime_r isnan localtime_r localtime_s \ malloc_usable_size strchrnul usleep utime pread pread64 pwrite pwrite64 ######### # Check for needed/wanted headers cc-check-includes sys/types.h stdlib.h stdint.h inttypes.h malloc.h if {[cc-check-includes zlib.h] && [cc-check-function-in-lib deflate z]} { define HAVE_ZLIB 1 define LDFLAGS_ZLIB -lz } else { define HAVE_ZLIB 0 define LDFLAGS_ZLIB "" } msg-checking "Debug build? " hwaci-if-opt-truthy with-debug { msg-result yes } { msg-result "no. Use --with-debug to enable." } ########## # Handle --with-wasi-sdk=DIR # # This must be early because it changes the toolchain. # # It's unclear whether we can actually get away with making these # changes to the autosetup environment. if {1} { set wasiSdkDir [opt-val with-wasi-sdk] ; # ??? [lindex [opt-val with-wasi-sdk] end] #puts "x wasiSdkDir=$wasiSdkDir foo=[lindex [opt-val with-wasi-sdk] end]" if {$wasiSdkDir eq ""} { define HAVE_WASI_SDK 0 define WASI_SDK_DIR "" } else { msg-checking "Checking WASI SDK directory \[$wasiSdkDir]... " if {![file exists $wasiSdkDir/bin/clang]} { user-error "--with-wasi-sdk=${wasiSdkDir} directory does not contain bin/clang" } msg-result "using wasi-sdk clang, disabling: tcl, CLI shell, DLL" define HAVE_WASI_SDK 1 define WASI_SDK_DIR $wasiSdkDir hwaci-opt-set tcl 0 hwaci-opt-set threadsafe 0 set cross_compiling 1 set enable_shared 0 # Changing --host and --target have no effect here except to possibly # cause confusion. autoconf has finished processing them by this # point. # # host_alias=wasm32-wasi # target=wasm32-wasi # # Merely changing CC and LD to the wasi-sdk's is enough to get # sqlite3.o building in WASM format. # XXX CC="${wasiSdkDir}/bin/clang" # XXX LD="${wasiSdkDir}/bin/wasm-ld" # XXX RANLIB="${wasiSdkDir}/bin/llvm-ranlib" # set cross_compiling yes # hwaci-opt-set threadsafe 0 # set use_tcl no # hwaci-opt-set tcl 0 # libtool is apparently hard-coded to use gcc for linking DLLs, so # we disable the DLL build... # set enable_shared no } # unset wasiSdkDir }; # --wasi-sdk-dir ######### # By default, we use the amalgamation (this may be changed below...) # # XXX USE_AMALGAMATION=1 if {0} { ######### # Figure out all the name of a working tclsh and parameters needed to compile against Tcl. # The --with-tcl= and/or --with-tclsh= configuration arguments might be useful for this. # # XXX AC_ARG_WITH tclsh AS_HELP_STRING([--with-tclsh=PATHNAME],[full pathname of a tclsh to use]) # XXX AC_ARG_WITH tcl AS_HELP_STRING([--with-tcl=DIR],[directory containing (tclConfig.sh)]) # if {![opt-bool tcl]} { # set use_tcl $enableval # } else { # set use_tcl yes # } #set original_use_tcl ${use_tcl} # XXX if test x"${with_tclsh}" == x -a x"${with_tcl}" == x; then # XXX AC_CHECK_PROGS TCLSH_CMD tclsh8.6 tclsh tclsh9.0 none #set with_tclsh ${TCLSH_CMD} # XXX fi # XXX if test x"${with_tclsh}" != x -a x"${with_tclsh}" != xnone; then # XXX TCLSH_CMD=${with_tclsh} #msg-result "using tclsh at \"$TCLSH_CMD\"" # XXX if test x"${use_tcl}" = "xyes"; then #set with_tcl `${with_tclsh} <${srcdir}/tool/find_tclconfig.tcl` # XXX if test x"${with_tcl}" != x; then #msg-result "$TCLSH_CMD recommends the tclConfig.sh at ${with_tcl}" # XXX else #msg-result Warning: "$TCLSH_CMD is unable to recommend a tclConfig.sh" #set use_tcl no # XXX fi # XXX fi # XXX fi # XXX if test x"${use_tcl}" = "xyes"; then # XXX if test x"${with_tcl}" != x; then # XXX if test -r ${with_tcl}/tclConfig.sh; then # set tclconfig "${with_tcl}/tclConfig.sh" # XXX else # XXX for i in tcl8.6 tcl9.0 lib; do # XXX if test -r ${with_tcl}/$i/tclConfig.sh; then #set tclconfig ${with_tcl}/$i/tclConfig.sh # XXX break # XXX fi # XXX done # XXX fi # XXX if test ! -r "${tclconfig}"; then #user-error "no tclConfig.sh file found under ${with_tcl}" # XXX fi # XXX else # If we have not yet found a tclConfig.sh file, look in $libdir whic is # set automatically by autoconf or by the --prefix command-line option. # See https://sqlite.org/forum/forumpost/e04e693439a22457 #set libdir ${prefix}/lib # XXX if test -r ${libdir}/tclConfig.sh; then #set tclconfig ${libdir}/tclConfig.sh # XXX else # XXX for i in tcl8.6 tcl9.0 lib; do # XXX if test -r ${libdir}/$i/tclConfig.sh; then #set tclconfig ${libdir}/$i/tclConfig.sh # XXX break # XXX fi # XXX done # XXX fi # XXX if test ! -r "${tclconfig}"; then #user-error "cannot find a usable tclConfig.sh file. # Use --with-tcl=DIR to specify a directory where tclConfig.sh can be found. # SQLite does not use TCL internally, but TCL is required to build SQLite # from canonical sources and TCL is required for testing." # XXX fi # XXX fi # msg-result "loading TCL configuration from ${tclconfig}" # XXX . ${tclconfig} # XXX autosetup automatically substitutes all define'd values # In general, simply 'define' the value rather than using a shell # variable and AC_SUBST. # # XXX AC_SUBST TCL_INCLUDE_SPEC # XXX AC_SUBST TCL_LIB_SPEC # XXX AC_SUBST TCL_STUB_LIB_SPEC # There are lots of other configuration variables that are provided by the # tclConfig.sh file and that could be included here. But as of right now, # TCL_LIB_SPEC is the only what that the Makefile uses. # XXX HAVE_TCL=1 # XXX elif test x"${original_use_tcl}" = "xno"; then # msg-result "unable to run tests because of --disable-tcl" # XXX HAVE_TCL=0 # XXX else # msg-result "unable to run tests because no tclConfig.sh file could be located" # XXX HAVE_TCL=0 # XXX fi # XXX AC_SUBST HAVE_TCL # XXX if test x"$TCLSH_CMD" == x; then # XXX TCLSH_CMD=${TCL_EXEC_PREFIX}/bin/tclsh${TCL_VERSION} # XXX if test ! -x ${TCLSH_CMD}; then # set _2 ${TCL_EXEC_PREFIX}/bin/tclsh # XXX if test ! -x ${TCLSH_CMD_2}; then # msg-result Warning: "cannot find a usable tclsh at either ${TCLSH_CMD} or ${TCLSH_CMD_2}" # XXX TCLSH_CMD=none # XXX else # XXX TCLSH_CMD=${TCLSH_CMD_2} # XXX fi # XXX fi # XXX fi # XXX if test "$TCLSH_CMD" = "none"; then # If we can't find a local tclsh, then building the amalgamation will fail. # We act as though --disable-amalgamation has been used. # msg-result Warning: "Warning: can't find tclsh - defaulting to non-amalgamation build." # XXX USE_AMALGAMATION=0 # XXX TCLSH_CMD="tclsh" # XXX fi # XXX AC_SUBST TCLSH_CMD # XXX AC_ARG_VAR TCLLIBDIR Where to install tcl plugin # XXX if test "x${TCLLIBDIR+set}" != "xset" ; then # XXX for i in `echo 'puts stdout $auto_path' | ${TCLSH_CMD}` ; do # XXX if test -d $i ; then # XXX TCLLIBDIR=$i # XXX break # XXX fi # XXX done # XXX TCLLIBDIR="${TCLLIBDIR}/sqlite3" # XXX fi } if {0} { ######### # Set up options for running tests. # if {[opt-bool test-status]} { define TSTRNNR_OPTS {--status} } else { define TSTRNNR_OPTS {} } # XXX if test $use_vt100 != no; then # XXX TSTRNNR_OPTS=--status # XXX else # XXX TSTRNNR_OPTS= # XXX fi # XXX AC_SUBST TSTRNNR_OPTS } ######### # Locate a compiler for the build machine. This compiler should # generate command-line programs that run on the build machine. # # XXX if test x"$cross_compiling" = xno; then # XXX BUILD_CC=$CC # XXX BUILD_CFLAGS=$CFLAGS # XXX else # XXX if test "${BUILD_CC+set}" != set; then # XXX AC_CHECK_PROGS BUILD_CC gcc cc cl # XXX fi # XXX if test "${BUILD_CFLAGS+set}" != set; then # XXX BUILD_CFLAGS="-g" # XXX fi # XXX fi # XXX AC_SUBST BUILD_CC ########## # Do we want to support multithreaded use of sqlite # msg-checking "Support threadsafe operation? " hwaci-if-opt-truthy threadsafe { msg-result yes add-feature-flag -DSQLITE_THREADSAFE=1 cc-check-function-in-lib pthread_create pthread cc-check-function-in-lib pthread_mutexattr_init pthread } { msg-result no add-feature-flag -DSQLITE_THREADSAFE=0 } ########## # Do we want to support release? # # Maintenance note: this might be irrelevant with an autosetup port, # as it appears to be related to libtool (part of the autotools). # if {0} { hwaci-if-opt-truthy releasemode { msg-result "Release-mode build." set enable_releasemode 1 } { msg-result "Non-release-mode build." set enable_releasemode 0 } } if {0} { msg-checking "Checking whether to support shared library linked as release mode or not..." # XXX if test "$enable_releasemode" = "no"; then # XXX ALLOWRELEASE="" msg-result "no" # XXX else # XXX ALLOWRELEASE="-release `cat $srcdir/VERSION`" msg-result "yes" # XXX fi # XXX AC_SUBST ALLOWRELEASE } ########## # Do we want temporary databases in memory? # if {1} { set ts [opt-val with-tempstore no] set tsn 1 msg-checking "Use an in-ram database for temporary tables? " switch -- $ts { never { set tsn 0 } no { set tsn 1 } yes { set tsn 2 } always { set tsn 3 } default { user-error "Invalid with-tempstore value \[$ts]. Use one of: never, no, yes, always" } } msg-result $ts define TEMP_STORE $tsn unset ts tsn } if {0} { ########## # Figure out what C libraries are required to compile programs # that use "readline()" library. # # XXX TARGET_READLINE_LIBS="" # XXX TARGET_READLINE_INC="" # XXX TARGET_HAVE_READLINE=0 # XXX TARGET_HAVE_EDITLINE=0 if {[opt-bool editline]} { set with_editline $enableval } else { set with_editline auto } if {![opt-bool readline]} { set with_readline $enableval } else { set with_readline auto } # XXX if test x"$with_editline" != xno; then # XXX sLIBS=$LIBS # XXX LIBS="" # XXX TARGET_HAVE_EDITLINE=1 if {[cc-check-function-in-lib readline edit]} { set with_readline no } else { # XXX TARGET_HAVE_EDITLINE=0 } # XXX TARGET_READLINE_LIBS=$LIBS # XXX LIBS=$sLIBS # XXX fi # XXX if test x"$with_readline" != xno; then set found "yes" if {[opt-val with-readline-lib] ne {}} { set withval [lindex [opt-val with-readline-lib] end] set with_readline_lib $withval } else { set with_readline_lib "auto" } # XXX if test "x$with_readline_lib" = xauto; then # XXX save_LIBS="$LIBS" # XXX LIBS="" if {[cc-check-function-in-lib tgetent readline ncurses curses termcap]} { # XXX term_LIBS="$LIBS" } else { # XXX term_LIBS="" } if {[cc-check-function-in-lib readline readline]} { # XXX TARGET_READLINE_LIBS="-lreadline" } else { set found "no" } # XXX TARGET_READLINE_LIBS="$TARGET_READLINE_LIBS $term_LIBS" # XXX LIBS="$save_LIBS" # XXX else # XXX TARGET_READLINE_LIBS="$with_readline_lib" # XXX fi if {[opt-val with-readline-inc] ne {}} { set withval [lindex [opt-val with-readline-inc] end] set with_readline_inc $withval } else { set with_readline_inc "auto" } # XXX if test "x$with_readline_inc" = xauto; then if {[cc-check-includes readline.h]} { set found "yes" } else { set found "no" # XXX if test "$cross_compiling" != yes; then # XXX for dir in /usr /usr/local /usr/local/readline /usr/contrib /mingw; do # XXX for subdir in include include/readline; do # XXX AC_CHECK_FILE $dir/$subdir/readline.h found=yes # XXX if test "$found" = "yes"; then # XXX TARGET_READLINE_INC="-I$dir/$subdir" # XXX break # XXX fi # XXX done # XXX test "$found" = "yes" && break # XXX done # XXX fi } # XXX else # XXX TARGET_READLINE_INC="$with_readline_inc" # XXX fi # XXX if test x"$found" = xno; then # XXX TARGET_READLINE_LIBS="" # XXX TARGET_READLINE_INC="" # XXX TARGET_HAVE_READLINE=0 # XXX else # XXX TARGET_HAVE_READLINE=1 # XXX fi # XXX fi if {[opt-val with-linenoise] ne {}} { set withval [lindex [opt-val with-linenoise] end] set with_linenoise $withval } else { set with_linenoise "no" } # XXX if test "x$with_linenoise" != "xno"; then # XXX TARGET_HAVE_READLINE=0 # XXX TARGET_HAVE_EDITLINE=0 # XXX TARGET_HAVE_LINENOISE=1 # XXX TARGET_READLINE_INC="-I${with_linenoise}" # XXX TARGET_READLINE_LIBS="${with_linenoise}/linenoise.c" # XXX echo "using linenoise source code at ${with_linenoise}" # XXX else # XXX TARGET_HAVE_LINENOISE=0 # XXX echo "not using linenoise" # XXX fi # XXX AC_SUBST TARGET_READLINE_LIBS # XXX AC_SUBST TARGET_READLINE_INC # XXX AC_SUBST TARGET_HAVE_READLINE # XXX AC_SUBST TARGET_HAVE_EDITLINE # XXX AC_SUBST TARGET_HAVE_LINENOISE } if {0} { ########## # Figure out what C libraries are required to compile programs # that use "fdatasync()" function. # cc-check-function-in-lib fdatasync rt } if {0} { ######### # check for debug enabled if {[opt-bool debug]} { } msg-checking "Checking build type..." # XXX if test "${enable_debug}" = "yes" ; then # XXX TARGET_DEBUG="-DSQLITE_DEBUG=1 -DSQLITE_ENABLE_SELECTTRACE -DSQLITE_ENABLE_WHERETRACE -O0 -Wall" msg-result "debug" # XXX else # XXX TARGET_DEBUG="-DNDEBUG" msg-result "release" # XXX fi # XXX AC_SUBST TARGET_DEBUG } if {0} { ######### # See whether we should use the amalgamation to build if {![opt-bool amalgamation]} { } # XXX if test "${enable_amalgamation}" = "no" ; then # XXX USE_AMALGAMATION=0 # XXX fi # XXX AC_SUBST USE_AMALGAMATION } if {0} { ######### # Look for zlib. Only needed by extensions and by the sqlite3.exe shell cc-check-includes zlib.h if {[cc-check-function-in-lib deflate z]} { define HAVE_ZLIB 1; # "-DSQLITE_HAVE_ZLIB=1" } else { define HAVE_ZLIB 0; # HAVE_ZLIB="" } # XXX AC_SUBST HAVE_ZLIB } hwaci-if-opt-truthy load-extension { if {[cc-check-function-in-lib dlopen dl]} { define LDFLAGS_DLOPEN [get-define lib_dlopen] } else { user-error "dlopen() not found. Use --disable-load-extension to bypass this check." } } { define LDFLAGS_DLOPEN "" add-feature-flag {-DSQLITE_OMIT_LOAD_EXTENSION=1} msg-result "Disabling loadable extensions." } hwaci-if-opt-truthy math { if {![cc-check-function-in-lib ceil m]} { user-error "Cannot find libm functions. Use --disable-math to bypass this." } define LDFLAGS_MATH [get-define lib_ceil] undefine lib_ceil add-feature-flag {-DSQLITE_ENABLE_MATH_FUNCTIONS} msg-result "Enabling math SQL functions" } { define LDFLAGS_MATH "" msg-result "Disabling math SQL functions" } hwaci-if-opt-truthy json { msg-result "Enabling JSON SQL functions" } { add-feature-flag {-DSQLITE_OMIT_JSON} msg-result "Disabling JSON SQL functions" } if {0} { ########## # Do we want to support memsys3 and/or memsys5 # if {[opt-bool memsys5]} { } msg-checking "Checking whether to support MEMSYS5..." # XXX if test "${enable_memsys5}" = "yes"; then # XXX OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_MEMSYS5" msg-result "yes" # XXX else msg-result "no" # XXX fi if {[opt-bool memsys3]} { } msg-checking "Checking whether to support MEMSYS3..." # XXX if test "${enable_memsys3}" = "yes" -a "${enable_memsys5}" = "no"; then # XXX OPT_FEATURE_FLAGS="${OPT_FEATURE_FLAGS} -DSQLITE_ENABLE_MEMSYS3" msg-result "yes" # XXX else msg-result "no" # XXX fi } if {0} { # is this still relevant? ######### # attempt to duplicate any OMITS and ENABLES into the ${OPT_FEATURE_FLAGS} parameter # XXX for option in $CFLAGS $CPPFLAGS # XXX do # XXX case $option in # XXX -DSQLITE_OMIT*) OPT_FEATURE_FLAGS="$OPT_FEATURE_FLAGS $option";; # XXX -DSQLITE_ENABLE*) OPT_FEATURE_FLAGS="$OPT_FEATURE_FLAGS $option";; # XXX esac # XXX done # XXX AC_SUBST OPT_FEATURE_FLAGS # attempt to remove any OMITS and ENABLES from the $(CFLAGS) parameter # XXX ac_temp_CFLAGS="" # XXX for option in $CFLAGS # XXX do # XXX case $option in # XXX -DSQLITE_OMIT*) ;; # XXX -DSQLITE_ENABLE*) ;; # XXX *) ac_temp_CFLAGS="$ac_temp_CFLAGS $option";; # XXX esac # XXX done # XXX CFLAGS=$ac_temp_CFLAGS # attempt to remove any OMITS and ENABLES from the $(CPPFLAGS) parameter # XXX ac_temp_CPPFLAGS="" # XXX for option in $CPPFLAGS # XXX do # XXX case $option in # XXX -DSQLITE_OMIT*) ;; # XXX -DSQLITE_ENABLE*) ;; # XXX *) ac_temp_CPPFLAGS="$ac_temp_CPPFLAGS $option";; # XXX esac # XXX done # XXX CPPFLAGS=$ac_temp_CPPFLAGS # attempt to remove any OMITS and ENABLES from the $(BUILD_CFLAGS) parameter # XXX ac_temp_BUILD_CFLAGS="" # XXX for option in $BUILD_CFLAGS # XXX do # XXX case $option in # XXX -DSQLITE_OMIT*) ;; # XXX -DSQLITE_ENABLE*) ;; # XXX *) ac_temp_BUILD_CFLAGS="$ac_temp_BUILD_CFLAGS $option";; # XXX esac # XXX done # XXX BUILD_CFLAGS=$ac_temp_BUILD_CFLAGS } msg-checking "Enable gcov? " hwaci-if-opt-truthy gcov { define USE_GCOV 1 msg-result yes } { define USE_GCOV 0 msg-result no } proc affirm-have-math {} { if {![cc-check-function-in-lib log m]} { user-error "Missing required math APIs" } define LDFLAGS_MATH [get-define lib_log ""] } ######################################################################## # Handle various SQLITE_ENABLE_... feature flags. foreach {boolFlag featureFlag ifSetEvalThis} { all {} { hwaci-opt-set fts4 hwaci-opt-set fts5 hwaci-opt-set geopoly hwaci-opt-set rtree hwaci-opt-set session } fts4 -DSQLITE_ENABLE_FTS4 {affirm-have-math} fts5 -DSQLITE_ENABLE_FTS5 {affirm-have-math} geopoly -DSQLITE_ENABLE_GEOPOLY {hwaci-opt-set rtree} rtree -DSQLITE_ENABLE_RTREE {} session {-DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK} {} update-limit -DSQLITE_ENABLE_UPDATE_DELETE_LIMIT {} memsys3 {} { if {[opt-bool memsys5]} { msg-result "NOT enabling memsys3 because memsys5 is enabled." } else { add-feature-flag -DSQLITE_ENABLE_MEMSYS3 } } memsys5 -DSQLITE_ENABLE_MEMSYS5 {} } { if {[hwaci-opt-truthy $boolFlag]} { add-feature-flag $featureFlag msg-result "Enabling $boolFlag" eval $ifSetEvalThis } else { msg-result "Not enabling $boolFlag" } } msg-checking "Use #line macros in the amalgamation: " hwaci-if-opt-truthy linemacros { define AMALGAMATION_LINE_MACROS {--linemacros=1} msg-result yes } { define AMALGAMATION_LINE_MACROS {--linemacros=0} msg-result no } ########## # Emscripten SDK # if {1} { # TODO: port this bit and its associated shell script from the # Fossil source tree's auto.def and tools/emcc.sh.in. } ######### # Generate the output files. # if {1} { # mystery: why are defines (srcdir, top_srcdir) both absolute when emitted # from make-config-header but relative when emitted via make-template? hwaci-make-from-dot-in Makefile hwaci-make-from-dot-in sqlite3.pc #hwaci-make-from-dot-in ext/wasm/GNUmakefile if {0} { # output from make-config-header is not quite the same as that from the # autotools. We may need to write a custom replacement. # hwaci-make-from-dot-in sqlite_cfg.h # make-config-header sqlite_cfg.h -bare {SIZEOF_* HAVE_DECL_*} -auto HAVE_* -none * # make-config-header sqlite_cfg.h -bare {SIZEOF_* HAVE_*} -none * # make-config-header sqlite_cfg.h } } set oFF [get-define OPT_FEATURE_FLAGS] if {"" ne $oFF} { define OPT_FEATURE_FLAGS [lsort -unique $oFF] msg-result "Final feature flags: [get-define OPT_FEATURE_FLAGS]" } unset oFF hwaci-if-opt-truthy dump-defines { global DUMP_DEFINES_FILE msg-result "--dump-defines is creating file: $DUMP_DEFINES_FILE" make-config-header $DUMP_DEFINES_FILE \ -bare {OPT_FEATURE_FLAGS SQLITE_OS_* LDFLAGS_* USE_*} \ -auto {*} # achtung: ^^^^ whichever SQLITE_OS_foo flag which is set to 0 will # get _undefined_ here unless it's part of the -bare set. }