]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Backport the 'stdcall' related enhancements from trunk. stdcall-3.8.8
authormistachkin <mistachkin@noemail.net>
Wed, 25 Mar 2015 00:09:44 +0000 (00:09 +0000)
committermistachkin <mistachkin@noemail.net>
Wed, 25 Mar 2015 00:09:44 +0000 (00:09 +0000)
FossilOrigin-Name: cbb93d1aa1f992f17f76fd71fe9a99e03082f103

Makefile.msc
ext/fts3/fts3_write.c
manifest
manifest.uuid
src/shell.c
src/sqlite.h.in
tool/build-all-msvc.bat
tool/mksqlite3c-noext.tcl
tool/mksqlite3c.tcl
tool/mksqlite3h.tcl

index 4ebe9fd20cac901d378e20acc62d5d095cfbf988..d2b9887ec9ab786a7c83d3cbd4817577cb935908 100644 (file)
@@ -22,8 +22,22 @@ USE_AMALGAMATION = 1
 USE_FULLWARN = 0
 !ENDIF
 
+# Set this non-0 to use "stdcall" calling convention for the core library
+# and shell executable.
+#
+!IFNDEF USE_STDCALL
+USE_STDCALL = 0
+!ENDIF
+
+# Set this non-0 to have the shell executable link against the core dynamic
+# link library.
+#
+!IFNDEF DYNAMIC_SHELL
+DYNAMIC_SHELL = 0
+!ENDIF
+
 # If necessary, create a list of harmless compiler warnings to disable when
-# compiling the build tools.  For the SQLite source code itself, warnings,
+# compiling the various tools.  For the SQLite source code itself, warnings,
 # if any, will be disabled from within it.
 #
 !IFNDEF NO_WARN
@@ -250,9 +264,9 @@ NSDKLIBPATH = $(NSDKLIBPATH:\\=\)
 # will run on the platform that is doing the build.
 #
 !IF $(USE_FULLWARN)!=0
-BCC = $(NCC) -W4
+BCC = $(NCC) -nologo -W4
 !ELSE
-BCC = $(NCC) -W3
+BCC = $(NCC) -nologo -W3
 !ENDIF
 
 # Check if assembly code listings should be generated for the source
@@ -275,14 +289,106 @@ NLTLIBPATHS = "/LIBPATH:$(NCRTLIBPATH)" "/LIBPATH:$(NSDKLIBPATH)"
 # same unless your are cross-compiling.)
 #
 !IF $(USE_FULLWARN)!=0
-TCC = $(CC) -W4 -DINCLUDE_MSVC_H=1
+TCC = $(CC) -nologo -W4 -DINCLUDE_MSVC_H=1
 !ELSE
-TCC = $(CC) -W3
+TCC = $(CC) -nologo -W3
 !ENDIF
 
 TCC = $(TCC) -DSQLITE_OS_WIN=1 -I. -I$(TOP) -I$(TOP)\src -fp:precise
 RCC = $(RC) -DSQLITE_OS_WIN=1 -I$(TOP) -I$(TOP)\src
 
+# Check if we want to use the "stdcall" calling convention when compiling.
+# This is not supported by the compilers for non-x86 platforms.  It should
+# also be noted here that building any target with these "stdcall" options
+# will most likely fail if the Tcl library is also required.  This is due
+# to how the Tcl library functions are declared and exported (i.e. without
+# an explicit calling convention, which results in "cdecl").
+#
+!IF $(USE_STDCALL)!=0
+!IF "$(PLATFORM)"=="x86"
+CORE_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_STDCALL=__stdcall
+SHELL_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_STDCALL=__stdcall
+!ELSE
+!IFNDEF PLATFORM
+CORE_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_STDCALL=__stdcall
+SHELL_CCONV_OPTS = -Gz -DSQLITE_CDECL=__cdecl -DSQLITE_STDCALL=__stdcall
+!ELSE
+CORE_CCONV_OPTS =
+SHELL_CCONV_OPTS =
+!ENDIF
+!ENDIF
+!ELSE
+CORE_CCONV_OPTS =
+SHELL_CCONV_OPTS =
+!ENDIF
+
+# These are additional compiler options used for the core library.
+#
+!IFNDEF CORE_COMPILE_OPTS
+!IF $(USE_STDCALL)!=0
+CORE_COMPILE_OPTS = $(CORE_CCONV_OPTS) -DSQLITE_API=__declspec(dllexport)
+!ELSE
+CORE_COMPILE_OPTS = $(CORE_CCONV_OPTS)
+!ENDIF
+!ENDIF
+
+# These are the additional targets that the core library should depend on
+# when linking.
+#
+!IFNDEF CORE_LINK_DEP
+!IF $(USE_STDCALL)!=0
+CORE_LINK_DEP =
+!ELSE
+CORE_LINK_DEP = sqlite3.def
+!ENDIF
+!ENDIF
+
+# These are additional linker options used for the core library.
+#
+!IFNDEF CORE_LINK_OPTS
+!IF $(USE_STDCALL)!=0
+CORE_LINK_OPTS =
+!ELSE
+CORE_LINK_OPTS = /DEF:sqlite3.def
+!ENDIF
+!ENDIF
+
+# These are additional compiler options used for the shell executable.
+#
+!IFNDEF SHELL_COMPILE_OPTS
+!IF $(DYNAMIC_SHELL)!=0
+SHELL_COMPILE_OPTS = $(SHELL_CCONV_OPTS) -DSQLITE_API=__declspec(dllimport)
+!ELSE
+SHELL_COMPILE_OPTS = $(SHELL_CCONV_OPTS)
+!ENDIF
+!ENDIF
+
+# This is the core library that the shell executable should depend on.
+#
+!IFNDEF SHELL_CORE_DEP
+!IF $(DYNAMIC_SHELL)!=0
+SHELL_CORE_DEP = sqlite3.dll
+!ELSE
+SHELL_CORE_DEP = libsqlite3.lib
+!ENDIF
+!ENDIF
+
+# This is the core library that the shell executable should link with.
+#
+!IFNDEF SHELL_CORE_LIB
+!IF $(DYNAMIC_SHELL)!=0
+SHELL_CORE_LIB = sqlite3.lib
+!ELSE
+SHELL_CORE_LIB = libsqlite3.lib
+!ENDIF
+!ENDIF
+
+# These are additional linker options used for the shell executable.
+#
+!IFNDEF SHELL_LINK_OPTS
+SHELL_LINK_OPTS = $(SHELL_CORE_LIB)
+!ENDIF
+
 # Check if assembly code listings should be generated for the source
 # code files to be compiled.
 #
@@ -569,8 +675,11 @@ LTLINK = $(TCC) -Fe$@
 # set this for you.  Otherwise, the linker will attempt
 # to deduce the binary type based on the object files.
 !IFDEF PLATFORM
-LTLINKOPTS = /MACHINE:$(PLATFORM)
-LTLIBOPTS = /MACHINE:$(PLATFORM)
+LTLINKOPTS = /NOLOGO /MACHINE:$(PLATFORM)
+LTLIBOPTS = /NOLOGO /MACHINE:$(PLATFORM)
+!ELSE
+LTLINKOPTS = /NOLOGO
+LTLIBOPTS = /NOLOGO
 !ENDIF
 
 # When compiling for use in the WinRT environment, the following
@@ -696,7 +805,7 @@ LIBRESOBJS =
 
 # All of the source code files.
 #
-SRC = \
+SRC1 = \
   $(TOP)\src\alter.c \
   $(TOP)\src\analyze.c \
   $(TOP)\src\attach.c \
@@ -746,7 +855,8 @@ SRC = \
   $(TOP)\src\os_setup.h \
   $(TOP)\src\os_unix.c \
   $(TOP)\src\os_win.c \
-  $(TOP)\src\os_win.h \
+  $(TOP)\src\os_win.h
+SRC2 = \
   $(TOP)\src\pager.c \
   $(TOP)\src\pager.h \
   $(TOP)\src\parse.y \
@@ -793,15 +903,14 @@ SRC = \
 
 # Source code for extensions
 #
