From: shaneh Date: Tue, 23 Feb 2010 04:19:54 +0000 (+0000) Subject: Test new api to report which options (defines) were used to compile SQLite. X-Git-Tag: version-3.7.2~590^2~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bdea6d13685fd9b33e27c7b89558496a2dbd7a9b;p=thirdparty%2Fsqlite.git Test new api to report which options (defines) were used to compile SQLite. FossilOrigin-Name: 84c9756993caf82710a0905ed1987d144bc764fd --- diff --git a/manifest b/manifest index c851c5f870..69ae5b8fc2 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,5 @@ ------BEGIN PGP SIGNED MESSAGE----- -Hash: SHA1 - -C Add\sthe\s".log"\scommand\sto\sthe\sshell.\s\sThis\sshows\sthat\ssome\serrors\sare\slogged\nmultiple\stimes\sand\sother\serrors\sare\snever\slogged\sat\sall. -D 2010-02-23T01:47:00 +C Test\snew\sapi\sto\sreport\swhich\soptions\s(defines)\swere\sused\sto\scompile\sSQLite. +D 2010-02-23T04:19:55 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in c5827ead754ab32b9585487177c93bb00b9497b3 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -123,7 +120,7 @@ F src/delete.c 610dc008e88a9599f905f5cbe9577ac9c36e0581 F src/expr.c d0a345e1d8995e142bc5d9f39a97b9981d7d8f23 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fkey.c e2116672a6bd610dc888e27df292ebc7999c9bb0 -F src/func.c 3864490a90a03ab1d657cdd04da78879c18b18d1 +F src/func.c 8854b7a234b4272a78941fcc899c117d1839cd4e F src/global.c 5a9c1e3c93213ca574786ac1caa976ce8f709105 F src/hash.c 458488dcc159c301b8e7686280ab209f1fb915af F src/hash.h 2894c932d84d9f892d4b4023a75e501f83050970 @@ -133,7 +130,7 @@ F src/journal.c b0ea6b70b532961118ab70301c00a33089f9315c F src/legacy.c 16f385490f377c2c80a6c7357391d499087defed F src/lempar.c 7f026423f4d71d989e719a743f98a1cbd4e6d99e F src/loadext.c 1c7a61ce1281041f437333f366a96aa0d29bb581 -F src/main.c 36c1c11ee2677ae247e0c947f9293749ee5ac85f +F src/main.c e3e88f01f0f3555b837c867f6cdb9342a5ea3333 F src/malloc.c 5fa175797f982b178eaf38afba9c588a866be729 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 F src/mem1.c 86f33483a343873bab8ae1b648c2eac55462da74 @@ -168,7 +165,7 @@ F src/resolve.c a1648d98e869937b29f4f697461fe4d60f220a7b F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697 F src/select.c 0109b993c360d649857523abb72919e1794f9b45 F src/shell.c 31cd555125a1fda4a6d8dce019690f043a8e5d75 -F src/sqlite.h.in 16f33c1ceb971bfa7a04a73039947630f445146e +F src/sqlite.h.in 451a5a8bb2f6183ac50ae65f45f6e2b8ef4c6439 F src/sqlite3ext.h 69dfb8116af51b84a029cddb3b35062354270c89 F src/sqliteInt.h d5fe1c8335b5bf376639837fa42124327cdb6767 F src/sqliteLimit.h 3afab2291762b5d09ae20c18feb8e9fa935a60a6 @@ -794,14 +791,11 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P c4401fc93b66c5339422d7e765a4a32b1ef96bdb -R 1b44bf57e7d9a663688d30603c70b44c -U drh -Z 75784795cda6fd26f0b8feb0805d2536 ------BEGIN PGP SIGNATURE----- -Version: GnuPG v1.4.6 (GNU/Linux) - -iD8DBQFLgzOYoxKgR168RlERAgluAJ9q3mIeRrQvfpzpmiNDDWtRun1WrQCeME9w -x+Fdmmhc/ksLrbX58/ixhCk= -=d2xc ------END PGP SIGNATURE----- +P 6d910245ad0097521cf1619449cc3d202137b8b8 +R dedbbaae7790d6d9129d67a846293910 +T *bgcolor * pink +T *branch * compile_opts +T *sym-compile_opts * +T -sym-trunk * +U shaneh +Z a5cfd4374a14e6e3e3c31ae8396a940a diff --git a/manifest.uuid b/manifest.uuid index f774487e26..47e5608e9d 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -6d910245ad0097521cf1619449cc3d202137b8b8 \ No newline at end of file +84c9756993caf82710a0905ed1987d144bc764fd \ No newline at end of file diff --git a/src/func.c b/src/func.c index d633ff83c3..19903e71db 100644 --- a/src/func.c +++ b/src/func.c @@ -774,6 +774,21 @@ static void sourceidFunc( sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC); } +/* +** Implementation of the sqlite_compile_opts() function. The result is a string +** that identifies the compiler options used to build SQLite. +*/ +static void compileoptsFunc( + sqlite3_context *context, + int NotUsed, + sqlite3_value **NotUsed2 +){ + UNUSED_PARAMETER2(NotUsed, NotUsed2); + /* IMP: R-xxxx This function is an SQL wrapper around the + ** sqlite3_compileopts() C interface. */ + sqlite3_result_text(context, sqlite3_compileopts(), -1, SQLITE_STATIC); +} + /* Array for converting from half-bytes (nybbles) into ASCII hex ** digits. */ static const char hexdigits[] = { @@ -1505,6 +1520,7 @@ void sqlite3RegisterGlobalFunctions(void){ FUNCTION(nullif, 2, 0, 1, nullifFunc ), FUNCTION(sqlite_version, 0, 0, 0, versionFunc ), FUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ), + FUNCTION(sqlite_compile_opts,0, 0, 0, compileoptsFunc ), FUNCTION(quote, 1, 0, 0, quoteFunc ), FUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid), FUNCTION(changes, 0, 0, 0, changes ), diff --git a/src/main.c b/src/main.c index e4419d269d..78e11d2334 100644 --- a/src/main.c +++ b/src/main.c @@ -36,6 +36,402 @@ const char *sqlite3_libversion(void){ return sqlite3_version; } const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } int sqlite3_libversion_number(void){ return SQLITE_VERSION_NUMBER; } int sqlite3_threadsafe(void){ return SQLITE_THREADSAFE; } +const char *sqlite3_compileopts(void){ + static char zOpts[32] = ""; + sqlite_int64 iEnable = 0; /* bitmask of all the SQLITE_ENABLE* defines */ + sqlite_int64 iOmit = 0; /* bitmask of all the SQLITE_OMIT* defines */ + sqlite_int64 iOther = 0; /* bitmask of all the SQLITE_* defines except */ + /* SQLITE_MAX* and SQLITE_DEF* */ + +#ifdef SQLITE_32BIT_ROWID + iOther |= ((sqlite_int64)1<<0); +#endif +#ifdef SQLITE_4_BYTE_ALIGNED_MALLOC + iOther |= ((sqlite_int64)1<<1); +#endif +#ifdef SQLITE_AMALGAMATION + iOther |= ((sqlite_int64)1<<2); +#endif +#ifdef SQLITE_API + iOther |= ((sqlite_int64)1<<3); +#endif +#ifdef SQLITE_ASCII + iOther |= ((sqlite_int64)1<<4); +#endif +#ifdef SQLITE_BIG_DBL + iOther |= ((sqlite_int64)1<<5); +#endif +#ifdef SQLITE_CASE_SENSITIVE_LIKE + iOther |= ((sqlite_int64)1<<6); +#endif +#ifdef SQLITE_CHECK_PAGES + iOther |= ((sqlite_int64)1<<7); +#endif +#ifdef SQLITE_CORE + iOther |= ((sqlite_int64)1<<8); +#endif +#ifdef SQLITE_COVERAGE_TEST + iOther |= ((sqlite_int64)1<<9); +#endif +#ifdef SQLITE_DEBUG + iOther |= ((sqlite_int64)1<<10); +#endif +#ifdef SQLITE_DISABLE_DIRSYNC + iOther |= ((sqlite_int64)1<<11); +#endif +#ifdef SQLITE_DISABLE_LFS + iOther |= ((sqlite_int64)1<<12); +#endif +#ifdef SQLITE_EBCDIC + iOther |= ((sqlite_int64)1<<13); +#endif +#ifdef SQLITE_ENABLE_ATOMIC_WRITE + iEnable |= ((sqlite_int64)1<<0); +#endif +#ifdef SQLITE_ENABLE_CEROD + iEnable |= ((sqlite_int64)1<<1); +#endif +#ifdef SQLITE_ENABLE_COLUMN_METADATA + iEnable |= ((sqlite_int64)1<<2); +#endif +#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT + iEnable |= ((sqlite_int64)1<<3); +#endif +#ifdef SQLITE_ENABLE_FTS1 + iEnable |= ((sqlite_int64)1<<4); +#endif +#ifdef SQLITE_ENABLE_FTS2 + iEnable |= ((sqlite_int64)1<<5); +#endif +#ifdef SQLITE_ENABLE_FTS3 + iEnable |= ((sqlite_int64)1<<6); +#endif +#ifdef SQLITE_ENABLE_FTS4 + iEnable |= ((sqlite_int64)1<<7); +#endif +#ifdef SQLITE_ENABLE_ICU + iEnable |= ((sqlite_int64)1<<8); +#endif +#ifdef SQLITE_ENABLE_IOTRACE + iEnable |= ((sqlite_int64)1<<9); +#endif +#ifdef SQLITE_ENABLE_LOAD_EXTENSION + iEnable |= ((sqlite_int64)1<<10); +#endif +#ifdef SQLITE_ENABLE_LOCKING_STYLE + iEnable |= ((sqlite_int64)1<<11); +#endif +#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT + iEnable |= ((sqlite_int64)1<<12); +#endif +#ifdef SQLITE_ENABLE_MEMSYS3 + iEnable |= ((sqlite_int64)1<<13); +#endif +#ifdef SQLITE_ENABLE_MEMSYS5 + iEnable |= ((sqlite_int64)1<<14); +#endif +#ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK + iEnable |= ((sqlite_int64)1<<15); +#endif +#ifdef SQLITE_ENABLE_RTREE + iEnable |= ((sqlite_int64)1<<16); +#endif +#ifdef SQLITE_ENABLE_STAT2 + iEnable |= ((sqlite_int64)1<<17); +#endif +#ifdef SQLITE_ENABLE_UNLOCK_NOTIFY + iEnable |= ((sqlite_int64)1<<18); +#endif +#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT + iEnable |= ((sqlite_int64)1<<19); +#endif +#ifdef SQLITE_EXTERN + iOther |= ((sqlite_int64)1<<14); +#endif +#ifdef SQLITE_FILE_HEADER + iOther |= ((sqlite_int64)1<<15); +#endif +#ifdef SQLITE_HAS_CODEC + iOther |= ((sqlite_int64)1<<16); +#endif +#ifdef SQLITE_HAVE_ISNAN + iOther |= ((sqlite_int64)1<<17); +#endif +#ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX + iOther |= ((sqlite_int64)1<<18); +#endif +#ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS + iOther |= ((sqlite_int64)1<<19); +#endif +#ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS + iOther |= ((sqlite_int64)1<<20); +#endif +#ifdef SQLITE_INT64_TYPE + iOther |= ((sqlite_int64)1<<21); +#endif +#ifdef SQLITE_INTEGRITY_CHECK_ERROR_MAX + iOther |= ((sqlite_int64)1<<22); +#endif +#ifdef SQLITE_LOCK_TRACE + iOther |= ((sqlite_int64)1<<23); +#endif +#ifdef SQLITE_MALLOC_SOFT_LIMIT + iOther |= ((sqlite_int64)1<<24); +#endif +#ifdef SQLITE_MEMDEBUG + iOther |= ((sqlite_int64)1<<25); +#endif +#ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT + iOther |= ((sqlite_int64)1<<26); +#endif +#ifdef SQLITE_MUTEX_NOOP + iOther |= ((sqlite_int64)1<<27); +#endif +#ifdef SQLITE_MUTEX_OMIT + iOther |= ((sqlite_int64)1<<28); +#endif +#ifdef SQLITE_MUTEX_OS2 + iOther |= ((sqlite_int64)1<<29); +#endif +#ifdef SQLITE_MUTEX_PTHREADS + iOther |= ((sqlite_int64)1<<30); +#endif +#ifdef SQLITE_MUTEX_W32 + iOther |= ((sqlite_int64)1<<31); +#endif +#ifdef SQLITE_NO_SYNC + iOther |= ((sqlite_int64)1<<32); +#endif +#ifdef SQLITE_N_COLCACHE + iOther |= ((sqlite_int64)1<<33); +#endif +#ifdef SQLITE_N_KEYWORD + iOther |= ((sqlite_int64)1<<34); +#endif +#ifdef SQLITE_OMIT_ALTERTABLE + iOmit |= ((sqlite_int64)1<<0); +#endif +#ifdef SQLITE_OMIT_ANALYZE + iOmit |= ((sqlite_int64)1<<1); +#endif +#ifdef SQLITE_OMIT_ATTACH + iOmit |= ((sqlite_int64)1<<2); +#endif +#ifdef SQLITE_OMIT_AUTHORIZATION + iOmit |= ((sqlite_int64)1<<3); +#endif +#ifdef SQLITE_OMIT_AUTOINCREMENT + iOmit |= ((sqlite_int64)1<<4); +#endif +#ifdef SQLITE_OMIT_AUTOINIT + iOmit |= ((sqlite_int64)1<<5); +#endif +#ifdef SQLITE_OMIT_AUTOVACUUM + iOmit |= ((sqlite_int64)1<<6); +#endif +#ifdef SQLITE_OMIT_BETWEEN_OPTIMIZATION + iOmit |= ((sqlite_int64)1<<7); +#endif +#ifdef SQLITE_OMIT_BLOB_LITERAL + iOmit |= ((sqlite_int64)1<<8); +#endif +#ifdef SQLITE_OMIT_BTREECOUNT + iOmit |= ((sqlite_int64)1<<9); +#endif +#ifdef SQLITE_OMIT_BUILTIN_TEST + iOmit |= ((sqlite_int64)1<<10); +#endif +#ifdef SQLITE_OMIT_CAST + iOmit |= ((sqlite_int64)1<<11); +#endif +#ifdef SQLITE_OMIT_CHECK + iOmit |= ((sqlite_int64)1<<12); +#endif +#ifdef SQLITE_OMIT_COMPLETE + iOmit |= ((sqlite_int64)1<<13); +#endif +#ifdef SQLITE_OMIT_COMPOUND_SELECT + iOmit |= ((sqlite_int64)1<<14); +#endif +#ifdef SQLITE_OMIT_DATETIME_FUNCS + iOmit |= ((sqlite_int64)1<<15); +#endif +#ifdef SQLITE_OMIT_DECLTYPE + iOmit |= ((sqlite_int64)1<<16); +#endif +#ifdef SQLITE_OMIT_DEPRECATED + iOmit |= ((sqlite_int64)1<<17); +#endif +#ifdef SQLITE_OMIT_DISKIO + iOmit |= ((sqlite_int64)1<<18); +#endif +#ifdef SQLITE_OMIT_EXPLAIN + iOmit |= ((sqlite_int64)1<<19); +#endif +#ifdef SQLITE_OMIT_FLAG_PRAGMAS + iOmit |= ((sqlite_int64)1<<20); +#endif +#ifdef SQLITE_OMIT_FLOATING_POINT + iOmit |= ((sqlite_int64)1<<21); +#endif +#ifdef SQLITE_OMIT_FOREIGN_KEY + iOmit |= ((sqlite_int64)1<<22); +#endif +#ifdef SQLITE_OMIT_GET_TABLE + iOmit |= ((sqlite_int64)1<<23); +#endif +#ifdef SQLITE_OMIT_GLOBALRECOVER + iOmit |= ((sqlite_int64)1<<24); +#endif +#ifdef SQLITE_OMIT_INCRBLOB + iOmit |= ((sqlite_int64)1<<25); +#endif +#ifdef SQLITE_OMIT_INTEGRITY_CHECK + iOmit |= ((sqlite_int64)1<<26); +#endif +#ifdef SQLITE_OMIT_LIKE_OPTIMIZATION + iOmit |= ((sqlite_int64)1<<27); +#endif +#ifdef SQLITE_OMIT_LOAD_EXTENSION + iOmit |= ((sqlite_int64)1<<28); +#endif +#ifdef SQLITE_OMIT_LOCALTIME + iOmit |= ((sqlite_int64)1<<29); +#endif +#ifdef SQLITE_OMIT_LOOKASIDE + iOmit |= ((sqlite_int64)1<<30); +#endif +#ifdef SQLITE_OMIT_MEMORYDB + iOmit |= ((sqlite_int64)1<<31); +#endif +#ifdef SQLITE_OMIT_OR_OPTIMIZATION + iOmit |= ((sqlite_int64)1<<32); +#endif +#ifdef SQLITE_OMIT_PAGER_PRAGMAS + iOmit |= ((sqlite_int64)1<<33); +#endif +#ifdef SQLITE_OMIT_PRAGMA + iOmit |= ((sqlite_int64)1<<34); +#endif +#ifdef SQLITE_OMIT_PROGRESS_CALLBACK + iOmit |= ((sqlite_int64)1<<35); +#endif +#ifdef SQLITE_OMIT_QUICKBALANCE + iOmit |= ((sqlite_int64)1<<36); +#endif +#ifdef SQLITE_OMIT_REINDEX + iOmit |= ((sqlite_int64)1<<37); +#endif +#ifdef SQLITE_OMIT_SCHEMA_PRAGMAS + iOmit |= ((sqlite_int64)1<<38); +#endif +#ifdef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS + iOmit |= ((sqlite_int64)1<<39); +#endif +#ifdef SQLITE_OMIT_SHARED_CACHE + iOmit |= ((sqlite_int64)1<<40); +#endif +#ifdef SQLITE_OMIT_SUBQUERY + iOmit |= ((sqlite_int64)1<<41); +#endif +#ifdef SQLITE_OMIT_TCL_VARIABLE + iOmit |= ((sqlite_int64)1<<42); +#endif +#ifdef SQLITE_OMIT_TEMPDB + iOmit |= ((sqlite_int64)1<<43); +#endif +#ifdef SQLITE_OMIT_TRACE + iOmit |= ((sqlite_int64)1<<44); +#endif +#ifdef SQLITE_OMIT_TRIGGER + iOmit |= ((sqlite_int64)1<<45); +#endif +#ifdef SQLITE_OMIT_TRUNCATE_OPTIMIZATION + iOmit |= ((sqlite_int64)1<<46); +#endif +#ifdef SQLITE_OMIT_UTF16 + iOmit |= ((sqlite_int64)1<<47); +#endif +#ifdef SQLITE_OMIT_VACUUM + iOmit |= ((sqlite_int64)1<<48); +#endif +#ifdef SQLITE_OMIT_VIEW + iOmit |= ((sqlite_int64)1<<49); +#endif +#ifdef SQLITE_OMIT_VIRTUALTABLE + iOmit |= ((sqlite_int64)1<<50); +#endif +#ifdef SQLITE_OMIT_WSD + iOmit |= ((sqlite_int64)1<<51); +#endif +#ifdef SQLITE_OMIT_XFER_OPT + iOmit |= ((sqlite_int64)1<<52); +#endif +#ifdef SQLITE_OS_OTHER + iOther |= ((sqlite_int64)1<<35); +#endif +#ifdef SQLITE_OS_UNIX + iOther |= ((sqlite_int64)1<<36); +#endif +#ifdef SQLITE_PERFORMANCE_TRACE + iOther |= ((sqlite_int64)1<<37); +#endif +#ifdef SQLITE_PRINT_BUF_SIZE + iOther |= ((sqlite_int64)1<<38); +#endif +#ifdef SQLITE_PRIVATE + iOther |= ((sqlite_int64)1<<39); +#endif +#ifdef SQLITE_PROXY_DEBUG + iOther |= ((sqlite_int64)1<<40); +#endif +#ifdef SQLITE_SECURE_DELETE + iOther |= ((sqlite_int64)1<<41); +#endif +#ifdef SQLITE_SMALL_STACK + iOther |= ((sqlite_int64)1<<42); +#endif +#ifdef SQLITE_SOUNDEX + iOther |= ((sqlite_int64)1<<43); +#endif +#ifdef SQLITE_SYSTEM_MALLOC + iOther |= ((sqlite_int64)1<<44); +#endif +#ifdef SQLITE_TCL + iOther |= ((sqlite_int64)1<<45); +#endif +#ifdef SQLITE_TEMP_FILE_PREFIX + iOther |= ((sqlite_int64)1<<46); +#endif +#ifdef SQLITE_TEMP_STORE + iOther |= ((sqlite_int64)1<<47); +#endif +#ifdef SQLITE_TEST + iOther |= ((sqlite_int64)1<<48); +#endif +#ifdef SQLITE_TEXT + iOther |= ((sqlite_int64)1<<49); +#endif +#ifdef SQLITE_THREADSAFE + iOther |= ((sqlite_int64)1<<50); +#endif +#ifdef SQLITE_USE_ALLOCA + iOther |= ((sqlite_int64)1<<51); +#endif +#ifdef SQLITE_VERSION + iOther |= ((sqlite_int64)1<<52); +#endif +#ifdef SQLITE_VERSION_NUMBER + iOther |= ((sqlite_int64)1<<53); +#endif +#ifdef SQLITE_ZERO_MALLOC + iOther |= ((sqlite_int64)1<<54); +#endif + + sqlite3_snprintf(sizeof(zOpts)-1, zOpts, + "%016llx%016llx%016llx", iEnable, iOmit, iOther); + return zOpts; +} #if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE) /* diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 1c0a5bf52b..d7860a392d 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -130,16 +130,20 @@ extern "C" { ** function is provided for use in DLLs since DLL users usually do not have ** direct access to string constants within the DLL. ^The ** sqlite3_libversion_number() function returns an integer equal to -** [SQLITE_VERSION_NUMBER]. ^The sqlite3_sourceid() function a pointer -** to a string constant whose value is the same as the [SQLITE_SOURCE_ID] -** C preprocessor macro. +** [SQLITE_VERSION_NUMBER]. ^The sqlite3_sourceid() function returns +** a pointer to a string constant whose value is the same as the +** [SQLITE_SOURCE_ID] C preprocessor macro. ^The sqlite3_compileopts() +** function returns a pointer to a string constant whose value describes +** the compiler options used. ** -** See also: [sqlite_version()] and [sqlite_source_id()]. +** See also: [sqlite_version()], [sqlite_source_id()], +** and [sqlite_compile_opts()]. */ SQLITE_EXTERN const char sqlite3_version[]; const char *sqlite3_libversion(void); const char *sqlite3_sourceid(void); int sqlite3_libversion_number(void); +const char *sqlite3_compileopts(void); /* ** CAPI3REF: Test To See If The Library Is Threadsafe