GF
GF copied to clipboard
Decouple outdated SQLite3 Btree dependency
Right now, the module src/runtime/c/sg includes a custom version (namely sqlite3Btree.{c,h}) of an outdated snapshot of SQLite's source.
These files mention functions such as sqlite3StrICmp
which are nowhere defined and are thus leading to undefined reference
errors; at least when building for Windows which does not allow unknown references in shared libraries afaik. See also https://groups.google.com/forum/#!topic/gf-dev/BkYwEl0SE00 where the exact issued build instructions can be found.
I tried replacing sqlite3Btree.{c,h} by the most recent SQLite3 amalgamation files, however, the internal API of sqlite3Btree changed.
For example, the old sqlite3BtreeInsert
's function signature contained in this repository looks like
https://github.com/GrammaticalFramework/GF/blob/6cf80c07691354a2e716914839c1eb8cdeb3c3a7/src/runtime/c/sg/sqlite3Btree.h#L601-L603
but the current one (as found in the amalgamation sqlite3.c
) looks like
SQLITE_PRIVATE int sqlite3BtreeInsert(BtCursor*, const BtreePayload *pPayload,
int flags, int seekResult);
As SQLITE_PRIVATE also indicates, the Btree API was never meant to be stable and publicly accessible.
Follow-up: I got a cross-compilation from Ubuntu to Windows working by manually defining all missing functions (i.e. copy-pasting from the SQLite source until all references were saturated):
- https://github.com/ComFreek/reproducible-gf-runtime/blob/7f615048e86d12488a4bcdb12c8b123fd017c638/sqlite3-fix.c
- which is included by the build script in
src/runtime/c/sg/sg.c
: https://github.com/ComFreek/reproducible-gf-runtime/blob/7f615048e86d12488a4bcdb12c8b123fd017c638/build-win.sh#L34
Still, I hope this issue gets fixed since my hacky approach probably introduced a handful of bugs and logical inconsistencies in addition to those already present in the outdated SQLite source contained in this repo.