summaryrefslogtreecommitdiff
path: root/tools/sqlcompattest.c
diff options
context:
space:
mode:
authorcashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
committercashmere <cashmere@autistici.org>2026-09-04 09:05:24 +0200
commit4f49b16079b27d7ce633619e4cddfdf2bffbc952 (patch)
treec296c1e7f3c3e2f6859c6d3a1b1b208779b89679 /tools/sqlcompattest.c
downloadrelic-4f49b16079b27d7ce633619e4cddfdf2bffbc952.tar.gz
initial commitHEADmaster
Diffstat (limited to 'tools/sqlcompattest.c')
-rw-r--r--tools/sqlcompattest.c89
1 files changed, 89 insertions, 0 deletions
diff --git a/tools/sqlcompattest.c b/tools/sqlcompattest.c
new file mode 100644
index 0000000..57378af
--- /dev/null
+++ b/tools/sqlcompattest.c
@@ -0,0 +1,89 @@
+/*
+** Copyright (c) 2019 D. Richard Hipp
+**
+** This program is free software; you can redistribute it and/or
+** modify it under the terms of the Simplified BSD License (also
+** known as the "2-Clause License" or "FreeBSD License".)
+**
+** This program is distributed in the hope that it will be useful,
+** but without any warranty; without even the implied warranty of
+** merchantability or fitness for a particular purpose.
+**
+** Author contact information:
+** drh@hwaci.com
+** http://www.hwaci.com/drh/
+**
+*******************************************************************************
+**
+** This file is NOT part of the Fossil executable. It is called from
+** auto.def in the autosetup system.
+**
+** This file contains a test program used by ../configure with the
+** the --disable-internal-sqlite option to determine whether or
+** not the system SQLite library is sufficient to support Fossil.
+**
+** This must be compiled with -D MINIMUM_SQLITE_VERSION set in auto.def.
+**
+** It is preferred to statically link Fossil with the sqlite3.c source
+** file that is part of the source tree and not use any SQLite shared
+** library that is included with the system. But some packagers do not
+** like to do this. Hence, we provide the option to link Fossil against
+** the system SQLite shared library. But Fossil is very particular about
+** the version and build options for SQLite. Unless a recent version of
+** SQLite is available, and unless that SQLite is built using some
+** non-default features, the system library won't meet the needs of
+** Fossil. This program attempts to determine if the system library
+** SQLite is sufficient for Fossil.
+**
+** Compile this program, linking it against the system SQLite library,
+** and run it. If it returns with a zero exit code, then all is well.
+** But if it returns a non-zero exit code, then the system SQLite library
+** lacks some capability that Fossil uses. A message on stdout describes
+** the missing feature.
+*/
+#include "sqlite3.h"
+#include <stdio.h>
+#include <string.h>
+
+int main(int argc, char **argv){
+
+#if !defined(MINIMUM_SQLITE_VERSION)
+#error "Must set -DMINIMUM_SQLITE_VERSION=nn.nn.nn in auto.def"
+#endif
+
+#define QUOTE(VAL) #VAL
+#define STR(MACRO_VAL) QUOTE(MACRO_VAL)
+
+ char zMinimumVersionNumber[8]="nn.nn.nn";
+ strncpy((char *)&zMinimumVersionNumber,STR(MINIMUM_SQLITE_VERSION),
+ sizeof(zMinimumVersionNumber));
+
+ long major, minor, release, version;
+ sscanf(zMinimumVersionNumber, "%li.%li.%li", &major, &minor, &release);
+ version=(major*1000000)+(minor*1000)+release;
+
+ int i;
+ static const char *zRequiredOpts[] = {
+ "ENABLE_FTS4", /* Required for repository search */
+ "ENABLE_DBSTAT_VTAB", /* Required by /repo-tabsize page */
+ };
+
+ /* Check minimum SQLite version number */
+ if( sqlite3_libversion_number()<version ){
+ printf("found system SQLite version %s but need %s or later, "
+ "consider removing --disable-internal-sqlite\n",
+ sqlite3_libversion(),STR(MINIMUM_SQLITE_VERSION));
+ return 1;
+ }
+
+ for(i=0; i<sizeof(zRequiredOpts)/sizeof(zRequiredOpts[0]); i++){
+ if( !sqlite3_compileoption_used(zRequiredOpts[i]) ){
+ printf("system SQLite library omits required build option -DSQLITE_%s\n",
+ zRequiredOpts[i]);
+ return 1;
+ }
+ }
+
+ /* Success! */
+ return 0;
+}