diff options
Diffstat (limited to 'lang/sql/odbc/mingw64-cross-build.sh')
| -rw-r--r-- | lang/sql/odbc/mingw64-cross-build.sh | 1705 |
1 files changed, 1705 insertions, 0 deletions
diff --git a/lang/sql/odbc/mingw64-cross-build.sh b/lang/sql/odbc/mingw64-cross-build.sh new file mode 100644 index 00000000..ffff00ad --- /dev/null +++ b/lang/sql/odbc/mingw64-cross-build.sh @@ -0,0 +1,1705 @@ +#!/bin/sh +# +# Build script for cross compiling and packaging SQLite 3 +# ODBC drivers and tools for Win32 using MinGW and NSIS. +# Tested on Fedora Core 3/5/8, Debian Etch, RHEL 5/6. +# +# Cross toolchain and NSIS for Linux/i386/x86_64 can be fetched from +# http://www.ch-werner.de/xtools/crossmingw64-0.3-1.i386.rpm +# http://www.ch-werner.de/xtools/crossmingw64-0.3-1.x86_64.rpm +# http://www.ch-werner.de/xtools/nsis-2.37-1.i386.rpm +# or +# http://www.ch-werner.de/xtools/crossmingw64-0.3.i386.tar.bz2 +# http://www.ch-werner.de/xtools/crossmingw64-0.3.x86_64.tar.bz2 +# http://www.ch-werner.de/xtools/nsis-2.37-1_i386.tar.gz + +# Some aspects of the build process can be controlled by shell variables: +# +# NO_SQLITE2=1 omit building SQLite 2 and drivers for it +# SQLITE_DLLS=1 build and package driver with sqlite3.dll +# SQLITE_DLLS=2 build driver with refs to sqlite3.dll +# driver can use System.Data.SQLite.dll instead + +set -e + +VER2=2.8.17 +VER3=3.8.2 +VER3X=3080200 +VERZ=1.2.7 + +nov2=false +if test -n "$NO_SQLITE2" ; then + nov2=true + ADD_NSIS="-DWITHOUT_SQLITE2" +fi + +if test -f "$WITH_SEE" ; then + export SEEEXT=see + ADD_NSIS="-DWITH_SEE=$SEEEXT" + if test "$SQLITE_DLLS" = "2" ; then + SQLITE_DLLS=1 + fi +fi + +if test "$SQLITE_DLLS" = "2" ; then + # turn on -DSQLITE_DYNLOAD in sqlite3odbc.c + export ADD_CFLAGS="-DWITHOUT_SHELL=1 -DWITH_SQLITE_DLLS=2" + ADD_NSIS="$ADD_NSIS -DWITHOUT_SQLITE3_EXE" +elif test -n "$SQLITE_DLLS" ; then + export ADD_CFLAGS="-DWITHOUT_SHELL=1 -DWITH_SQLITE_DLLS=1" + export SQLITE3_DLL="-Lsqlite3 -lsqlite3" + export SQLITE3_EXE="sqlite3.exe" + ADD_NSIS="$ADD_NSIS -DWITH_SQLITE_DLLS" +else + export SQLITE3_A10N_O="sqlite3a10n.o" + export SQLITE3_EXE="sqlite3.exe" +fi + +if test -n "$WITH_SOURCES" ; then + ADD_NSIS="$ADD_NSIS -DWITH_SOURCES" +fi + +echo "==================" +echo "Preparing zlib ..." +echo "==================" +test -r zlib-${VERZ}.tar.gz || \ + wget -c http://zlib.net/zlib-${VERZ}.tar.gz || exit 1 +rm -rf zlib-${VERZ} +tar xzf zlib-${VERZ}.tar.gz +ln -sf zlib-${VERZ} zlib + +echo "====================" +echo "Preparing sqlite ..." +echo "====================" +( $nov2 && echo '*** skipped (NO_SQLITE2)' ) || true +$nov2 || test -r sqlite-${VER2}.tar.gz || \ + wget -c https://www.sqlite.org/sqlite-${VER2}.tar.gz \ + --no-check-certificate +$nov2 || test -r sqlite-${VER2}.tar.gz || exit 1 + +$nov2 || rm -f sqlite +$nov2 || tar xzf sqlite-${VER2}.tar.gz +$nov2 || ln -sf sqlite-${VER2} sqlite + +# enable sqlite_encode_binary et.al. +$nov2 || patch sqlite/main.mk <<'EOD' +--- sqlite.orig/main.mk 2005-04-24 00:43:23.000000000 +0200 ++++ sqlite/main.mk 2006-03-16 14:29:55.000000000 +0100 +@@ -55,7 +55,7 @@ + # Object files for the SQLite library. + # + LIBOBJ = attach.o auth.o btree.o btree_rb.o build.o copy.o date.o delete.o \ +- expr.o func.o hash.o insert.o \ ++ expr.o func.o hash.o insert.o encode.o \ + main.o opcodes.o os.o pager.o parse.o pragma.o printf.o random.o \ + select.o table.o tokenize.o trigger.o update.o util.o \ + vacuum.o vdbe.o vdbeaux.o where.o tclsqlite.o +EOD + +# display encoding +$nov2 || patch sqlite/src/shell.c <<'EOD' +--- sqlite.orig/src/shell.c 2005-04-24 00:43:22.000000000 +0200 ++++ sqlite/src/shell.c 2006-05-23 08:22:01.000000000 +0200 +@@ -1180,6 +1180,7 @@ + " -separator 'x' set output field separator (|)\n" + " -nullvalue 'text' set text string for NULL values\n" + " -version show SQLite version\n" ++ " -encoding show SQLite encoding\n" + " -help show this text, also show dot-commands\n" + ; + static void usage(int showDetail){ +@@ -1297,7 +1298,10 @@ + }else if( strcmp(z,"-echo")==0 ){ + data.echoOn = 1; + }else if( strcmp(z,"-version")==0 ){ +- printf("%s\n", sqlite_version); ++ printf("%s\n", sqlite_libversion()); ++ return 1; ++ }else if( strcmp(z,"-encoding")==0 ){ ++ printf("%s\n", sqlite_libencoding()); + return 1; + }else if( strcmp(z,"-help")==0 ){ + usage(1); +@@ -1330,9 +1334,9 @@ + char *zHome; + char *zHistory = 0; + printf( +- "SQLite version %s\n" ++ "SQLite version %s encoding %s\n" + "Enter \".help\" for instructions\n", +- sqlite_version ++ sqlite_libversion(), sqlite_libencoding() + ); + zHome = find_home_dir(); + if( zHome && (zHistory = malloc(strlen(zHome)+20))!=0 ){ +EOD + +# use open file dialog when no database name given +# need to link with -lcomdlg32 when enabled +true || patch sqlite/src/shell.c <<'EOD' +--- sqlite.orig/src/shell.c 2006-07-23 11:18:13.000000000 +0200 ++++ sqlite/src/shell.c 2006-07-23 11:30:26.000000000 +0200 +@@ -20,6 +20,10 @@ + #include "sqlite.h" + #include <ctype.h> + ++#if defined(_WIN32) && defined(DRIVER_VER_INFO) ++# include <windows.h> ++#endif ++ + #if !defined(_WIN32) && !defined(WIN32) && !defined(__MACOS__) + # include <signal.h> + # include <pwd.h> +@@ -1246,6 +1250,17 @@ + if( i<argc ){ + data.zDbFilename = argv[i++]; + }else{ ++#if defined(_WIN32) && defined(DRIVER_VER_INFO) ++ static OPENFILENAME ofn; ++ static char zDbFn[1024]; ++ ofn.lStructSize = sizeof(ofn); ++ ofn.lpstrFile = (LPTSTR) zDbFn; ++ ofn.nMaxFile = sizeof(zDbFn); ++ ofn.Flags = OFN_PATHMUSTEXIST | OFN_EXPLORER | OFN_NOCHANGEDIR; ++ if( GetOpenFileName(&ofn) ){ ++ data.zDbFilename = zDbFn; ++ } else ++#endif + data.zDbFilename = ":memory:"; + } + if( i<argc ){ +EOD + +# same but new module libshell.c +$nov2 || patch sqlite/main.mk <<'EOD' +--- sqlite.orig/main.mk 2007-01-10 19:30:52.000000000 +0100 ++++ sqlite/main.mk 2007-01-10 19:33:39.000000000 +0100 +@@ -54,7 +54,7 @@ + + # Object files for the SQLite library. + # +-LIBOBJ = attach.o auth.o btree.o btree_rb.o build.o copy.o date.o delete.o \ ++LIBOBJ += attach.o auth.o btree.o btree_rb.o build.o copy.o date.o delete.o \ + expr.o func.o hash.o insert.o encode.o \ + main.o opcodes.o os.o pager.o parse.o pragma.o printf.o random.o \ + select.o table.o tokenize.o trigger.o update.o util.o \ +EOD +$nov2 || cp -p sqlite/src/shell.c sqlite/src/libshell.c +$nov2 || patch sqlite/src/libshell.c <<'EOD' +--- sqlite.orig/src/libshell.c 2007-01-10 19:13:01.000000000 +0100 ++++ sqlite/src/libshell.c 2007-01-10 19:25:56.000000000 +0100 +@@ -20,6 +20,10 @@ + #include "sqlite.h" + #include <ctype.h> + ++#ifdef _WIN32 ++# include <windows.h> ++#endif ++ + #if !defined(_WIN32) && !defined(WIN32) && !defined(__MACOS__) + # include <signal.h> + # include <pwd.h> +@@ -1205,7 +1209,7 @@ + strcpy(continuePrompt," ...> "); + } + +-int main(int argc, char **argv){ ++int sqlite_main(int argc, char **argv){ + char *zErrMsg = 0; + struct callback_data data; + const char *zInitFile = 0; +@@ -1246,6 +1250,17 @@ + if( i<argc ){ + data.zDbFilename = argv[i++]; + }else{ ++#if defined(_WIN32) && !defined(__TINYC__) ++ static OPENFILENAME ofn; ++ static char zDbFn[1024]; ++ ofn.lStructSize = sizeof(ofn); ++ ofn.lpstrFile = (LPTSTR) zDbFn; ++ ofn.nMaxFile = sizeof(zDbFn); ++ ofn.Flags = OFN_PATHMUSTEXIST | OFN_EXPLORER | OFN_NOCHANGEDIR; ++ if( GetOpenFileName(&ofn) ){ ++ data.zDbFilename = zDbFn; ++ } else ++#endif + data.zDbFilename = ":memory:"; + } + if( i<argc ){ +EOD + +$nov2 || rm -f sqlite/src/minshell.c +$nov2 || touch sqlite/src/minshell.c +$nov2 || patch sqlite/src/minshell.c <<'EOD' +--- sqlite.orig/src/minshell.c 2007-01-10 18:46:47.000000000 +0100 ++++ sqlite/src/minshell.c 2007-01-10 18:46:47.000000000 +0100 +@@ -0,0 +1,20 @@ ++/* ++** 2001 September 15 ++** ++** The author disclaims copyright to this source code. In place of ++** a legal notice, here is a blessing: ++** ++** May you do good and not evil. ++** May you find forgiveness for yourself and forgive others. ++** May you share freely, never taking more than you give. ++** ++************************************************************************* ++** This file contains code to implement the "sqlite" command line ++** utility for accessing SQLite databases. ++*/ ++ ++int sqlite_main(int argc, char **argv); ++ ++int main(int argc, char **argv){ ++ return sqlite_main(argc, argv); ++} +EOD + +echo "=====================" +echo "Preparing sqlite3 ..." +echo "=====================" +test -r sqlite-src-${VER3X}.zip || \ + wget -c https://www.sqlite.org/2013/sqlite-src-${VER3X}.zip \ + --no-check-certificate +test -r sqlite-src-${VER3X}.zip || exit 1 +test -r extension-functions.c || + wget -O extension-functions.c -c \ + 'https://www.sqlite.org/contrib/download/extension-functions.c?get=25' \ + --no-check-certificate +if test -r extension-functions.c ; then + cp extension-functions.c extfunc.c + patch < extfunc.patch +fi +test -r extfunc.c || exit 1 + +rm -f sqlite3 +rm -rf sqlite-src-${VER3X} +unzip sqlite-src-${VER3X}.zip +ln -sf sqlite-src-${VER3X} sqlite3 + +patch sqlite3/main.mk <<'EOD' +--- sqlite3.orig/main.mk 2007-03-31 14:32:21.000000000 +0200 ++++ sqlite3/main.mk 2007-04-02 11:04:50.000000000 +0200 +@@ -67,7 +67,7 @@ + + # All of the source code files. + # +-SRC = \ ++SRC += \ + $(TOP)/src/alter.c \ + $(TOP)/src/analyze.c \ + $(TOP)/src/attach.c \ +EOD + +# use open file dialog when no database name given +# need to link with -lcomdlg32 when enabled +true || patch sqlite3/src/shell.c <<'EOD' +--- sqlite3.orig/src/shell.c 2006-06-06 14:32:21.000000000 +0200 ++++ sqlite3/src/shell.c 2006-07-23 11:04:50.000000000 +0200 +@@ -21,6 +21,10 @@ + #include <ctype.h> + #include <stdarg.h> + ++#if defined(_WIN32) && defined(DRIVER_VER_INFO) ++# include <windows.h> ++#endif ++ + #if !defined(_WIN32) && !defined(WIN32) && !defined(__OS2__) + # include <signal.h> + # include <pwd.h> +@@ -1676,6 +1676,17 @@ + if( i<argc ){ + data.zDbFilename = argv[i++]; + }else{ ++#if defined(_WIN32) && defined(DRIVER_VER_INFO) ++ static OPENFILENAME ofn; ++ static char zDbFn[1024]; ++ ofn.lStructSize = sizeof(ofn); ++ ofn.lpstrFile = (LPTSTR) zDbFn; ++ ofn.nMaxFile = sizeof(zDbFn); ++ ofn.Flags = OFN_PATHMUSTEXIST | OFN_EXPLORER | OFN_NOCHANGEDIR; ++ if( GetOpenFileName(&ofn) ){ ++ data.zDbFilename = zDbFn; ++ } else ++#endif + #ifndef SQLITE_OMIT_MEMORYDB + data.zDbFilename = ":memory:"; + #else +EOD +# SQLite 3.5.1 Win32 mutex fix +test "$VER3" != "3.5.1" || patch sqlite3/src/mutex_w32.c <<'EOD' +--- sqlite3.orig/src/mutex_w32.c 2007-08-30 14:10:30 ++++ sqlite3/src/mutex_w32.c 2007-09-04 22:31:3 +@@ -141,6 +141,12 @@ + p->nRef++; + } + int sqlite3_mutex_try(sqlite3_mutex *p){ ++ /* The TryEnterCriticalSection() interface is not available on all ++ ** windows systems. Since sqlite3_mutex_try() is only used as an ++ ** optimization, we can skip it on windows. */ ++ return SQLITE_BUSY; ++ ++#if 0 /* Not Available */ + int rc; + assert( p ); + assert( p->id==SQLITE_MUTEX_RECURSIVE || sqlite3_mutex_notheld(p) ); +@@ -152,6 +158,7 @@ + rc = SQLITE_BUSY; + } + return rc; ++#endif + } + + /* + +EOD + +# same but new module libshell.c +cp -p sqlite3/src/shell.c sqlite3/src/libshell.c +test "$VER3" != "3.7.14" -a "$VER3" != "3.7.14.1" -a "$VER3" != "3.7.15" \ + -a "$VER3" != "3.7.15.1" -a "$VER3" != "3.7.15.2" -a "$VER3" != "3.7.16" \ + -a "$VER3" != "3.7.16.1" -a "$VER3" != "3.7.16.2" -a "$VER3" != "3.7.17" \ + -a "$VER3" != "3.8.0" -a "$VER3" != "3.8.1" -a "$VER3" != "3.8.2" \ + && patch sqlite3/src/libshell.c <<'EOD' +--- sqlite3.orig/src/libshell.c 2007-01-08 23:40:05.000000000 +0100 ++++ sqlite3/src/libshell.c 2007-01-10 18:35:43.000000000 +0100 +@@ -21,6 +21,10 @@ + #include <ctype.h> + #include <stdarg.h> + ++#ifdef _WIN32 ++# include <windows.h> ++#endif ++ + #if !defined(_WIN32) && !defined(WIN32) && !defined(__OS2__) + # include <signal.h> + # include <pwd.h> +@@ -1774,7 +1778,7 @@ + strcpy(continuePrompt," ...> "); + } + +-int main(int argc, char **argv){ ++int sqlite3_main(int argc, char **argv){ + char *zErrMsg = 0; + struct callback_data data; + const char *zInitFile = 0; +@@ -1816,6 +1820,17 @@ + if( i<argc ){ + data.zDbFilename = argv[i++]; + }else{ ++#if defined(_WIN32) && !defined(__TINYC__) ++ static OPENFILENAME ofn; ++ static char zDbFn[1024]; ++ ofn.lStructSize = sizeof(ofn); ++ ofn.lpstrFile = (LPTSTR) zDbFn; ++ ofn.nMaxFile = sizeof(zDbFn); ++ ofn.Flags = OFN_PATHMUSTEXIST | OFN_EXPLORER | OFN_NOCHANGEDIR; ++ if( GetOpenFileName(&ofn) ){ ++ data.zDbFilename = zDbFn; ++ } else ++#endif + #ifndef SQLITE_OMIT_MEMORYDB + data.zDbFilename = ":memory:"; + #else +EOD + +test "$VER3" = "3.7.14" -o "$VER3" = "3.7.14.1" \ + && patch sqlite3/src/libshell.c <<'EOD' +--- sqlite3.orig/src/libshell.c 2007-01-08 23:40:05.000000000 +0100 ++++ sqlite3/src/libshell.c 2007-01-10 18:35:43.000000000 +0100 +@@ -21,6 +21,10 @@ + #include <ctype.h> + #include <stdarg.h> + ++#ifdef _WIN32 ++# include <windows.h> ++#endif ++ + #if !defined(_WIN32) && !defined(WIN32) + # include <signal.h> + # include <pwd.h> +@@ -1774,7 +1778,7 @@ + strcpy(continuePrompt," ...> "); + } + +-int main(int argc, char **argv){ ++int sqlite3_main(int argc, char **argv){ + char *zErrMsg = 0; + struct callback_data data; + const char *zInitFile = 0; +@@ -1816,6 +1820,17 @@ + if( i<argc ){ + data.zDbFilename = argv[i++]; + }else{ ++#if defined(_WIN32) && !defined(__TINYC__) ++ static OPENFILENAME ofn; ++ static char zDbFn[1024]; ++ ofn.lStructSize = sizeof(ofn); ++ ofn.lpstrFile = (LPTSTR) zDbFn; ++ ofn.nMaxFile = sizeof(zDbFn); ++ ofn.Flags = OFN_PATHMUSTEXIST | OFN_EXPLORER | OFN_NOCHANGEDIR; ++ if( GetOpenFileName(&ofn) ){ ++ data.zDbFilename = zDbFn; ++ } else ++#endif + #ifndef SQLITE_OMIT_MEMORYDB + data.zDbFilename = ":memory:"; + #else +EOD + +test "$VER3" = "3.7.15" -o "$VER3" = "3.7.15.1" -o "$VER3" = "3.7.15.2" \ + -o "$VER3" = "3.7.16" -o "$VER3" = "3.7.16.1" -o "$VER3" = "3.7.16.2" \ + -o "$VER3" = "3.7.17" -o "$VER3" = "3.8.0" -o "$VER3" = "3.8.1" \ + -o "$VER3" = "3.8.2" \ + && patch sqlite3/src/libshell.c <<'EOD' +--- sqlite3.orig/src/libshell.c 2012-12-12 14:42:10.000000000 +0100 ++++ sqlite3/src/libshell.c 2012-12-13 12:14:57.000000000 +0100 +@@ -36,6 +36,10 @@ + #include <ctype.h> + #include <stdarg.h> + ++#ifdef _WIN32 ++#include <windows.h> ++#endif ++ + #if !defined(_WIN32) && !defined(WIN32) + # include <signal.h> + # if !defined(__RTP__) && !defined(_WRS_KERNEL) +@@ -2894,7 +2898,7 @@ + return argv[i]; + } + +-int main(int argc, char **argv){ ++int sqlite3_main(int argc, char **argv){ + char *zErrMsg = 0; + struct callback_data data; + const char *zInitFile = 0; +@@ -2996,6 +3000,17 @@ + } + } + if( data.zDbFilename==0 ){ ++#if defined(_WIN32) && !defined(__TINYC__) ++ static OPENFILENAME ofn; ++ static char zDbFn[1024]; ++ ofn.lStructSize = sizeof(ofn); ++ ofn.lpstrFile = (LPTSTR) zDbFn; ++ ofn.nMaxFile = sizeof(zDbFn); ++ ofn.Flags = OFN_PATHMUSTEXIST | OFN_EXPLORER | OFN_NOCHANGEDIR; ++ if( GetOpenFileName(&ofn) ){ ++ data.zDbFilename = zDbFn; ++ } else ++#endif + #ifndef SQLITE_OMIT_MEMORYDB + data.zDbFilename = ":memory:"; + #else +EOD + +rm -f sqlite3/src/minshell.c +touch sqlite3/src/minshell.c +patch sqlite3/src/minshell.c <<'EOD' +--- sqlite3.orig/src/minshell.c 2007-01-10 18:46:47.000000000 +0100 ++++ sqlite3/src/minshell.c 2007-01-10 18:46:47.000000000 +0100 +@@ -0,0 +1,20 @@ ++/* ++** 2001 September 15 ++** ++** The author disclaims copyright to this source code. In place of ++** a legal notice, here is a blessing: ++** ++** May you do good and not evil. ++** May you find forgiveness for yourself and forgive others. ++** May you share freely, never taking more than you give. ++** ++************************************************************************* ++** This file contains code to implement the "sqlite" command line ++** utility for accessing SQLite databases. ++*/ ++ ++int sqlite3_main(int argc, char **argv); ++ ++int main(int argc, char **argv){ ++ return sqlite3_main(argc, argv); ++} +EOD + +# amalgamation: add libshell.c +test "$VER3" != "3.5.6" && test -r sqlite3/tool/mksqlite3c.tcl && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/tool/mksqlite3c.tcl 2007-04-02 14:20:10.000000000 +0200 ++++ sqlite3/tool/mksqlite3c.tcl 2007-04-03 09:42:03.000000000 +0200 +@@ -194,6 +194,7 @@ + where.c + + parse.c ++ libshell.c + + tokenize.c + complete.c +EOD +test "$VER3" = "3.5.6" && test -r sqlite3/tool/mksqlite3c.tcl && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/tool/mksqlite3c.tcl 2007-04-02 14:20:10.000000000 +0200 ++++ sqlite3/tool/mksqlite3c.tcl 2007-04-03 09:42:03.000000000 +0200 +@@ -200,6 +200,7 @@ + + main.c + ++ libshell.c + fts3.c + fts3_hash.c + fts3_porter.c +EOD + +# patch: parse foreign key constraints on virtual tables +test "$VER3" != "3.6.15" -a "$VER3" != "3.6.16" -a "$VER3" != "3.6.17" \ + -a "$VER3" != "3.6.18" -a "$VER3" != "3.6.19" -a "$VER3" != "3.6.20" \ + -a "$VER3" != "3.6.21" -a "$VER3" != "3.6.22" -a "$VER3" != "3.6.23" \ + -a "$VER3" != "3.6.23.1" -a "$VER3" != "3.7.0" -a "$VER3" != "3.7.0.1" \ + -a "$VER3" != "3.7.1" -a "$VER3" != "3.7.2" -a "$VER3" != "3.7.3" \ + -a "$VER3" != "3.7.4" -a "$VER3" != "3.7.5" -a "$VER3" != "3.7.6" \ + -a "$VER3" != "3.7.6.1" -a "$VER3" != "3.7.6.2" -a "$VER3" != "3.7.6.3" \ + -a "$VER3" != "3.7.7" -a "$VER3" != "3.7.7.1" -a "$VER3" != "3.7.8" \ + -a "$VER3" != "3.7.9" -a "$VER3" != "3.7.10" -a "$VER3" != "3.7.11" \ + -a "$VER3" != "3.7.12" -a "$VER3" != "3.7.12.1" -a "$VER3" != "3.7.13" \ + -a "$VER3" != "3.7.14" -a "$VER3" != "3.7.14.1" -a "$VER3" != "3.7.15" \ + -a "$VER3" != "3.7.15.1" -a "$VER3" != "3.7.15.2" -a "$VER3" != "3.7.16" \ + -a "$VER3" != "3.7.16.1" -a "$VER3" != "3.7.16.2" -a "$VER3" != "3.7.17" \ + -a "$VER3" != "3.8.0" -a "$VER3" != "3.8.1" -a "$VER3" != "3.8.2" \ + && patch -d sqlite3 -p1 <<'EOD' +diff -u sqlite3.orig/src/build.c sqlite3/src/build.c +--- sqlite3.orig/src/build.c 2007-01-09 14:53:04.000000000 +0100 ++++ sqlite3/src/build.c 2007-01-30 08:14:41.000000000 +0100 +@@ -2063,7 +2063,7 @@ + char *z; + + assert( pTo!=0 ); +- if( p==0 || pParse->nErr || IN_DECLARE_VTAB ) goto fk_end; ++ if( p==0 || pParse->nErr ) goto fk_end; + if( pFromCol==0 ){ + int iCol = p->nCol-1; + if( iCol<0 ) goto fk_end; +diff -u sqlite3.orig/src/pragma.c sqlite3/src/pragma.c +--- sqlite3.orig/src/pragma.c 2007-01-27 03:24:56.000000000 +0100 ++++ sqlite3/src/pragma.c 2007-01-30 09:19:30.000000000 +0100 +@@ -589,6 +589,9 @@ + pTab = sqlite3FindTable(db, zRight, zDb); + if( pTab ){ + v = sqlite3GetVdbe(pParse); ++#ifndef SQLITE_OMIT_VIRTUAL_TABLE ++ if( pTab->pVtab ) sqlite3ViewGetColumnNames(pParse, pTab); ++#endif + pFK = pTab->pFKey; + if( pFK ){ + int i = 0; +diff -u sqlite3.orig/src/vtab.c sqlite3/src/vtab.c +--- sqlite3.orig/src/vtab.c 2007-01-09 15:01:14.000000000 +0100 ++++ sqlite3/src/vtab.c 2007-01-30 08:23:22.000000000 +0100 +@@ -540,6 +540,9 @@ + int rc = SQLITE_OK; + Table *pTab = db->pVTab; + char *zErr = 0; ++#ifndef SQLITE_OMIT_FOREIGN_KEYS ++ FKey *pFKey; ++#endif + + sqlite3_mutex_enter(db->mutex); + pTab = db->pVTab; +@@ -568,6 +571,15 @@ + } + sParse.declareVtab = 0; + ++#ifndef SQLITE_OMIT_FOREIGN_KEYS ++ assert( pTab->pFKey==0 ); ++ pTab->pFKey = sParse.pNewTable->pFKey; ++ sParse.pNewTable->pFKey = 0; ++ for(pFKey=pTab->pFKey; pFKey; pFKey=pFKey->pNextFrom){ ++ pFKey->pFrom=pTab; ++ } ++#endif ++ + if( sParse.pVdbe ){ + sqlite3VdbeFinalize(sParse.pVdbe); + } +EOD + +# patch: re-enable NO_TCL in tclsqlite.c (3.3.15) +patch -d sqlite3 -p1 <<'EOD' +diff -u sqlite3.orig/src/tclsqlite.c sqlite3/src/tclsqlite.c +--- sqlite3.orig/src/tclsqlite.c 2007-04-06 17:02:14.000000000 +0200 ++++ sqlite3/src/tclsqlite.c 2007-04-10 07:47:49.000000000 +0200 +@@ -14,6 +14,7 @@ + ** + ** $Id: mingw64-cross-build.sh,v 1.46 2013/12/08 10:37:28 chw Exp chw $ + */ ++#ifndef NO_TCL /* Omit this whole file if TCL is unavailable */ + #include "tcl.h" + + /* +@@ -2264,3 +2265,5 @@ + return 0; + } + #endif /* TCLSH */ ++ ++#endif /* !defined(NO_TCL) */ +EOD + +# patch: Win32 locking and pager unlock, for SQLite3 < 3.4.0 +true || patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/src/os_win.c 2007-04-11 19:52:04.000000000 +0200 ++++ sqlite3/src/os_win.c 2007-05-08 06:57:06.000000000 +0200 +@@ -1237,8 +1237,8 @@ + ** the PENDING_LOCK byte is temporary. + */ + newLocktype = pFile->locktype; +- if( pFile->locktype==NO_LOCK +- || (locktype==EXCLUSIVE_LOCK && pFile->locktype==RESERVED_LOCK) ++ if( locktype==SHARED_LOCK ++ || (locktype==EXCLUSIVE_LOCK && pFile->locktype<PENDING_LOCK) + ){ + int cnt = 3; + while( cnt-->0 && (res = LockFile(pFile->h, PENDING_BYTE, 0, 1, 0))==0 ){ +@@ -1289,6 +1289,18 @@ + newLocktype = EXCLUSIVE_LOCK; + }else{ + OSTRACE2("error-code = %d\n", GetLastError()); ++ if( !getReadLock(pFile) ){ ++ /* This should never happen. We should always be able to ++ ** reacquire the read lock */ ++ OSTRACE1("could not re-get a SHARED lock.\n"); ++ if( newLocktype==PENDING_LOCK || pFile->locktype==PENDING_LOCK ){ ++ UnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0); ++ } ++ if( pFile->locktype==RESERVED_LOCK ){ ++ UnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0); ++ } ++ newLocktype = NO_LOCK; ++ } + } + } + +@@ -1362,6 +1374,7 @@ + /* This should never happen. We should always be able to + ** reacquire the read lock */ + rc = SQLITE_IOERR_UNLOCK; ++ locktype = NO_LOCK; + } + } + if( type>=RESERVED_LOCK ){ +EOD + +# patch: Win32 locking and pager unlock, for SQLite3 >= 3.5.4 && <= 3.6.10 +true || patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/src/os_win.c 2007-12-13 22:38:58.000000000 +0100 ++++ sqlite3/src/os_win.c 2008-01-18 10:01:48.000000000 +0100 +@@ -855,8 +855,8 @@ + ** the PENDING_LOCK byte is temporary. + */ + newLocktype = pFile->locktype; +- if( pFile->locktype==NO_LOCK +- || (locktype==EXCLUSIVE_LOCK && pFile->locktype==RESERVED_LOCK) ++ if( locktype==SHARED_LOCK ++ || (locktype==EXCLUSIVE_LOCK && pFile->locktype<PENDING_LOCK) + ){ + int cnt = 3; + while( cnt-->0 && (res = LockFile(pFile->h, PENDING_BYTE, 0, 1, 0))==0 ){ +@@ -907,7 +907,18 @@ + newLocktype = EXCLUSIVE_LOCK; + }else{ + OSTRACE2("error-code = %d\n", GetLastError()); +- getReadLock(pFile); ++ if( !getReadLock(pFile) ){ ++ /* This should never happen. We should always be able to ++ ** reacquire the read lock */ ++ OSTRACE1("could not re-get a SHARED lock.\n"); ++ if( newLocktype==PENDING_LOCK || pFile->locktype==PENDING_LOCK ){ ++ UnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0); ++ } ++ if( pFile->locktype==RESERVED_LOCK ){ ++ UnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0); ++ } ++ newLocktype = NO_LOCK; ++ } + } + } + +@@ -982,6 +993,7 @@ + /* This should never happen. We should always be able to + ** reacquire the read lock */ + rc = SQLITE_IOERR_UNLOCK; ++ locktype = NO_LOCK; + } + } + if( type>=RESERVED_LOCK ){ +EOD + +# patch: Win32 locking and pager unlock, for SQLite3 >= 3.6.11 && < 3.7.0 +true || patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/src/os_win.c 2009-02-15 14:07:09.000000000 +0100 ++++ sqlite3/src/os_win.c 2009-02-20 16:39:48.000000000 +0100 +@@ -922,7 +922,7 @@ + newLocktype = pFile->locktype; + if( (pFile->locktype==NO_LOCK) + || ( (locktype==EXCLUSIVE_LOCK) +- && (pFile->locktype==RESERVED_LOCK)) ++ && (pFile->locktype<RESERVED_LOCK)) + ){ + int cnt = 3; + while( cnt-->0 && (res = LockFile(pFile->h, PENDING_BYTE, 0, 1, 0))==0 ){ +@@ -981,7 +981,18 @@ + }else{ + error = GetLastError(); + OSTRACE2("error-code = %d\n", error); +- getReadLock(pFile); ++ if( !getReadLock(pFile) ){ ++ /* This should never happen. We should always be able to ++ ** reacquire the read lock */ ++ OSTRACE1("could not re-get a SHARED lock.\n"); ++ if( newLocktype==PENDING_LOCK || pFile->locktype==PENDING_LOCK ){ ++ UnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0); ++ } ++ if( pFile->locktype==RESERVED_LOCK ){ ++ UnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0); ++ } ++ newLocktype = NO_LOCK; ++ } + } + } + +@@ -1057,6 +1068,7 @@ + /* This should never happen. We should always be able to + ** reacquire the read lock */ + rc = SQLITE_IOERR_UNLOCK; ++ locktype = NO_LOCK; + } + } + if( type>=RESERVED_LOCK ){ +EOD + +# patch: compile fix for FTS3 as extension module +test "$VER3" != "3.6.21" -a "$VER3" != "3.6.22" -a "$VER3" != "3.6.23" \ + -a "$VER3" != "3.6.23.1" -a "$VER3" != "3.7.0" -a "$VER3" != "3.7.0.1" \ + -a "$VER3" != "3.7.1" -a "$VER3" != "3.7.2" -a "$VER3" != "3.7.3" \ + -a "$VER3" != "3.7.4" -a "$VER3" != "3.7.5" -a "$VER3" != "3.7.6" \ + -a "$VER3" != "3.7.6.1" -a "$VER3" != "3.7.6.2" -a "$VER3" != "3.7.6.3" \ + -a "$VER3" != "3.7.7" -a "$VER3" != "3.7.7.1" -a "$VER3" != "3.7.8" \ + -a "$VER3" != "3.7.9" -a "$VER3" != "3.7.10" -a "$VER3" != "3.7.11" \ + -a "$VER3" != "3.7.12" -a "$VER3" != "3.7.12.1" -a "$VER3" != "3.7.13" \ + -a "$VER3" != "3.7.14" -a "$VER3" != "3.7.14.1" -a "$VER3" != "3.7.15" \ + -a "$VER3" != "3.7.15.1" -a "$VER3" != "3.7.15.2" -a "$VER3" != "3.7.16" \ + -a "$VER3" != "3.7.16.1" -a "$VER3" != "3.7.16.2" -a "$VER3" != "3.7.17" \ + -a "$VER3" != "3.8.0" -a "$VER3" != "3.8.1" -a "$VER3" != "3.8.2" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3.c 2008-02-02 17:24:34.000000000 +0100 ++++ sqlite3/ext/fts3/fts3.c 2008-03-16 11:29:02.000000000 +0100 +@@ -274,10 +274,6 @@ + + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +-#if defined(SQLITE_ENABLE_FTS3) && !defined(SQLITE_CORE) +-# define SQLITE_CORE 1 +-#endif +- + #include <assert.h> + #include <stdlib.h> + #include <stdio.h> +@@ -6389,7 +6385,7 @@ + return rc; + } + +-#if !SQLITE_CORE ++#ifndef SQLITE_CORE + int sqlite3_extension_init( + sqlite3 *db, + char **pzErrMsg, +--- sqlite3.orig/ext/fts3/fts3_porter.c 2008-02-01 16:40:34.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_porter.c 2008-03-16 11:34:50.000000000 +0100 +@@ -31,6 +31,11 @@ + #include <string.h> + #include <ctype.h> + ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif ++ + #include "fts3_tokenizer.h" + + /* +--- sqlite3.orig/ext/fts3/fts3_tokenizer1.c 2007-11-23 18:31:18.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_tokenizer1.c 2008-03-16 11:35:37.000000000 +0100 +@@ -31,6 +31,11 @@ + #include <string.h> + #include <ctype.h> + ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif ++ + #include "fts3_tokenizer.h" + + typedef struct simple_tokenizer { +--- sqlite3.orig/ext/fts3/fts3_hash.c 2007-11-24 01:41:52.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_hash.c 2008-03-16 11:39:57.000000000 +0100 +@@ -29,6 +29,11 @@ + #include <stdlib.h> + #include <string.h> + ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif ++ + #include "sqlite3.h" + #include "fts3_hash.h" + +--- sqlite3.orig/ext/fts3/fts3_tokenizer.c 2008-06-24 03:29:58.000000000 +0200 ++++ sqlite3/ext/fts3/fts3_tokenizer.c 2008-07-17 08:38:24.000000000 +0200 +@@ -27,7 +27,7 @@ + + #include "sqlite3ext.h" + #ifndef SQLITE_CORE +- SQLITE_EXTENSION_INIT1 ++extern const sqlite3_api_routines *sqlite3_api; + #endif + + #include "fts3_hash.h" +EOD +test "$VER3" = "3.6.21" -o "$VER3" = "3.6.22" -o "$VER3" = "3.6.23" \ + -o "$VER3" = "3.6.23.1" -o "$VER3" = "3.7.0" -o "$VER3" = "3.7.0.1" \ + -o "$VER3" = "3.7.1" -o "$VER3" = "3.7.2" -o "$VER3" = "3.7.3" \ + -o "$VER3" = "3.7.4" -o "$VER3" = "3.7.5" -o "$VER3" = "3.7.5" \ + -o "$VER3" = "3.7.6" \ + -o "$VER3" = "3.7.6.1" -o "$VER3" = "3.7.6.2" -o "$VER3" = "3.7.6.3" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3.c 2008-02-02 17:24:34.000000000 +0100 ++++ sqlite3/ext/fts3/fts3.c 2008-03-16 11:29:02.000000000 +0100 +@@ -274,10 +274,6 @@ + + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +-#if defined(SQLITE_ENABLE_FTS3) && !defined(SQLITE_CORE) +-# define SQLITE_CORE 1 +-#endif +- + #include "fts3Int.h" + + #include <assert.h> +@@ -6389,7 +6385,7 @@ + return rc; + } + +-#if !SQLITE_CORE ++#ifndef SQLITE_CORE + int sqlite3_extension_init( + sqlite3 *db, + char **pzErrMsg, +EOD +patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3_porter.c 2008-02-01 16:40:34.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_porter.c 2008-03-16 11:34:50.000000000 +0100 +@@ -31,6 +31,11 @@ + #include <string.h> + #include <ctype.h> + ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif ++ + #include "fts3_tokenizer.h" + + /* +--- sqlite3.orig/ext/fts3/fts3_tokenizer1.c 2007-11-23 18:31:18.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_tokenizer1.c 2008-03-16 11:35:37.000000000 +0100 +@@ -31,6 +31,11 @@ + #include <string.h> + #include <ctype.h> + ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif ++ + #include "fts3_tokenizer.h" + + typedef struct simple_tokenizer { +EOD +test "$VER3" != "3.7.8" -a "$VER3" != "3.7.9" -a "$VER3" != "3.7.10" \ + -a "$VER3" != "3.7.11" -a "$VER3" != "3.7.12" -a "$VER3" != "3.7.12.1" \ + -a "$VER3" != "3.7.13" -a "$VER3" != "3.7.14" -a "$VER3" != "3.7.14.1" \ + -a "$VER3" != "3.7.15" -a "$VER3" != "3.7.15.1" -a "$VER3" != "3.7.15.2" \ + -a "$VER3" != "3.7.16" -a "$VER3" != "3.7.16.1" -a "$VER3" != "3.7.16.2" \ + -a "$VER3" != "3.7.17" -a "$VER3" != "3.8.0" -a "$VER3" != "3.8.1" \ + -a "$VER3" != "3.8.2" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3_hash.c 2007-11-24 01:41:52.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_hash.c 2008-03-16 11:39:57.000000000 +0100 +@@ -29,6 +29,11 @@ + #include <stdlib.h> + #include <string.h> + ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif ++ + #include "sqlite3.h" + #include "fts3_hash.h" + +EOD +test "$VER3" = "3.6.21" && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3_write.c 2009-12-03 20:39:06.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_write.c 2010-01-05 07:59:27.000000000 +0100 +@@ -20,6 +20,10 @@ + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + + #include "fts3Int.h" ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif + #include <string.h> + #include <assert.h> + #include <stdlib.h> +EOD +test "$VER3" = "3.6.22" -o "$VER3" = "3.6.23" -o "$VER3" = "3.6.23.1" \ + -o "$VER3" = "3.7.0" -o "$VER3" = "3.7.0.1" \ + -o "$VER3" = "3.7.1" -o "$VER3" = "3.7.2" -o "$VER3" = "3.7.3" \ + -o "$VER3" = "3.7.4" -o "$VER3" = "3.7.5" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3_write.c 2010-01-05 09:42:19.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_write.c 2010-01-05 09:55:25.000000000 +0100 +@@ -20,6 +20,10 @@ + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + + #include "fts3Int.h" ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif + #include <string.h> + #include <assert.h> + #include <stdlib.h> +@@ -2226,7 +2230,7 @@ + + if( !zVal ){ + return SQLITE_NOMEM; +- }else if( nVal==8 && 0==sqlite3_strnicmp(zVal, "optimize", 8) ){ ++ }else if( nVal==8 && 0==strnicmp(zVal, "optimize", 8) ){ + rc = fts3SegmentMerge(p, -1); + if( rc==SQLITE_DONE ){ + rc = SQLITE_OK; +@@ -2234,10 +2238,10 @@ + sqlite3Fts3PendingTermsClear(p); + } + #ifdef SQLITE_TEST +- }else if( nVal>9 && 0==sqlite3_strnicmp(zVal, "nodesize=", 9) ){ ++ }else if( nVal>9 && 0==strnicmp(zVal, "nodesize=", 9) ){ + p->nNodeSize = atoi(&zVal[9]); + rc = SQLITE_OK; +- }else if( nVal>11 && 0==sqlite3_strnicmp(zVal, "maxpending=", 9) ){ ++ }else if( nVal>11 && 0==strnicmp(zVal, "maxpending=", 9) ){ + p->nMaxPendingData = atoi(&zVal[11]); + rc = SQLITE_OK; + #endif +EOD + +test "$VER3" = "3.7.6"\ + -o "$VER3" = "3.7.6.1" -o "$VER3" = "3.7.6.2" -o "$VER3" = "3.7.6.3" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3_write.c 2011-04-12 11:44:56.000000000 +0200 ++++ sqlite3/ext/fts3/fts3_write.c 2011-04-13 08:00:51.000000000 +0200 +@@ -20,6 +20,10 @@ + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + + #include "fts3Int.h" ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif + #include <string.h> + #include <assert.h> + #include <stdlib.h> +@@ -2450,7 +2454,7 @@ + + if( !zVal ){ + return SQLITE_NOMEM; +- }else if( nVal==8 && 0==sqlite3_strnicmp(zVal, "optimize", 8) ){ ++ }else if( nVal==8 && 0==strnicmp(zVal, "optimize", 8) ){ + rc = fts3SegmentMerge(p, FTS3_SEGCURSOR_ALL); + if( rc==SQLITE_DONE ){ + rc = SQLITE_OK; +@@ -2458,10 +2462,10 @@ + sqlite3Fts3PendingTermsClear(p); + } + #ifdef SQLITE_TEST +- }else if( nVal>9 && 0==sqlite3_strnicmp(zVal, "nodesize=", 9) ){ ++ }else if( nVal>9 && 0==strnicmp(zVal, "nodesize=", 9) ){ + p->nNodeSize = atoi(&zVal[9]); + rc = SQLITE_OK; +- }else if( nVal>11 && 0==sqlite3_strnicmp(zVal, "maxpending=", 9) ){ ++ }else if( nVal>11 && 0==strnicmp(zVal, "maxpending=", 9) ){ + p->nMaxPendingData = atoi(&zVal[11]); + rc = SQLITE_OK; + #endif +--- sqlite3.orig/ext/fts3/fts3_aux.c 2011-04-12 11:44:56.000000000 +0200 ++++ sqlite3/ext/fts3/fts3_aux.c 2011-04-13 08:16:17.000000000 +0200 +@@ -15,6 +15,10 @@ + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + + #include "fts3Int.h" ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif + #include <string.h> + #include <assert.h> + +EOD + +test "$VER3" = "3.6.21" -o "$VER3" = "3.6.22" -o "$VER3" = "3.6.23" \ + -o "$VER3" = "3.6.23.1" -o "$VER3" = "3.7.0" -o "$VER3" = "3.7.0.1" \ + -o "$VER3" = "3.7.1" -o "$VER3" = "3.7.2" -o "$VER3" = "3.7.3" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3_snippet.c 2009-12-03 12:33:32.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_snippet.c 2010-01-05 08:03:51.000000000 +0100 +@@ -14,6 +14,10 @@ + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + + #include "fts3Int.h" ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif + #include <string.h> + #include <assert.h> + #include <ctype.h> +--- sqlite3.orig/ext/fts3/fts3_expr.c 2009-12-03 12:33:32.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_expr.c 2010-01-05 08:06:10.000000000 +0100 +@@ -17,6 +17,11 @@ + */ + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif ++ + /* + ** By default, this module parses the legacy syntax that has been + ** traditionally used by fts3. Or, if SQLITE_ENABLE_FTS3_PARENTHESIS +@@ -445,7 +450,7 @@ + const char *zStr = pParse->azCol[ii]; + int nStr = (int)strlen(zStr); + if( nInput>nStr && zInput[nStr]==':' +- && sqlite3_strnicmp(zStr, zInput, nStr)==0 ++ && memcmp(zStr, zInput, nStr)==0 + ){ + iCol = ii; + iColLen = (int)((zInput - z) + nStr + 1); +--- sqlite3.orig/ext/fts3/fts3_tokenizer.c 2009-12-07 17:38:46.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_tokenizer.c 2010-01-05 08:12:50.000000000 +0100 +@@ -27,7 +27,7 @@ + + #include "sqlite3ext.h" + #ifndef SQLITE_CORE +- SQLITE_EXTENSION_INIT1 ++extern const sqlite3_api_routines *sqlite3_api; + #endif + + #include "fts3Int.h" +@@ -166,7 +166,7 @@ + if( !z ){ + zCopy = sqlite3_mprintf("simple"); + }else{ +- if( sqlite3_strnicmp(z, "tokenize", 8) || fts3IsIdChar(z[8])){ ++ if( strnicmp(z, "tokenize", 8) || fts3IsIdChar(z[8])){ + return SQLITE_OK; + } + zCopy = sqlite3_mprintf("%s", &z[8]); +EOD + +test "$VER3" = "3.7.4" -o "$VER3" = "3.7.5" -o "$VER3" = "3.7.6" \ + -o "$VER3" = "3.7.6.1" -o "$VER3" = "3.7.6.2" -o "$VER3" = "3.7.6.3" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3_snippet.c 2009-12-03 12:33:32.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_snippet.c 2010-01-05 08:03:51.000000000 +0100 +@@ -14,6 +14,10 @@ + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + + #include "fts3Int.h" ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif + #include <string.h> + #include <assert.h> + #include <ctype.h> +--- sqlite3.orig/ext/fts3/fts3_tokenizer.c 2009-12-07 17:38:46.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_tokenizer.c 2010-01-05 08:12:50.000000000 +0100 +@@ -27,7 +27,7 @@ + + #include "sqlite3ext.h" + #ifndef SQLITE_CORE +- SQLITE_EXTENSION_INIT1 ++extern const sqlite3_api_routines *sqlite3_api; + #endif + + #include "fts3Int.h" +--- sqlite3.orig/ext/fts3/fts3_expr.c 2009-12-03 12:33:32.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_expr.c 2010-01-05 08:06:10.000000000 +0100 +@@ -17,6 +17,11 @@ + */ + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif ++ + /* + ** By default, this module parses the legacy syntax that has been + ** traditionally used by fts3. Or, if SQLITE_ENABLE_FTS3_PARENTHESIS +@@ -445,7 +450,7 @@ + const char *zStr = pParse->azCol[ii]; + int nStr = (int)strlen(zStr); + if( nInput>nStr && zInput[nStr]==':' +- && sqlite3_strnicmp(zStr, zInput, nStr)==0 ++ && memcmp(zStr, zInput, nStr)==0 + ){ + iCol = ii; + iColLen = (int)((zInput - z) + nStr + 1); +--- sqlite3.orig/ext/fts3/fts3.c 2010-12-07 16:14:36.000000000 +0100 ++++ sqlite3/ext/fts3/fts3.c 2010-12-16 11:59:02.000000000 +0100 +@@ -702,8 +698,8 @@ + sqlite3_tokenizer *pTokenizer = 0; /* Tokenizer for this table */ + + assert( strlen(argv[0])==4 ); +- assert( (sqlite3_strnicmp(argv[0], "fts4", 4)==0 && isFts4) +- || (sqlite3_strnicmp(argv[0], "fts3", 4)==0 && !isFts4) ++ assert( (strnicmp(argv[0], "fts4", 4)==0 && isFts4) ++ || (strnicmp(argv[0], "fts3", 4)==0 && !isFts4) + ); + + nDb = (int)strlen(argv[1]) + 1; +@@ -732,7 +728,7 @@ + /* Check if this is a tokenizer specification */ + if( !pTokenizer + && strlen(z)>8 +- && 0==sqlite3_strnicmp(z, "tokenize", 8) ++ && 0==strnicmp(z, "tokenize", 8) + && 0==sqlite3Fts3IsIdChar(z[8]) + ){ + rc = sqlite3Fts3InitTokenizer(pHash, &z[9], &pTokenizer, pzErr); +@@ -744,8 +740,8 @@ + rc = SQLITE_NOMEM; + goto fts3_init_out; + } +- if( nKey==9 && 0==sqlite3_strnicmp(z, "matchinfo", 9) ){ +- if( strlen(zVal)==4 && 0==sqlite3_strnicmp(zVal, "fts3", 4) ){ ++ if( nKey==9 && 0==strnicmp(z, "matchinfo", 9) ){ ++ if( strlen(zVal)==4 && 0==strnicmp(zVal, "fts3", 4) ){ + bNoDocsize = 1; + }else{ + *pzErr = sqlite3_mprintf("unrecognized matchinfo: %s", zVal); +--- sqlite3.orig/ext/fts3/fts3_write.c 2010-12-16 12:08:45.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_write.c 2010-12-16 12:48:30.000000000 +0100 +@@ -868,16 +868,16 @@ + assert( pnBlob); + + if( p->pSegments ){ +- rc = sqlite3_blob_reopen(p->pSegments, iBlockid); +- }else{ +- if( 0==p->zSegmentsTbl ){ +- p->zSegmentsTbl = sqlite3_mprintf("%s_segments", p->zName); +- if( 0==p->zSegmentsTbl ) return SQLITE_NOMEM; +- } +- rc = sqlite3_blob_open( +- p->db, p->zDb, p->zSegmentsTbl, "block", iBlockid, 0, &p->pSegments +- ); ++ sqlite3_blob_close(p->pSegments); ++ p->pSegments = 0; + } ++ if( 0==p->zSegmentsTbl ){ ++ p->zSegmentsTbl = sqlite3_mprintf("%s_segments", p->zName); ++ if( 0==p->zSegmentsTbl ) return SQLITE_NOMEM; ++ } ++ rc = sqlite3_blob_open( ++ p->db, p->zDb, p->zSegmentsTbl, "block", iBlockid, 0, &p->pSegments ++ ); + + if( rc==SQLITE_OK ){ + int nByte = sqlite3_blob_bytes(p->pSegments); +EOD + +# patch: FTS3 again, for SQLite3 >= 3.6.8 +test "$VER3" = "3.6.8" -o "$VER3" = "3.6.9" -o "$VER3" = "3.6.10" \ + -o "$VER3" = "3.6.11" -o "$VER3" = "3.6.12" -o "$VER3" = "3.6.13" \ + -o "$VER3" = "3.6.14" -o "$VER3" = "3.6.14.1" -o "$VER3" = "3.6.14.2" \ + -o "$VER3" = "3.6.15" -o "$VER3" = "3.6.16" -o "$VER3" = "3.6.17" \ + -o "$VER3" = "3.6.18" -o "$VER3" = "3.6.19" -o "$VER3" = "3.6.20" && \ + patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3_expr.c 2009-01-01 15:06:13.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_expr.c 2009-01-14 09:55:13.000000000 +0100 +@@ -57,6 +57,12 @@ + #define SQLITE_FTS3_DEFAULT_NEAR_PARAM 10 + + #include "fts3_expr.h" ++ ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif ++ + #include "sqlite3.h" + #include <ctype.h> + #include <string.h> +EOD +test "$VER3" = "3.6.17" -o "$VER3" = "3.6.18" -o "$VER3" = "3.6.19" \ + -o "$VER3" = "3.6.20" && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3_expr.c 2009-01-01 15:06:13.000000000 +0100 ++++ sqlite3/ext/fts3/fts3_expr.c 2009-01-14 09:55:13.000000000 +0100 +@@ -428,7 +428,7 @@ + const char *zStr = pParse->azCol[ii]; + int nStr = strlen(zStr); + if( nInput>nStr && zInput[nStr]==':' +- && sqlite3_strnicmp(zStr, zInput, nStr)==0 ++ && memcmp(zStr, zInput, nStr)==0 + ){ + iCol = ii; + iColLen = ((zInput - z) + nStr + 1); +EOD +# patch: compile fix for rtree as extension module +test "$VER3" != "3.8.0" -a "$VER3" != "3.8.1" -a "$VER3" != "3.8.2" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/rtree/rtree.c 2008-07-16 16:43:35.000000000 +0200 ++++ sqlite3/ext/rtree/rtree.c 2008-07-17 08:59:53.000000000 +0200 +@@ -2812,7 +2812,7 @@ + return rc; + } + +-#if !SQLITE_CORE ++#ifndef SQLITE_CORE + int sqlite3_extension_init( + sqlite3 *db, + char **pzErrMsg, +EOD + +# patch: compile fix for rtree as extension module +test "$VER3" = "3.7.3" -o "$VER3" = "3.7.4" -o "$VER3" = "3.7.5" \ + -o "$VER3" = "3.7.6" \ + -o "$VER3" = "3.7.6.1" -o "$VER3" = "3.7.6.2" -o "$VER3" = "3.7.6.3" \ + -o "$VER3" = "3.7.7" -o "$VER3" = "3.7.7.1" -o "$VER3" = "3.7.8" \ + -o "$VER3" = "3.7.9" -o "$VER3" = "3.7.10" -o "$VER3" = "3.7.11" \ + -o "$VER3" = "3.7.12" -o "$VER3" = "3.7.12.1" -o "$VER3" = "3.7.13" \ + -o "$VER3" = "3.7.14" -o "$VER3" = "3.7.14.1" -o "$VER3" = "3.7.15" \ + -o "$VER3" = "3.7.15.1" -o "$VER3" = "3.7.15.2" -o "$VER3" = "3.7.16" \ + -o "$VER3" = "3.7.16.1" -o "$VER3" = "3.7.16.2" -o "$VER3" = "3.7.17" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/rtree/rtree.c 2010-10-16 10:53:54.000000000 +0200 ++++ sqlite3/ext/rtree/rtree.c 2010-10-16 11:12:32.000000000 +0200 +@@ -3193,6 +3193,8 @@ + return rc; + } + ++#ifdef SQLITE_CORE ++ + /* + ** A version of sqlite3_free() that can be used as a callback. This is used + ** in two places - as the destructor for the blob value returned by the +@@ -3257,6 +3259,8 @@ + ); + } + ++#endif ++ + #ifndef SQLITE_CORE + int sqlite3_extension_init( + sqlite3 *db, +EOD + +# patch: .read shell command +test "$VER3" = "3.7.6.1" -o "$VER3" = "3.7.6.2" -o "$VER3" = "3.7.6.3" \ + -o "$VER3" = "3.7.7" -o "$VER3" = "3.7.7.1" -o "$VER3" = "3.7.8" \ + -o "$VER3" = "3.7.9" -o "$VER3" = "3.7.10" -o "$VER3" = "3.7.11" \ + -o "$VER3" = "3.7.12" -o "$VER3" = "3.7.12.1" -o "$VER3" = "3.7.13" \ + -o "$VER3" = "3.7.14" -o "$VER3" = "3.7.14.1" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/src/shell.c 2011-05-19 15:34:57.000000000 +0200 ++++ sqlite3/src/shell.c 2011-06-09 13:36:13.000000000 +0200 +@@ -1957,6 +1957,7 @@ + }else{ + rc = process_input(p, alt); + fclose(alt); ++ if( rc ) rc = 1; + } + }else + +EOD + +# patch: FTS3 for 3.7.7 plus missing APIs in sqlite3ext.h/loadext.c +test "$VER3" = "3.7.7" -o "$VER3" = "3.7.7.1" -o "$VER3" = "3.7.8" \ + -o "$VER3" = "3.7.9" -o "$VER3" = "3.7.10" -o "$VER3" = "3.7.11" \ + -o "$VER3" = "3.7.12" -o "$VER3" = "3.7.12.1" -o "$VER3" = "3.7.13" \ + -o "$VER3" = "3.7.14" -o "$VER3" = "3.7.14.1" -o "$VER3" = "3.7.15" \ + -o "$VER3" = "3.7.15.1" -o "$VER3" = "3.7.15.2" -o "$VER3" = "3.7.16" \ + -o "$VER3" = "3.7.16.1" -o "$VER3" = "3.7.16.2" -o "$VER3" = "3.7.17" \ + -o "$VER3" = "3.8.0" -o "$VER3" = "3.8.1" -o "$VER3" = "3.8.2" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3_aux.c 2011-06-24 09:06:08.000000000 +0200 ++++ sqlite3/ext/fts3/fts3_aux.c 2011-06-25 06:44:08.000000000 +0200 +@@ -14,6 +14,10 @@ + #include "fts3Int.h" + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif + #include <string.h> + #include <assert.h> + +EOD +test "$VER3" = "3.7.7" -o "$VER3" = "3.7.7.1" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3.c 2011-06-24 09:06:08.000000000 +0200 ++++ sqlite3/ext/fts3/fts3.c 2011-06-25 06:48:49.000000000 +0200 +@@ -295,10 +295,6 @@ + #include "fts3Int.h" + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +-#if defined(SQLITE_ENABLE_FTS3) && !defined(SQLITE_CORE) +-# define SQLITE_CORE 1 +-#endif +- + #include <assert.h> + #include <stdlib.h> + #include <stddef.h> +@@ -3136,7 +3132,7 @@ + return rc; + } + +-#if !SQLITE_CORE ++#ifndef SQLITE_CORE + int sqlite3_extension_init( + sqlite3 *db, + char **pzErrMsg, +EOD +test "$VER3" = "3.7.8" -o "$VER3" = "3.7.9" -o "$VER3" = "3.7.10" \ + -o "$VER3" = "3.7.11" -o "$VER3" = "3.7.12" -o "$VER3" = "3.7.12.1" \ + -o "$VER3" = "3.7.13" -o "$VER3" = "3.7.14" -o "$VER3" = "3.7.14.1" \ + -o "$VER3" = "3.7.15" -o "$VER3" = "3.7.15.1" -o "$VER3" = "3.7.15.2" \ + -o "$VER3" = "3.7.16" -o "$VER3" = "3.7.16.1" -o "$VER3" = "3.7.16.2" \ + -o "$VER3" = "3.7.17" -o "$VER3" = "3.8.0" -o "$VER3" = "3.8.1" \ + -o "$VER3" = "3.8.2" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3.c 2011-09-19 20:46:52.000000000 +0200 ++++ sqlite3/ext/fts3/fts3.c 2011-09-20 09:47:40.000000000 +0200 +@@ -295,10 +295,6 @@ + #include "fts3Int.h" + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + +-#if defined(SQLITE_ENABLE_FTS3) && !defined(SQLITE_CORE) +-# define SQLITE_CORE 1 +-#endif +- + #include <assert.h> + #include <stdlib.h> + #include <stddef.h> +@@ -4826,7 +4822,7 @@ + } + } + +-#if !SQLITE_CORE ++#ifndef SQLITE_CORE + /* + ** Initialize API pointer table, if required. + */ +EOD +test "$VER3" = "3.7.7" -o "$VER3" = "3.7.7.1" -o "$VER3" = "3.7.8" \ + -o "$VER3" = "3.7.9" -o "$VER3" = "3.7.10" -o "$VER3" = "3.7.11" \ + -o "$VER3" = "3.7.12" -o "$VER3" = "3.7.12.1" -o "$VER3" = "3.7.13" \ + -o "$VER3" = "3.7.14" -o "$VER3" = "3.7.14.1" -o "$VER3" = "3.7.15" \ + -o "$VER3" = "3.7.15.1" -o "$VER3" = "3.7.15.2" -o "$VER3" = "3.7.16" \ + -o "$VER3" = "3.7.16.1" -o "$VER3" = "3.7.16.2" -o "$VER3" = "3.7.17" \ + -o "$VER3" = "3.8.0" -o "$VER3" = "3.8.1" -o "$VER3" = "3.8.2" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3_expr.c 2011-06-24 09:06:08.000000000 +0200 ++++ sqlite3/ext/fts3/fts3_expr.c 2011-06-25 06:47:00.000000000 +0200 +@@ -18,6 +18,11 @@ + #include "fts3Int.h" + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif ++ + /* + ** By default, this module parses the legacy syntax that has been + ** traditionally used by fts3. Or, if SQLITE_ENABLE_FTS3_PARENTHESIS +--- sqlite3.orig/ext/fts3/fts3_snippet.c 2011-06-24 09:06:08.000000000 +0200 ++++ sqlite3/ext/fts3/fts3_snippet.c 2011-06-25 06:45:47.000000000 +0200 +@@ -13,7 +13,10 @@ + + #include "fts3Int.h" + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) +- ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif + #include <string.h> + #include <assert.h> + +EOD +test "$VER3" = "3.7.7" -o "$VER3" = "3.7.7.1" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/ext/fts3/fts3_tokenizer.c 2011-06-24 09:06:08.000000000 +0200 ++++ sqlite3/ext/fts3/fts3_tokenizer.c 2011-06-25 06:50:19.000000000 +0200 +@@ -25,7 +25,7 @@ + */ + #include "sqlite3ext.h" + #ifndef SQLITE_CORE +- SQLITE_EXTENSION_INIT1 ++extern const sqlite3_api_routines *sqlite3_api; + #endif + #include "fts3Int.h" + +--- sqlite3.orig/ext/fts3/fts3_write.c 2011-06-24 09:06:08.000000000 +0200 ++++ sqlite3/ext/fts3/fts3_write.c 2011-06-25 06:45:05.000000000 +0200 +@@ -20,6 +20,10 @@ + #include "fts3Int.h" + #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) + ++#include "sqlite3ext.h" ++#ifndef SQLITE_CORE ++extern const sqlite3_api_routines *sqlite3_api; ++#endif + #include <string.h> + #include <assert.h> + #include <stdlib.h> +--- sqlite3.orig/src/sqlite3ext.h 2011-06-24 09:06:08.000000000 +0200 ++++ sqlite3/src/sqlite3ext.h 2011-06-25 07:28:06.000000000 +0200 +@@ -212,6 +212,9 @@ + int (*wal_autocheckpoint)(sqlite3*,int); + int (*wal_checkpoint)(sqlite3*,const char*); + void *(*wal_hook)(sqlite3*,int(*)(void*,sqlite3*,const char*,int),void*); ++ int (*blob_reopen)(sqlite3_blob*,sqlite3_int64); ++ int (*vtab_config)(sqlite3*,int op,...); ++ int (*vtab_on_conflict)(sqlite3*); + }; + + /* +@@ -412,6 +415,9 @@ + #define sqlite3_wal_autocheckpoint sqlite3_api->wal_autocheckpoint + #define sqlite3_wal_checkpoint sqlite3_api->wal_checkpoint + #define sqlite3_wal_hook sqlite3_api->wal_hook ++#define sqlite3_blob_reopen sqlite3_api->blob_reopen ++#define sqlite3_vtab_config sqlite3_api->vtab_config ++#define sqlite3_vtab_on_conflict sqlite3_api->vtab_on_conflict + #endif /* SQLITE_CORE */ + + #define SQLITE_EXTENSION_INIT1 const sqlite3_api_routines *sqlite3_api = 0; +--- sqlite3.orig/src/loadext.c 2011-06-24 09:06:08.000000000 +0200 ++++ sqlite3/src/loadext.c 2011-06-25 07:29:59.000000000 +0200 +@@ -84,6 +84,8 @@ + # define sqlite3_create_module 0 + # define sqlite3_create_module_v2 0 + # define sqlite3_declare_vtab 0 ++# define sqlite3_vtab_config 0 ++# define sqlite3_vtab_on_conflict 0 + #endif + + #ifdef SQLITE_OMIT_SHARED_CACHE +@@ -107,6 +109,7 @@ + #define sqlite3_blob_open 0 + #define sqlite3_blob_read 0 + #define sqlite3_blob_write 0 ++#define sqlite3_blob_reopen 0 + #endif + + /* +@@ -372,6 +375,18 @@ + 0, + 0, + #endif ++#ifndef SQLITE_OMIT_INCRBLOB ++ sqlite3_blob_reopen, ++#else ++ 0, ++#endif ++#ifndef SQLITE_OMIT_VIRTUALTABLE ++ sqlite3_vtab_config, ++ sqlite3_vtab_on_conflict, ++#else ++ 0, ++ 0, ++#endif + }; + + /* +EOD +test "$VER3" = "3.7.11" -o "$VER3" = "3.7.12" -o "$VER3" = "3.7.12.1" \ + -o "$VER3" = "3.7.13" -o "$VER3" = "3.7.14" -o "$VER3" = "3.7.14.1" \ + -o "$VER3" = "3.7.15" -o "$VER3" = "3.7.15.1" -o "$VER3" = "3.7.15.2" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/src/sqlite3ext.h 2012-03-22 20:13:33.000000000 +0100 ++++ sqlite3/src/sqlite3ext.h 2012-03-22 20:13:57.000000000 +0100 +@@ -236,6 +236,7 @@ + int (*blob_reopen)(sqlite3_blob*,sqlite3_int64); + int (*vtab_config)(sqlite3*,int op,...); + int (*vtab_on_conflict)(sqlite3*); ++ int (*stricmp)(const char*,const char*); + }; + + /* +@@ -439,6 +440,7 @@ + #define sqlite3_blob_reopen sqlite3_api->blob_reopen + #define sqlite3_vtab_config sqlite3_api->vtab_config + #define sqlite3_vtab_on_conflict sqlite3_api->vtab_on_conflict ++#define sqlite3_stricmp sqlite3_api->stricmp + #endif /* SQLITE_CORE */ + + #define SQLITE_EXTENSION_INIT1 const sqlite3_api_routines *sqlite3_api = 0; +--- sqlite3.orig/src/loadext.c 2012-03-20 15:20:13.000000000 +0100 ++++ sqlite3/src/loadext.c 2012-03-22 20:16:24.000000000 +0100 +@@ -378,6 +378,7 @@ + sqlite3_blob_reopen, + sqlite3_vtab_config, + sqlite3_vtab_on_conflict, ++ sqlite3_stricmp, + }; + + /* +EOD + +test "$VER3" = "3.8.0" -o "$VER3" = "3.8.1" -o "$VER" = "3.8.2" \ + && patch -d sqlite3 -p1 <<'EOD' +--- sqlite3.orig/src/loadext.c 2013-09-16 06:56:48.000000000 +0200 ++++ sqlite3/src/loadext.c 2013-09-16 06:58:14.000000000 +0200 +@@ -495,7 +495,8 @@ + memcpy(zAltEntry, "sqlite3_", 8); + for(iFile=ncFile-1; iFile>=0 && zFile[iFile]!='/'; iFile--){} + iFile++; +- if( sqlite3_strnicmp(zFile+iFile, "lib", 3)==0 ) iFile += 3; ++ if( sqlite3_strnicmp(zFile+iFile, "sqlite3_mod_", 12)==0 ) iFile += 12; ++ else if( sqlite3_strnicmp(zFile+iFile, "lib", 3)==0 ) iFile += 3; + for(iEntry=8; (c = zFile[iFile])!=0 && c!='.'; iFile++){ + if( sqlite3Isalpha(c) ){ + zAltEntry[iEntry++] = (char)sqlite3UpperToLower[(unsigned)c]; +EOD + +echo "========================" +echo "Cleanup before build ..." +echo "========================" +make -f Makefile.mingw64-cross clean +$notv2 || make -C sqlite -f ../mf-sqlite.mingw64-cross clean +make -C sqlite3 -f ../mf-sqlite3.mingw64-cross clean +make -C sqlite3 -f ../mf-sqlite3fts.mingw64-cross clean +make -C sqlite3 -f ../mf-sqlite3rtree.mingw64-cross clean +make -f mf-sqlite3extfunc.mingw64-cross clean + +echo "=============================" +echo "Building SQLite 2 ... ISO8859" +echo "=============================" +( $nov2 && echo '*** skipped (NO_SQLITE2)' ) || true +$nov2 || make -C sqlite -f ../mf-sqlite.mingw64-cross all +if test -n "$SQLITE_DLLS" ; then + $nov2 || make -C sqlite -f ../mf-sqlite.mingw64-cross sqlite.dll +fi + +echo "=================" +echo "Building zlib ..." +echo "=================" + +make -C zlib -f ../mf-zlib.mingw64-cross all + +echo "==========================" +echo "Building SQLite 2 ... UTF8" +echo "==========================" +( $nov2 && echo '*** skipped (NO_SQLITE2)' ) || true +$nov2 || make -C sqlite -f ../mf-sqlite.mingw64-cross clean +$nov2 || make -C sqlite -f ../mf-sqlite.mingw64-cross ENCODING=UTF8 all +if test -n "$SQLITE_DLLS" ; then + $nov2 || \ + make -C sqlite -f ../mf-sqlite.mingw64-cross ENCODING=UTF8 sqliteu.dll +fi + +echo "=====================" +echo "Building SQLite 3 ..." +echo "=====================" +make -C sqlite3 -f ../mf-sqlite3.mingw64-cross all +test -r sqlite3/tool/mksqlite3c.tcl && \ + make -C sqlite3 -f ../mf-sqlite3.mingw64-cross sqlite3.c +if test -r sqlite3/sqlite3.c -a -f "$WITH_SEE" ; then + cat sqlite3/sqlite3.c "$WITH_SEE" > sqlite3.c + ADD_CFLAGS="$ADD_CFLAGS -DSQLITE_HAS_CODEC=1" + ADD_CFLAGS="$ADD_CFLAGS -DSQLITE_ACTIVATION_KEY=\\\"$SEE_KEY\\\"" + ADD_CFLAGS="$ADD_CFLAGS -DSEEEXT=\\\"$SEEEXT\\\"" + ADD_CFLAGS="$ADD_CFLAGS -DSQLITE_API=static -DWIN32=1 -DNDEBUG=1 -DNO_TCL" + ADD_CFLAGS="$ADD_CFLAGS -DTHREADSAFE=1" + ADD_CFLAGS="$ADD_CFLAGS -DSQLITE_DLL=1 -DSQLITE_THREADSAFE=1" + ADD_CFLAGS="$ADD_CFLAGS -DSQLITE_OS_WIN=1 -DSQLITE_ASCII=1" + ADD_CFLAGS="$ADD_CFLAGS -DSQLITE_SOUNDEX=1" + ADD_CFLAGS="$ADD_CFLAGS -DSQLITE_ENABLE_COLUMN_METADATA=1" + ADD_CFLAGS="$ADD_CFLAGS -DWITHOUT_SHELL=1" + export ADD_CFLAGS + ADD_NSIS="$ADD_NSIS -DWITHOUT_SQLITE3_EXE" + unset SQLITE3_A10N_O + unset SQLITE3_EXE +fi +if test -n "$SQLITE_DLLS" ; then + make -C sqlite3 -f ../mf-sqlite3.mingw64-cross sqlite3.dll +fi + +echo "===============================" +echo "Building ODBC drivers and utils" +echo "===============================" +if $nov2 ; then + make -f Makefile.mingw64-cross all_no2 +else + make -f Makefile.mingw64-cross +fi +make -f Makefile.mingw64-cross sqlite3odbc${SEEEXT}nw.dll + +echo "===================================" +echo "Building SQLite3 FTS extensions ..." +echo "===================================" +make -C sqlite3 -f ../mf-sqlite3fts.mingw64-cross clean all +mv sqlite3/sqlite3_mod_fts*.dll . + +echo "=====================================" +echo "Building SQLite3 rtree extensions ..." +echo "=====================================" +make -C sqlite3 -f ../mf-sqlite3rtree.mingw64-cross clean all +mv sqlite3/sqlite3_mod_rtree.dll . + +echo "========================================" +echo "Building SQLite3 extension functions ..." +echo "========================================" +make -f mf-sqlite3extfunc.mingw64-cross clean all + +echo "=========================" +echo "Building drivers ... UTF8" +echo "=========================" +( $nov2 && echo '*** skipped (NO_SQLITE2)' ) || true +$nov2 || make -f Makefile.mingw64-cross sqliteodbcu.dll sqliteu.exe + +echo "=======================" +echo "Cleanup after build ..." +echo "=======================" +$nov2 || make -C sqlite -f ../mf-sqlite.mingw64-cross clean +$nov2 || rm -f sqlite/sqlite.exe +make -C sqlite3 -f ../mf-sqlite3.mingw64-cross clean +make -C sqlite3 -f ../mf-sqlite3fts.mingw64-cross clean +make -C sqlite3 -f ../mf-sqlite3rtree.mingw64-cross clean +make -f mf-sqlite3extfunc.mingw64-cross semiclean + +echo "===========================" +echo "Creating NSIS installer ..." +echo "===========================" +cp -p README readme.txt +unix2dos < license.terms > license.txt || todos < license.terms > license.txt +makensis $ADD_NSIS sqliteodbc_w64.nsi + |