-SRC = $(SRC) \
+SRC3 = \
   $(TOP)\ext\fts1\fts1.c \
   $(TOP)\ext\fts1\fts1.h \
   $(TOP)\ext\fts1\fts1_hash.c \
   $(TOP)\ext\fts1\fts1_hash.h \
   $(TOP)\ext\fts1\fts1_porter.c \
   $(TOP)\ext\fts1\fts1_tokenizer.h \
-  $(TOP)\ext\fts1\fts1_tokenizer1.c
-SRC = $(SRC) \
+  $(TOP)\ext\fts1\fts1_tokenizer1.c \
   $(TOP)\ext\fts2\fts2.c \
   $(TOP)\ext\fts2\fts2.h \
   $(TOP)\ext\fts2\fts2_hash.c \
@@ -811,7 +920,7 @@ SRC = $(SRC) \
   $(TOP)\ext\fts2\fts2_tokenizer.h \
   $(TOP)\ext\fts2\fts2_tokenizer.c \
   $(TOP)\ext\fts2\fts2_tokenizer1.c
-SRC = $(SRC) \
+SRC4 = \
   $(TOP)\ext\fts3\fts3.c \
   $(TOP)\ext\fts3\fts3.h \
   $(TOP)\ext\fts3\fts3Int.h \
@@ -828,18 +937,16 @@ SRC = $(SRC) \
   $(TOP)\ext\fts3\fts3_tokenize_vtab.c \
   $(TOP)\ext\fts3\fts3_unicode.c \
   $(TOP)\ext\fts3\fts3_unicode2.c \
-  $(TOP)\ext\fts3\fts3_write.c
-SRC = $(SRC) \
+  $(TOP)\ext\fts3\fts3_write.c \
   $(TOP)\ext\icu\sqliteicu.h \
-  $(TOP)\ext\icu\icu.c
-SRC = $(SRC) \
+  $(TOP)\ext\icu\icu.c \
   $(TOP)\ext\rtree\rtree.h \
   $(TOP)\ext\rtree\rtree.c
 
 
 # Generated source code files
 #
-SRC = $(SRC) \
+SRC5 = \
   keywordhash.h \
   opcodes.c \
   opcodes.h \
@@ -847,6 +954,10 @@ SRC = $(SRC) \
   parse.h \
   sqlite3.h
 
+# All source code files.
+#
+SRC = $(SRC1) $(SRC2) $(SRC3) $(SRC4) $(SRC5)
+
 # Source code to the test files.
 #
 TESTSRC = \
@@ -1017,13 +1128,13 @@ libsqlite3.lib: $(LIBOBJ)
 libtclsqlite3.lib:     tclsqlite.lo libsqlite3.lib
        $(LTLIB) $(LTLIBOPTS) $(LTLIBPATHS) /OUT:$@ tclsqlite.lo libsqlite3.lib $(LIBTCL:tcl=tclstub) $(TLIBS)
 
-sqlite3.exe:   $(TOP)\src\shell.c libsqlite3.lib $(LIBRESOBJS) sqlite3.h
-       $(LTLINK) $(READLINE_FLAGS) $(TOP)\src\shell.c \
-               /link $(LTLINKOPTS) $(LTLIBPATHS) libsqlite3.lib $(LIBRESOBJS) $(LIBREADLINE) $(LTLIBS) $(TLIBS)
+sqlite3.exe:   $(TOP)\src\shell.c $(SHELL_CORE_DEP) $(LIBRESOBJS) sqlite3.h
+       $(LTLINK) $(SHELL_COMPILE_OPTS) $(READLINE_FLAGS) $(TOP)\src\shell.c \
+               /link /pdb:sqlite3sh.pdb $(LTLINKOPTS) $(SHELL_LINK_OPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LIBREADLINE) $(LTLIBS) $(TLIBS)
 
-mptester.exe:  $(TOP)\mptest\mptest.c libsqlite3.lib $(LIBRESOBJS) sqlite3.h
-       $(LTLINK) $(TOP)\mptest\mptest.c \
-               /link $(LTLINKOPTS) $(LTLIBPATHS) libsqlite3.lib $(LIBRESOBJS) $(LIBREADLINE) $(LTLIBS) $(TLIBS)
+mptester.exe:  $(TOP)\mptest\mptest.c $(SHELL_CORE_DEP) $(LIBRESOBJS) sqlite3.h
+       $(LTLINK) $(SHELL_COMPILE_OPTS) $(TOP)\mptest\mptest.c \
+               /link $(LTLINKOPTS) $(LTLIBPATHS) $(SHELL_LINK_OPTS) $(LIBRESOBJS) $(LIBREADLINE) $(LTLIBS) $(TLIBS)
 
 # This target creates a directory named "tsrc" and fills it with
 # copies of all of the C source code and header files needed to
@@ -1032,10 +1143,14 @@ mptester.exe:   $(TOP)\mptest\mptest.c libsqlite3.lib $(LIBRESOBJS) sqlite3.h
 # all that automatic generation.
 #
 .target_source:        $(SRC) $(TOP)\tool\vdbe-compress.tcl
-       -rmdir /S/Q tsrc
+       -rmdir /Q/S tsrc 2>NUL
        -mkdir tsrc
-       for %i in ($(SRC)) do copy /Y %i tsrc
-       del /Q tsrc\sqlite.h.in tsrc\parse.y
+       for %i in ($(SRC1)) do copy /Y %i tsrc
+       for %i in ($(SRC2)) do copy /Y %i tsrc
+       for %i in ($(SRC3)) do copy /Y %i tsrc
+       for %i in ($(SRC4)) do copy /Y %i tsrc
+       for %i in ($(SRC5)) do copy /Y %i tsrc
+       del /Q tsrc\sqlite.h.in tsrc\parse.y 2>NUL
        $(TCLSH_CMD) $(TOP)\tool\vdbe-compress.tcl $(OPTS) < tsrc\vdbe.c > vdbe.new
        move vdbe.new tsrc\vdbe.c
        echo > .target_source
@@ -1060,7 +1175,7 @@ SQLITE3C = sqlite3.c
 # Rule to build the amalgamation
 #
 sqlite3.lo:    $(SQLITE3C)
-       $(LTCOMPILE) -c $(SQLITE3C)
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(SQLITE3C)
 
 # Rules to build the LEMON compiler generator
 #
@@ -1078,10 +1193,10 @@ lemon.exe:      $(TOP)\tool\lemon.c lempar.c
 #     opcodes.lo
 #
 parse.lo:      parse.c $(HDR)
-       $(LTCOMPILE) -c parse.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c parse.c
 
 opcodes.lo:    opcodes.c
-       $(LTCOMPILE) -c opcodes.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c opcodes.c
 
 # Rule to build the Win32 resources object file.
 #
@@ -1099,223 +1214,223 @@ $(LIBRESOBJS):        $(TOP)\src\sqlite3.rc $(HDR)
 # Rules to build individual *.lo files from files in the src directory.
 #
 alter.lo:      $(TOP)\src\alter.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\alter.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\alter.c
 
 analyze.lo:    $(TOP)\src\analyze.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\analyze.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\analyze.c
 
 attach.lo:     $(TOP)\src\attach.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\attach.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\attach.c
 
 auth.lo:       $(TOP)\src\auth.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\auth.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\auth.c
 
 backup.lo:     $(TOP)\src\backup.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\backup.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\backup.c
 
 bitvec.lo:     $(TOP)\src\bitvec.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\bitvec.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\bitvec.c
 
 btmutex.lo:    $(TOP)\src\btmutex.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\btmutex.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\btmutex.c
 
 btree.lo:      $(TOP)\src\btree.c $(HDR) $(TOP)\src\pager.h
-       $(LTCOMPILE) -c $(TOP)\src\btree.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\btree.c
 
 build.lo:      $(TOP)\src\build.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\build.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\build.c
 
 callback.lo:   $(TOP)\src\callback.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\callback.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\callback.c
 
 complete.lo:   $(TOP)\src\complete.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\complete.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\complete.c
 
 ctime.lo:      $(TOP)\src\ctime.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\ctime.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\ctime.c
 
 date.lo:       $(TOP)\src\date.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\date.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\date.c
 
 delete.lo:     $(TOP)\src\delete.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\delete.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\delete.c
 
 expr.lo:       $(TOP)\src\expr.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\expr.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\expr.c
 
 fault.lo:      $(TOP)\src\fault.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\fault.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\fault.c
 
 fkey.lo:       $(TOP)\src\fkey.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\fkey.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\fkey.c
 
 func.lo:       $(TOP)\src\func.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\func.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\func.c
 
 global.lo:     $(TOP)\src\global.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\global.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\global.c
 
 hash.lo:       $(TOP)\src\hash.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\hash.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\hash.c
 
 insert.lo:     $(TOP)\src\insert.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\insert.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\insert.c
 
 journal.lo:    $(TOP)\src\journal.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\journal.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\journal.c
 
 legacy.lo:     $(TOP)\src\legacy.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\legacy.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\legacy.c
 
 loadext.lo:    $(TOP)\src\loadext.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\loadext.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\loadext.c
 
 main.lo:       $(TOP)\src\main.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\main.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\main.c
 
 malloc.lo:     $(TOP)\src\malloc.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\malloc.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\malloc.c
 
 mem0.lo:       $(TOP)\src\mem0.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\mem0.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem0.c
 
 mem1.lo:       $(TOP)\src\mem1.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\mem1.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem1.c
 
 mem2.lo:       $(TOP)\src\mem2.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\mem2.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem2.c
 
 mem3.lo:       $(TOP)\src\mem3.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\mem3.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem3.c
 
 mem5.lo:       $(TOP)\src\mem5.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\mem5.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mem5.c
 
 memjournal.lo: $(TOP)\src\memjournal.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\memjournal.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\memjournal.c
 
 mutex.lo:      $(TOP)\src\mutex.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\mutex.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex.c
 
 mutex_noop.lo: $(TOP)\src\mutex_noop.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\mutex_noop.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex_noop.c
 
 mutex_unix.lo: $(TOP)\src\mutex_unix.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\mutex_unix.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex_unix.c
 
 mutex_w32.lo:  $(TOP)\src\mutex_w32.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\mutex_w32.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\mutex_w32.c
 
 notify.lo:     $(TOP)\src\notify.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\notify.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\notify.c
 
 pager.lo:      $(TOP)\src\pager.c $(HDR) $(TOP)\src\pager.h
-       $(LTCOMPILE) -c $(TOP)\src\pager.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pager.c
 
 pcache.lo:     $(TOP)\src\pcache.c $(HDR) $(TOP)\src\pcache.h
-       $(LTCOMPILE) -c $(TOP)\src\pcache.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pcache.c
 
 pcache1.lo:    $(TOP)\src\pcache1.c $(HDR) $(TOP)\src\pcache.h
-       $(LTCOMPILE) -c $(TOP)\src\pcache1.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pcache1.c
 
 os.lo: $(TOP)\src\os.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\os.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\os.c
 
 os_unix.lo:    $(TOP)\src\os_unix.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\os_unix.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\os_unix.c
 
 os_win.lo:     $(TOP)\src\os_win.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\os_win.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\os_win.c
 
 pragma.lo:     $(TOP)\src\pragma.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\pragma.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\pragma.c
 
 prepare.lo:    $(TOP)\src\prepare.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\prepare.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\prepare.c
 
 printf.lo:     $(TOP)\src\printf.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\printf.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\printf.c
 
 random.lo:     $(TOP)\src\random.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\random.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\random.c
 
 resolve.lo:    $(TOP)\src\resolve.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\resolve.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\resolve.c
 
 rowset.lo:     $(TOP)\src\rowset.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\rowset.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\rowset.c
 
 select.lo:     $(TOP)\src\select.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\select.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\select.c
 
 status.lo:     $(TOP)\src\status.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\status.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\status.c
 
 table.lo:      $(TOP)\src\table.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\table.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\table.c
 
 threads.lo:    $(TOP)\src\threads.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\threads.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\threads.c
 
 tokenize.lo:   $(TOP)\src\tokenize.c keywordhash.h $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\tokenize.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\tokenize.c
 
 trigger.lo:    $(TOP)\src\trigger.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\trigger.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\trigger.c
 
 update.lo:     $(TOP)\src\update.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\update.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\update.c
 
 utf.lo:        $(TOP)\src\utf.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\utf.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\utf.c
 
 util.lo:       $(TOP)\src\util.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\util.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\util.c
 
 vacuum.lo:     $(TOP)\src\vacuum.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\vacuum.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vacuum.c
 
 vdbe.lo:       $(TOP)\src\vdbe.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\vdbe.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbe.c
 
 vdbeapi.lo:    $(TOP)\src\vdbeapi.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\vdbeapi.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbeapi.c
 
 vdbeaux.lo:    $(TOP)\src\vdbeaux.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\vdbeaux.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbeaux.c
 
 vdbeblob.lo:   $(TOP)\src\vdbeblob.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\vdbeblob.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbeblob.c
 
 vdbemem.lo:    $(TOP)\src\vdbemem.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\vdbemem.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbemem.c
 
 vdbesort.lo:   $(TOP)\src\vdbesort.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\vdbesort.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbesort.c
 
 vdbetrace.lo:  $(TOP)\src\vdbetrace.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\vdbetrace.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vdbetrace.c
 
 vtab.lo:       $(TOP)\src\vtab.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\vtab.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\vtab.c
 
 wal.lo:        $(TOP)\src\wal.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\wal.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\wal.c
 
 walker.lo:     $(TOP)\src\walker.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\walker.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\walker.c
 
 where.lo:      $(TOP)\src\where.c $(HDR)
-       $(LTCOMPILE) -c $(TOP)\src\where.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) -c $(TOP)\src\where.c
 
 tclsqlite.lo:  $(TOP)\src\tclsqlite.c $(HDR)
-       $(LTCOMPILE) -DUSE_TCL_STUBS=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
+       $(LTCOMPILE) $(NO_WARN) -DUSE_TCL_STUBS=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
 
 tclsqlite-shell.lo:    $(TOP)\src\tclsqlite.c $(HDR)
-       $(LTCOMPILE) -DTCLSH=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
+       $(LTCOMPILE) $(NO_WARN) -DTCLSH=1 -DBUILD_sqlite -I$(TCLINCDIR) -c $(TOP)\src\tclsqlite.c
 
-tclsqlite3.exe:        tclsqlite-shell.lo libsqlite3.lib $(LIBRESOBJS)
-       $(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /OUT:$@ libsqlite3.lib tclsqlite-shell.lo $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
+tclsqlite3.exe:        tclsqlite-shell.lo $(SQLITE3C) $(LIBRESOBJS)
+       $(LTLINK) $(SQLITE3C) /link $(LTLINKOPTS) $(LTLIBPATHS) /OUT:$@ tclsqlite-shell.lo $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
 
 # Rules to build opcodes.c and opcodes.h
 #
@@ -1330,7 +1445,7 @@ opcodes.h:        parse.h $(TOP)\src\vdbe.c $(TOP)\mkopcodeh.awk
 parse.h:       parse.c
 
 parse.c:       $(TOP)\src\parse.y lemon.exe $(TOP)\addopcodes.awk
-       del /Q parse.y parse.h parse.h.temp
+       del /Q parse.y parse.h parse.h.temp 2>NUL
        copy $(TOP)\src\parse.y .
        .\lemon.exe $(REQ_FEATURE_FLAGS) $(OPT_FEATURE_FLAGS) $(OPTS) parse.y
        move parse.h parse.h.temp
@@ -1351,67 +1466,67 @@ keywordhash.h:  $(TOP)\tool\mkkeywordhash.c mkkeywordhash.exe
 # Rules to build the extension objects.
 #
 icu.lo:        $(TOP)\ext\icu\icu.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\icu\icu.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\icu\icu.c
 
 fts2.lo:       $(TOP)\ext\fts2\fts2.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2.c
 
 fts2_hash.lo:  $(TOP)\ext\fts2\fts2_hash.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_hash.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_hash.c
 
 fts2_icu.lo:   $(TOP)\ext\fts2\fts2_icu.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_icu.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_icu.c
 
 fts2_porter.lo:        $(TOP)\ext\fts2\fts2_porter.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_porter.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_porter.c
 
 fts2_tokenizer.lo:     $(TOP)\ext\fts2\fts2_tokenizer.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_tokenizer.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_tokenizer.c
 
 fts2_tokenizer1.lo:    $(TOP)\ext\fts2\fts2_tokenizer1.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_tokenizer1.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts2\fts2_tokenizer1.c
 
 fts3.lo:       $(TOP)\ext\fts3\fts3.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3.c
 
 fts3_aux.lo:   $(TOP)\ext\fts3\fts3_aux.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_aux.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_aux.c
 
 fts3_expr.lo:  $(TOP)\ext\fts3\fts3_expr.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_expr.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_expr.c
 
 fts3_hash.lo:  $(TOP)\ext\fts3\fts3_hash.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_hash.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_hash.c
 
 fts3_icu.lo:   $(TOP)\ext\fts3\fts3_icu.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_icu.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_icu.c
 
 fts3_snippet.lo:       $(TOP)\ext\fts3\fts3_snippet.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_snippet.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_snippet.c
 
 fts3_porter.lo:        $(TOP)\ext\fts3\fts3_porter.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_porter.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_porter.c
 
 fts3_tokenizer.lo:     $(TOP)\ext\fts3\fts3_tokenizer.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenizer.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenizer.c
 
 fts3_tokenizer1.lo:    $(TOP)\ext\fts3\fts3_tokenizer1.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenizer1.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenizer1.c
 
 fts3_tokenize_vtab.lo: $(TOP)\ext\fts3\fts3_tokenize_vtab.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenize_vtab.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_tokenize_vtab.c
 
 fts3_unicode.lo:       $(TOP)\ext\fts3\fts3_unicode.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_unicode.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_unicode.c
 
 fts3_unicode2.lo:      $(TOP)\ext\fts3\fts3_unicode2.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_unicode2.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_unicode2.c
 
 fts3_write.lo: $(TOP)\ext\fts3\fts3_write.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_write.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\fts3\fts3_write.c
 
 rtree.lo:      $(TOP)\ext\rtree\rtree.c $(HDR) $(EXTHDR)
-       $(LTCOMPILE) -DSQLITE_CORE -c $(TOP)\ext\rtree\rtree.c
+       $(LTCOMPILE) $(CORE_COMPILE_OPTS) $(NO_WARN) -DSQLITE_CORE -c $(TOP)\ext\rtree\rtree.c
 
 
 # Rules to build the 'testfixture' application.
@@ -1425,7 +1540,7 @@ TESTFIXTURE_FLAGS = -DTCLSH=1 -DSQLITE_TEST=1 -DSQLITE_CRASH_TEST=1
 TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_SERVER=1 -DSQLITE_PRIVATE=""
 TESTFIXTURE_FLAGS = $(TESTFIXTURE_FLAGS) -DSQLITE_CORE $(NO_WARN)
 
-TESTFIXTURE_SRC0 = $(TESTEXT) $(TESTSRC2) libsqlite3.lib
+TESTFIXTURE_SRC0 = $(TESTEXT) $(TESTSRC2) $(SHELL_CORE_DEP)
 TESTFIXTURE_SRC1 = $(TESTEXT) $(SQLITE3C)
 !IF $(USE_AMALGAMATION)==0
 TESTFIXTURE_SRC = $(TESTSRC) $(TOP)\src\tclsqlite.c $(TESTFIXTURE_SRC0)
@@ -1465,77 +1580,76 @@ sqlite3_analyzer.c: $(SQLITE3C) $(TOP)\src\test_stat.c $(TOP)\src\tclsqlite.c $(
        echo ; return zMainloop; } >> $@
 
 sqlite3_analyzer.exe:  sqlite3_analyzer.c $(LIBRESOBJS)
-       $(LTLINK) -DBUILD_sqlite -DTCLSH=2 -I$(TCLINCDIR) sqlite3_analyzer.c \
+       $(LTLINK) $(NO_WARN) -DBUILD_sqlite -DTCLSH=2 -I$(TCLINCDIR) sqlite3_analyzer.c \
                /link $(LTLINKOPTS) $(LTLIBPATHS) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
 
 testloadext.lo:        $(TOP)\src\test_loadext.c
-       $(LTCOMPILE) -c $(TOP)\src\test_loadext.c
+       $(LTCOMPILE) $(NO_WARN) -c $(TOP)\src\test_loadext.c
 
 testloadext.dll: testloadext.lo
        $(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL /OUT:$@ testloadext.lo
 
 showdb.exe:    $(TOP)\tool\showdb.c $(SQLITE3C)
-       $(LTLINK) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
+       $(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
                $(TOP)\tool\showdb.c $(SQLITE3C)
 
 showstat4.exe: $(TOP)\tool\showstat4.c $(SQLITE3C)
-       $(LTLINK) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
+       $(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
                $(TOP)\tool\showstat4.c $(SQLITE3C)
 
 showjournal.exe:       $(TOP)\tool\showjournal.c $(SQLITE3C)
-       $(LTLINK) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
+       $(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
                $(TOP)\tool\showjournal.c $(SQLITE3C)
 
 showwal.exe:   $(TOP)\tool\showwal.c $(SQLITE3C)
-       $(LTLINK) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
+       $(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
                $(TOP)\tool\showwal.c $(SQLITE3C)
 
 fts3view.exe:  $(TOP)\ext\fts3\tool\fts3view.c $(SQLITE3C)
-       $(LTLINK) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
+       $(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
                $(TOP)\ext\fts3\tool\fts3view.c $(SQLITE3C)
 
 rollback-test.exe:     $(TOP)\tool\rollback-test.c $(SQLITE3C)
-       $(LTLINK) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
+       $(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
                $(TOP)\tool\rollback-test.c $(SQLITE3C)
 
 LogEst.exe:    $(TOP)\tool\logest.c sqlite3.h
-       $(LTLINK) -Fe$@ $(TOP)\tool\LogEst.c
+       $(LTLINK) $(NO_WARN) -Fe$@ $(TOP)\tool\LogEst.c
 
 wordcount.exe: $(TOP)\test\wordcount.c $(SQLITE3C)
-       $(LTLINK) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
+       $(LTLINK) $(NO_WARN) -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
                $(TOP)\test\wordcount.c $(SQLITE3C)
 
 speedtest1.exe:        $(TOP)\test\speedtest1.c $(SQLITE3C)
-       $(LTLINK) -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
+       $(LTLINK) $(NO_WARN) -DSQLITE_OMIT_LOAD_EXTENSION -Fe$@ \
                $(TOP)\test\speedtest1.c $(SQLITE3C)
 
 clean:
-       del /Q *.lo *.ilk *.lib *.obj *.pdb sqlite3.exe libsqlite3.lib
-       del /Q *.cod *.da *.bb *.bbg gmon.out
-       del /Q sqlite3.h opcodes.c opcodes.h
-       del /Q lemon.* lempar.c parse.*
-       del /Q mkkeywordhash.* keywordhash.h
-       del /Q notasharedlib.*
-       -rmdir /Q/S .deps
-       -rmdir /Q/S .libs
-       -rmdir /Q/S quota2a
-       -rmdir /Q/S quota2b
-       -rmdir /Q/S quota2c
-       -rmdir /Q/S tsrc
-       del /Q .target_source
-       del /Q tclsqlite3.exe tclsqlite3.exp
-       del /Q testloadext.dll testloadext.exp
-       del /Q testfixture.exe testfixture.exp test.db
-       del /Q LogEst.exe fts3view.exe rollback-test.exe showdb.exe
-       del /Q showjournal.exe showstat4.exe showwal.exe speedtest1.exe
-       del /Q wordcount.exe
-       del /Q sqlite3.dll sqlite3.lib sqlite3.exp sqlite3.def
-       del /Q sqlite3.c sqlite3-*.c
-       del /Q sqlite3rc.h
-       del /Q shell.c sqlite3ext.h
-       del /Q sqlite3_analyzer.exe sqlite3_analyzer.exp sqlite3_analyzer.c
-       del /Q sqlite-*-output.vsix
-       del /Q mptester.exe
+       del /Q *.exp *.lo *.ilk *.lib *.obj *.pdb 2>NUL
+       del /Q *.cod *.da *.bb *.bbg gmon.out 2>NUL
+       del /Q sqlite3.h opcodes.c opcodes.h 2>NUL
+       del /Q lemon.* lempar.c parse.* 2>NUL
+       del /Q mkkeywordhash.* keywordhash.h 2>NUL
+       del /Q notasharedlib.* 2>NUL
+       -rmdir /Q/S .deps 2>NUL
+       -rmdir /Q/S .libs 2>NUL
+       -rmdir /Q/S quota2a 2>NUL
+       -rmdir /Q/S quota2b 2>NUL
+       -rmdir /Q/S quota2c 2>NUL
+       -rmdir /Q/S tsrc 2>NUL
+       del /Q .target_source 2>NUL
+       del /Q tclsqlite3.exe 2>NUL
+       del /Q testloadext.dll 2>NUL
+       del /Q testfixture.exe test.db 2>NUL
+       del /Q LogEst.exe fts3view.exe rollback-test.exe showdb.exe 2>NUL
+       del /Q showjournal.exe showstat4.exe showwal.exe speedtest1.exe 2>NUL
+       del /Q mptester.exe wordcount.exe 2>NUL
+       del /Q sqlite3.exe sqlite3.dll sqlite3.def 2>NUL
+       del /Q sqlite3.c sqlite3-*.c 2>NUL
+       del /Q sqlite3rc.h 2>NUL
+       del /Q shell.c sqlite3ext.h 2>NUL
+       del /Q sqlite3_analyzer.exe sqlite3_analyzer.c 2>NUL
+       del /Q sqlite-*-output.vsix 2>NUL
 
 # Dynamic link library section.
 #
@@ -1547,5 +1661,5 @@ sqlite3.def: libsqlite3.lib
                | $(NAWK) "/ 1 _?sqlite3_/ { sub(/^.* _?/,\"\");print }" \
                | sort >> sqlite3.def
 
-sqlite3.dll: $(LIBOBJ) $(LIBRESOBJS) sqlite3.def
-       $(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL /DEF:sqlite3.def /OUT:$@ $(LIBOBJ) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
+sqlite3.dll: $(LIBOBJ) $(LIBRESOBJS) $(CORE_LINK_DEP)
+       $(LD) $(LDFLAGS) $(LTLINKOPTS) $(LTLIBPATHS) /DLL $(CORE_LINK_OPTS) /OUT:$@ $(LIBOBJ) $(LIBRESOBJS) $(LTLIBS) $(TLIBS)
index 09294bc45a627e350f841d37cde96677bc502425..39cb70ec8e209e611e4ee917808c937c65c3bd7d 100644 (file)
@@ -1625,7 +1625,7 @@ int sqlite3Fts3SegReaderNew(
 ** an array of pending terms by term. This occurs as part of flushing
 ** the contents of the pending-terms hash table to the database.
 */
-static int fts3CompareElemByTerm(const void *lhs, const void *rhs){
+static int SQLITE_CDECL fts3CompareElemByTerm(const void *lhs, const void *rhs){
   char *z1 = fts3HashKey(*(Fts3HashElem **)lhs);
   char *z2 = fts3HashKey(*(Fts3HashElem **)rhs);
   int n1 = fts3HashKeysize(*(Fts3HashElem **)lhs);
index 1f23a87d905d079bf00659e27e84532d0f7dee47..7f7853ebc35527817537df9e6cd0a12246caf8a1 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,9 +1,9 @@
-C Version\s3.8.8.3
-D 2015-02-25T13:29:11.692
+C Backport\sthe\s'stdcall'\srelated\senhancements\sfrom\strunk.
+D 2015-03-25T00:09:44.052
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 5407a688f4d77a05c18a8142be8ae5a2829dd610
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
-F Makefile.msc 4c057774e6138b9023fc16ec05639ddd3329b152
+F Makefile.msc 417530abef2e2a63b35dfc3ae49e5bbd967eac87
 F Makefile.vxworks e1b65dea203f054e71653415bd8f96dcaed47858
 F README.md d58e3bebc0a4145e0f2a87994015fdb575a8e866
 F VERSION 0de46a30a2d0a7a6a686fd35186fbad0ac06ff71
@@ -96,7 +96,7 @@ F ext/fts3/fts3_tokenizer.h 64c6ef6c5272c51ebe60fc607a896e84288fcbc3
 F ext/fts3/fts3_tokenizer1.c 5c98225a53705e5ee34824087478cf477bdb7004
 F ext/fts3/fts3_unicode.c a93f5edc0aff44ef8b06d7cb55b52026541ca145
 F ext/fts3/fts3_unicode2.c c3d01968d497bd7001e7dc774ba75b372738c057
-F ext/fts3/fts3_write.c 9b3a32cbecf40a1f41cb08c00df8c066c23c7a25
+F ext/fts3/fts3_write.c 5dc59cb435ed5b1f72459e5544f6854a928112e7
 F ext/fts3/fts3speed.tcl b54caf6a18d38174f1a6e84219950d85e98bb1e9
 F ext/fts3/mkfts3amal.tcl 252ecb7fe6467854f2aa237bf2c390b74e71f100
 F ext/fts3/tool/fts3view.c 3986531f2fc0ceca0c89c31ec7d0589b6adb19d6
@@ -230,8 +230,8 @@ F src/random.c ba2679f80ec82c4190062d756f22d0c358180696
 F src/resolve.c f6c46d3434439ab2084618d603e6d6dbeb0d6ada
 F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e
 F src/select.c a4e8fda24c8eab2682a058bdda0d5d68cfe3919c
-F src/shell.c ee1a80bf2b0e9e0c2b93db8f0f82b841289b2641
-F src/sqlite.h.in 9dfc99d6533d36d6a549c4f3f01cacc8be956ada
+F src/shell.c 786d96e055595d598e936e63622e82f87255dac8
+F src/sqlite.h.in eb8ab2878a39c650e9cf44dfc7b05b5a00b3c5cf
 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad
 F src/sqlite3ext.h 17d487c3c91b0b8c584a32fbeb393f6f795eea7d
 F src/sqliteInt.h eaf210295b551d4e40e622aec1b2261c0b28f844
@@ -1185,7 +1185,7 @@ F test/without_rowid6.test deddb78ef539c355bddec00cdfaea6c56efd8b3f
 F test/wordcount.c 9915e06cb33d8ca8109b8700791afe80d305afda
 F test/zeroblob.test caaecfb4f908f7bc086ed238668049f96774d688
 F test/zerodamage.test cf6748bad89553cc1632be51a6f54e487e4039ac
-F tool/build-all-msvc.bat a0534c971b86fe95f1983f445db5b896d3394818 x
+F tool/build-all-msvc.bat 72e05bc8deca39a547884485c086b915f50a91ed x
 F tool/build-shell.sh 950f47c6174f1eea171319438b93ba67ff5bf367
 F tool/checkSpacing.c 810e51703529a204fc4e1eb060e9ab663e3c06d2
 F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b
@@ -1203,9 +1203,9 @@ F tool/mkkeywordhash.c dfff09dbbfaf950e89af294f48f902181b144670
 F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e
 F tool/mkpragmatab.tcl 07a5124cf2dbafa1b375eefcf8ac4227028b0f8b
 F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97
-F tool/mksqlite3c-noext.tcl 9ef48e1748dce7b844f67e2450ff9dfeb0fb4ab5
-F tool/mksqlite3c.tcl cfde806851c413db7689b9cb74a4eeb92539c601
-F tool/mksqlite3h.tcl ba24038056f51fde07c0079c41885ab85e2cff12
+F tool/mksqlite3c-noext.tcl 98e112237c36c31d8e054c6fa7bbba207850b6d6
+F tool/mksqlite3c.tcl 5f57fd1d01f78a37549fb99ae4f6543d69141dcf
+F tool/mksqlite3h.tcl 44730d586c9031638cdd2eb443b801c0d2dbd9f8
 F tool/mksqlite3internalh.tcl eb994013e833359137eb53a55acdad0b5ae1049b
 F tool/mkvsix.tcl 52a4c613707ac34ae9c226e5ccc69cb948556105
 F tool/offsets.c fe4262fdfa378e8f5499a42136d17bf3b98f6091
@@ -1237,10 +1237,10 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P ec27ab0eb3a1ee08a73dda23d2a0f9fb70962745
-R 7a9d6545656b7d4fe08d198e32a78d62
-T +bgcolor * #d0c0ff
-T +sym-release *
-T +sym-version-3.8.8.3 *
-U drh
-Z 9dbdbd01efd2c5089344e2a1709c163b
+P 9d6c1880fb75660bbabd693175579529785f8a6b
+R 04e924db808653f423bb10222a2f5af0
+T *branch * stdcall
+T *sym-stdcall *
+T -sym-branch-3.8.8 *
+U mistachkin
+Z 651b023c24d6c190166dc0205066f55f
index cd418fdb7f40775ab4d7a6c20ac48ece510bac59..a18110437242724daf627e3b59c844a8bab8bb8a 100644 (file)
@@ -1 +1 @@
-9d6c1880fb75660bbabd693175579529785f8a6b
\ No newline at end of file
+cbb93d1aa1f992f17f76fd71fe9a99e03082f103
\ No newline at end of file
index 02c27f403a4fa284cfb6cd5efe51700e480a40ea..e7affd8698e398d2352eb6e48a41cd80d0b8553b 100644 (file)
@@ -2106,7 +2106,7 @@ static void import_append_char(ImportCtx *p, int c){
 **      EOF on end-of-file.
 **   +  Report syntax errors on stderr
 */
-static char *csv_read_one_field(ImportCtx *p){
+static char *SQLITE_CDECL csv_read_one_field(ImportCtx *p){
   int c;
   int cSep = p->cColSep;
   int rSep = p->cRowSep;
@@ -2180,7 +2180,7 @@ static char *csv_read_one_field(ImportCtx *p){
 **      EOF on end-of-file.
 **   +  Report syntax errors on stderr
 */
-static char *ascii_read_one_field(ImportCtx *p){
+static char *SQLITE_CDECL ascii_read_one_field(ImportCtx *p){
   int c;
   int cSep = p->cColSep;
   int rSep = p->cRowSep;
@@ -2759,8 +2759,8 @@ static int do_meta_command(char *zLine, ShellState *p){
     int nSep;                   /* Number of bytes in p->colSeparator[] */
     char *zSql;                 /* An SQL statement */
     ImportCtx sCtx;             /* Reader context */
-    char *(*xRead)(ImportCtx*); /* Procedure to read one value */
-    int (*xCloser)(FILE*);      /* Procedure to close th3 connection */
+    char *(SQLITE_CDECL *xRead)(ImportCtx*); /* Func to read one value */
+    int (SQLITE_CDECL *xCloser)(FILE*);      /* Func to close file */
 
     if( nArg!=3 ){
       fprintf(stderr, "Usage: .import FILE TABLE\n");
@@ -4178,7 +4178,7 @@ static char *cmdline_option_value(int argc, char **argv, int i){
   return argv[i];
 }
 
-int main(int argc, char **argv){
+int SQLITE_CDECL main(int argc, char **argv){
   char *zErrMsg = 0;
   ShellState data;
   const char *zInitFile = 0;
index f2e802eb0053499d48d86eab7414048f6f4c4e59..21a8009d261f43ba7750ebf605d370d59e9d0112 100644 (file)
@@ -43,11 +43,20 @@ extern "C" {
 
 
 /*
-** Add the ability to override 'extern'
+** Provide the ability to override linkage features of the interface.
 */
 #ifndef SQLITE_EXTERN
 # define SQLITE_EXTERN extern
 #endif
+#ifndef SQLITE_API
+# define SQLITE_API
+#endif
+#ifndef SQLITE_CDECL
+# define SQLITE_CDECL
+#endif
+#ifndef SQLITE_STDCALL
+# define SQLITE_STDCALL
+#endif
 
 /*
 ** These no-op macros are used in front of interfaces to mark those
index 1fb61d4df8feeac6d90fece6c4518e7983d9354d..728183629b5bc4d0abe1ebeed52f7dd433e8905a 100755 (executable)
@@ -58,6 +58,9 @@ IF NOT DEFINED _AECHO (SET _AECHO=REM)
 IF NOT DEFINED _CECHO (SET _CECHO=REM)\r
 IF NOT DEFINED _VECHO (SET _VECHO=REM)\r
 \r
+SET REDIRECT=^>\r
+IF DEFINED __ECHO SET REDIRECT=^^^>\r
+\r
 %_AECHO% Running %0 %*\r
 \r
 REM SET DFLAGS=/L\r
@@ -318,7 +321,18 @@ FOR %%P IN (%PLATFORMS%) DO (
       %_AECHO% Building the %%B configuration for platform %%P with name %%D...\r
 \r
       IF /I "%%B" == "Debug" (\r
-        SET DEBUG=2\r
+        REM\r
+        REM NOTE: Using this level for the DEBUG environment variable should\r
+        REM       disable all compiler optimizations and prevent use of the\r
+        REM       NDEBUG define.  Additionally, both SQLITE_ENABLE_API_ARMOR\r
+        REM       and SQLITE_DEBUG defines should be enabled.\r
+        REM\r
+        SET DEBUG=3\r
+\r
+        REM\r
+        REM NOTE: Setting this to non-zero should enable the SQLITE_MEMDEBUG\r
+        REM       define.\r
+        REM\r
         SET MEMDEBUG=1\r
       ) ELSE (\r
         CALL :fn_UnsetVariable DEBUG\r
@@ -420,11 +434,11 @@ FOR %%P IN (%PLATFORMS%) DO (
         ) ELSE (\r
           REM\r
           REM NOTE: Even when the cleaning step has been disabled, we still\r
-          REM       need to remove the build output for the files we are\r
+          REM       need to remove the build output for all the files we are\r
           REM       specifically wanting to build for each platform.\r
           REM\r
-          %_AECHO% Cleaning final output files only...\r
-          %__ECHO% DEL /Q *.lo sqlite3.dll sqlite3.lib sqlite3.pdb\r
+          %_AECHO% Cleaning final core library output files only...\r
+          %__ECHO% DEL /Q *.lo sqlite3.dll sqlite3.lib sqlite3.pdb 2%REDIRECT% NUL\r
         )\r
 \r
         REM\r
@@ -476,6 +490,64 @@ FOR %%P IN (%PLATFORMS%) DO (
             GOTO errors\r
           )\r
         )\r
+\r
+        REM\r
+        REM NOTE: If requested, also build the shell executable.\r
+        REM\r
+        IF DEFINED BUILD_ALL_SHELL (\r
+          REM\r
+          REM NOTE: If necessary, make sure any previous build output for the\r
+          REM       shell executable is deleted.\r
+          REM\r
+          IF DEFINED NOCLEAN (\r
+            REM\r
+            REM NOTE: Even when the cleaning step has been disabled, we still\r
+            REM       need to remove the build output for all the files we are\r
+            REM       specifically wanting to build for each platform.\r
+            REM\r
+            %_AECHO% Cleaning final shell executable output files only...\r
+            %__ECHO% DEL /Q sqlite3.exe sqlite3sh.pdb 2%REDIRECT% NUL\r
+          )\r
+\r
+          REM\r
+          REM NOTE: Call NMAKE with the MSVC makefile to build the "sqlite3.exe"\r
+          REM       binary.  The x86 compiler will be used to compile the native\r
+          REM       command line tools needed during the build process itself.\r
+          REM       Also, disable looking for and/or linking to the native Tcl\r
+          REM       runtime library.\r
+          REM\r
+          %__ECHO% %NMAKE_CMD% sqlite3.exe XCOMPILE=1 USE_NATIVE_LIBPATHS=1 NO_TCL=1 %NMAKE_ARGS%\r
+\r
+          IF ERRORLEVEL 1 (\r
+            ECHO Failed to build %%B "sqlite3.exe" for platform %%P.\r
+            GOTO errors\r
+          )\r
+\r
+          REM\r
+          REM NOTE: Copy the "sqlite3.exe" file to the appropriate directory\r
+          REM       for the build and platform beneath the binary directory.\r
+          REM\r
+          %__ECHO% XCOPY sqlite3.exe "%BINARYDIRECTORY%\%%B\%%D\" %FFLAGS% %DFLAGS%\r
+\r
+          IF ERRORLEVEL 1 (\r
+            ECHO Failed to copy "sqlite3.exe" to "%BINARYDIRECTORY%\%%B\%%D\".\r
+            GOTO errors\r
+          )\r
+\r
+          REM\r
+          REM NOTE: Copy the "sqlite3sh.pdb" file to the appropriate directory\r
+          REM       for the build and platform beneath the binary directory\r
+          REM       unless we are prevented from doing so.\r
+          REM\r
+          IF NOT DEFINED NOSYMBOLS (\r
+            %__ECHO% XCOPY sqlite3sh.pdb "%BINARYDIRECTORY%\%%B\%%D\" %FFLAGS% %DFLAGS%\r
+\r
+            IF ERRORLEVEL 1 (\r
+              ECHO Failed to copy "sqlite3sh.pdb" to "%BINARYDIRECTORY%\%%B\%%D\".\r
+              GOTO errors\r
+            )\r
+          )\r
+        )\r
       )\r
     )\r
   )\r
index 27522265bb015e499a56742e4652a1ec7ba82746..d813941eb73c1ec0bedde839aadfa3147eb61d67 100644 (file)
 # After the "tsrc" directory has been created and populated, run
 # this script:
 #
-#      tclsh mksqlite3c.tcl
+#      tclsh mksqlite3c-noext.tcl
 #
 # The amalgamated SQLite code will be written into sqlite3.c
 #
 
 # Begin by reading the "sqlite3.h" header file.  Extract the version number
-# from in this file.  The versioon number is needed to generate the header
+# from in this file.  The version number is needed to generate the header
 # comment of the amalgamation.
 #
 if {[lsearch $argv --nostatic]>=0} {
@@ -80,9 +80,6 @@ if {$addstatic} {
   puts $out \
 {#ifndef SQLITE_PRIVATE
 # define SQLITE_PRIVATE static
-#endif
-#ifndef SQLITE_API
-# define SQLITE_API
 #endif}
 }
 
@@ -114,11 +111,29 @@ foreach hdr {
    vdbe.h
    vdbeInt.h
    wal.h
+   whereInt.h
 } {
   set available_hdr($hdr) 1
 }
 set available_hdr(sqliteInt.h) 0
 
+# These headers should be copied into the amalgamation without modifying any
+# of their function declarations or definitions.
+set varonly_hdr(sqlite3.h) 1
+
+# These are the functions that accept a variable number of arguments.  They
+# always need to use the "cdecl" calling convention even when another calling
+# convention (e.g. "stcall") is being used for the rest of the library.
+set cdecllist {
+  sqlite3_config
+  sqlite3_db_config
+  sqlite3_log
+  sqlite3_mprintf
+  sqlite3_snprintf
+  sqlite3_test_control
+  sqlite3_vtab_config
+}
+
 # 78 stars used for comment formatting.
 set s78 \
 {*****************************************************************************}
@@ -135,21 +150,21 @@ proc section_comment {text} {
 
 # Read the source file named $filename and write it into the
 # sqlite3.c output file.  If any #include statements are seen,
-# process them approprately.
+# process them appropriately.
 #
 proc copy_file {filename} {
-  global seen_hdr available_hdr out addstatic linemacros
+  global seen_hdr available_hdr varonly_hdr cdecllist out addstatic linemacros
   set ln 0
   set tail [file tail $filename]
   section_comment "Begin file $tail"
   if {$linemacros} {puts $out "#line 1 \"$filename\""}
   set in [open $filename r]
   set varpattern {^[a-zA-Z][a-zA-Z_0-9 *]+(sqlite3[_a-zA-Z0-9]+)(\[|;| =)}
-  set declpattern {[a-zA-Z][a-zA-Z_0-9 ]+ \**(sqlite3[_a-zA-Z0-9]+)\(}
+  set declpattern {([a-zA-Z][a-zA-Z_0-9 ]+ \**)(sqlite3[_a-zA-Z0-9]+)(\(.*)}
   if {[file extension $filename]==".h"} {
     set declpattern " *$declpattern"
   }
-  set declpattern ^$declpattern
+  set declpattern ^$declpattern\$
   while {![eof $in]} {
     set line [gets $in]
     incr ln
@@ -165,42 +180,67 @@ proc copy_file {filename} {
           if {$linemacros} {puts $out "#line [expr {$ln+1}] \"$filename\""}
         }
       } elseif {![info exists seen_hdr($hdr)]} {
-        set seen_hdr($hdr) 1
+        if {![regexp {/\*\s+amalgamator:\s+dontcache\s+\*/} $line]} {
+          set seen_hdr($hdr) 1
+        }
+        puts $out $line
+      } elseif {[regexp {/\*\s+amalgamator:\s+keep\s+\*/} $line]} {
+        # This include file must be kept because there was a "keep"
+        # directive inside of a line comment.
         puts $out $line
       } else {
-        puts $out "/* $line */"
+        # Comment out the entire line, replacing any nested comment
+        # begin/end markers with the harmless substring "**".
+        puts $out "/* [string map [list /* ** */ **] $line] */"
       }
     } elseif {[regexp {^#ifdef __cplusplus} $line]} {
       puts $out "#if 0"
     } elseif {!$linemacros && [regexp {^#line} $line]} {
       # Skip #line directives.
     } elseif {$addstatic && ![regexp {^(static|typedef)} $line]} {
-      regsub {^SQLITE_API } $line {} line
-      if {[regexp $declpattern $line all funcname]} {
+      # Skip adding the SQLITE_PRIVATE or SQLITE_API keyword before
+      # functions if this header file does not need it.
+      if {![info exists varonly_hdr($tail)]
+       && [regexp $declpattern $line all rettype funcname rest]} {
+        regsub {^SQLITE_API } $line {} line
         # Add the SQLITE_PRIVATE or SQLITE_API keyword before functions.
         # so that linkage can be modified at compile-time.
         if {[regexp {^sqlite3_} $funcname]} {
-          puts $out "SQLITE_API $line"
+          set line SQLITE_API
+          append line " " [string trim $rettype]
+          if {[string index $rettype end] ne "*"} {
+            append line " "
+          }
+          if {[lsearch -exact $cdecllist $funcname] >= 0} {
+            append line SQLITE_CDECL
+          } else {
+            append line SQLITE_STDCALL
+          }
+          append line " " $funcname $rest
+          puts $out $line
         } else {
           puts $out "SQLITE_PRIVATE $line"
         }
       } elseif {[regexp $varpattern $line all varname]} {
-        # Add the SQLITE_PRIVATE before variable declarations or
-        # definitions for internal use
-        if {![regexp {^sqlite3_} $varname]} {
-          regsub {^extern } $line {} line
-          puts $out "SQLITE_PRIVATE $line"
-        } else {
-          if {[regexp {const char sqlite3_version\[\];} $line]} {
-            set line {const char sqlite3_version[] = SQLITE_VERSION;}
+          # Add the SQLITE_PRIVATE before variable declarations or
+          # definitions for internal use
+          regsub {^SQLITE_API } $line {} line
+          if {![regexp {^sqlite3_} $varname]} {
+            regsub {^extern } $line {} line
+            puts $out "SQLITE_PRIVATE $line"
+          } else {
+            if {[regexp {const char sqlite3_version\[\];} $line]} {
+              set line {const char sqlite3_version[] = SQLITE_VERSION;}
+            }
+            regsub {^SQLITE_EXTERN } $line {} line
+            puts $out "SQLITE_API $line"
           }
-          regsub {^SQLITE_EXTERN } $line {} line
-          puts $out "SQLITE_API $line"
-        }
       } elseif {[regexp {^(SQLITE_EXTERN )?void \(\*sqlite3IoTrace\)} $line]} {
+        regsub {^SQLITE_API } $line {} line
         regsub {^SQLITE_EXTERN } $line {} line
-        puts $out "SQLITE_PRIVATE $line"
+        puts $out $line
       } elseif {[regexp {^void \(\*sqlite3Os} $line]} {
+        regsub {^SQLITE_API } $line {} line
         puts $out "SQLITE_PRIVATE $line"
       } else {
         puts $out $line
index 1d597a51a09a27d987eb918203340024f41817e3..4b9955866890af604ed7ef3336a3f89aa22c614e 100644 (file)
@@ -80,9 +80,6 @@ if {$addstatic} {
   puts $out \
 {#ifndef SQLITE_PRIVATE
 # define SQLITE_PRIVATE static
-#endif
-#ifndef SQLITE_API
-# define SQLITE_API
 #endif}
 }
 
@@ -125,6 +122,23 @@ foreach hdr {
 }
 set available_hdr(sqliteInt.h) 0
 
+# These headers should be copied into the amalgamation without modifying any
+# of their function declarations or definitions.
+set varonly_hdr(sqlite3.h) 1
+
+# These are the functions that accept a variable number of arguments.  They
+# always need to use the "cdecl" calling convention even when another calling
+# convention (e.g. "stcall") is being used for the rest of the library.
+set cdecllist {
+  sqlite3_config
+  sqlite3_db_config
+  sqlite3_log
+  sqlite3_mprintf
+  sqlite3_snprintf
+  sqlite3_test_control
+  sqlite3_vtab_config
+}
+
 # 78 stars used for comment formatting.
 set s78 \
 {*****************************************************************************}
@@ -144,18 +158,18 @@ proc section_comment {text} {
 # process them appropriately.
 #
 proc copy_file {filename} {
-  global seen_hdr available_hdr out addstatic linemacros
+  global seen_hdr available_hdr varonly_hdr cdecllist out addstatic linemacros
   set ln 0
   set tail [file tail $filename]
   section_comment "Begin file $tail"
   if {$linemacros} {puts $out "#line 1 \"$filename\""}
   set in [open $filename r]
   set varpattern {^[a-zA-Z][a-zA-Z_0-9 *]+(sqlite3[_a-zA-Z0-9]+)(\[|;| =)}
-  set declpattern {[a-zA-Z][a-zA-Z_0-9 ]+ \**(sqlite3[_a-zA-Z0-9]+)\(}
+  set declpattern {([a-zA-Z][a-zA-Z_0-9 ]+ \**)(sqlite3[_a-zA-Z0-9]+)(\(.*)}
   if {[file extension $filename]==".h"} {
     set declpattern " *$declpattern"
   }
-  set declpattern ^$declpattern
+  set declpattern ^$declpattern\$
   while {![eof $in]} {
     set line [gets $in]
     incr ln
@@ -189,32 +203,49 @@ proc copy_file {filename} {
     } elseif {!$linemacros && [regexp {^#line} $line]} {
       # Skip #line directives.
     } elseif {$addstatic && ![regexp {^(static|typedef)} $line]} {
-      regsub {^SQLITE_API } $line {} line
-      if {[regexp $declpattern $line all funcname]} {
+      # Skip adding the SQLITE_PRIVATE or SQLITE_API keyword before
+      # functions if this header file does not need it.
+      if {![info exists varonly_hdr($tail)]
+       && [regexp $declpattern $line all rettype funcname rest]} {
+        regsub {^SQLITE_API } $line {} line
         # Add the SQLITE_PRIVATE or SQLITE_API keyword before functions.
         # so that linkage can be modified at compile-time.
         if {[regexp {^sqlite3_} $funcname]} {
-          puts $out "SQLITE_API $line"
+          set line SQLITE_API
+          append line " " [string trim $rettype]
+          if {[string index $rettype end] ne "*"} {
+            append line " "
+          }
+          if {[lsearch -exact $cdecllist $funcname] >= 0} {
+            append line SQLITE_CDECL
+          } else {
+            append line SQLITE_STDCALL
+          }
+          append line " " $funcname $rest
+          puts $out $line
         } else {
           puts $out "SQLITE_PRIVATE $line"
         }
       } elseif {[regexp $varpattern $line all varname]} {
-        # Add the SQLITE_PRIVATE before variable declarations or
-        # definitions for internal use
-        if {![regexp {^sqlite3_} $varname]} {
-          regsub {^extern } $line {} line
-          puts $out "SQLITE_PRIVATE $line"
-        } else {
-          if {[regexp {const char sqlite3_version\[\];} $line]} {
-            set line {const char sqlite3_version[] = SQLITE_VERSION;}
+          # Add the SQLITE_PRIVATE before variable declarations or
+          # definitions for internal use
+          regsub {^SQLITE_API } $line {} line
+          if {![regexp {^sqlite3_} $varname]} {
+            regsub {^extern } $line {} line
+            puts $out "SQLITE_PRIVATE $line"
+          } else {
+            if {[regexp {const char sqlite3_version\[\];} $line]} {
+              set line {const char sqlite3_version[] = SQLITE_VERSION;}
+            }
+            regsub {^SQLITE_EXTERN } $line {} line
+            puts $out "SQLITE_API $line"
           }
-          regsub {^SQLITE_EXTERN } $line {} line
-          puts $out "SQLITE_API $line"
-        }
       } elseif {[regexp {^(SQLITE_EXTERN )?void \(\*sqlite3IoTrace\)} $line]} {
+        regsub {^SQLITE_API } $line {} line
         regsub {^SQLITE_EXTERN } $line {} line
         puts $out $line
       } elseif {[regexp {^void \(\*sqlite3Os} $line]} {
+        regsub {^SQLITE_API } $line {} line
         puts $out "SQLITE_PRIVATE $line"
       } else {
         puts $out $line
index a89b9f9beb0df39ff4123108212e1072786b763f..cabce1f50b7e053a7771c4af395678bf607d6cc1 100644 (file)
@@ -63,7 +63,7 @@ close $in
 # Set up patterns for recognizing API declarations.
 #
 set varpattern {^[a-zA-Z][a-zA-Z_0-9 *]+sqlite3_[_a-zA-Z0-9]+(\[|;| =)}
-set declpattern {^ *[a-zA-Z][a-zA-Z_0-9 ]+ \**sqlite3_[_a-zA-Z0-9]+\(}
+set declpattern {^ *([a-zA-Z][a-zA-Z_0-9 ]+ \**)(sqlite3_[_a-zA-Z0-9]+)(\(.*)$}
 
 # Force the output to use unix line endings, even on Windows.
 fconfigure stdout -translation lf
@@ -73,6 +73,19 @@ set filelist [subst {
   $TOP/ext/rtree/sqlite3rtree.h
 }]
 
+# These are the functions that accept a variable number of arguments.  They
+# always need to use the "cdecl" calling convention even when another calling
+# convention (e.g. "stcall") is being used for the rest of the library.
+set cdecllist {
+  sqlite3_config
+  sqlite3_db_config
+  sqlite3_log
+  sqlite3_mprintf
+  sqlite3_snprintf
+  sqlite3_test_control
+  sqlite3_vtab_config
+}
+
 # Process the source files.
 #
 foreach file $filelist {
@@ -89,21 +102,23 @@ foreach file $filelist {
     regsub -- --VERS--           $line $zVersion line
     regsub -- --VERSION-NUMBER-- $line $nVersion line
     regsub -- --SOURCE-ID--      $line "$zDate $zUuid" line
-  
-    if {[regexp {define SQLITE_EXTERN extern} $line]} {
-      puts $line
-      puts [gets $in]
-      puts ""
-      puts "#ifndef SQLITE_API"
-      puts "# define SQLITE_API"
-      puts "#endif"
-      set line ""
-    }
-  
-    if {([regexp $varpattern $line] && ![regexp {^ *typedef} $line])
-     || ([regexp $declpattern $line])
-    } {
+
+    if {[regexp $varpattern $line] && ![regexp {^ *typedef} $line]} {
       set line "SQLITE_API $line"
+    } else {
+      if {[regexp $declpattern $line all rettype funcname rest]} {
+        set line SQLITE_API
+        append line " " [string trim $rettype]
+        if {[string index $rettype end] ne "*"} {
+          append line " "
+        }
+        if {[lsearch -exact $cdecllist $funcname] >= 0} {
+          append line SQLITE_CDECL
+        } else {
+          append line SQLITE_STDCALL
+        }
+        append line " " $funcname $rest
+      }
     }
     puts $line
   }