Repository navigation
Detect SQLite in configure.ac #89932
Description
Activity
"Autoconfiscate" SQLite detection. Plan:
- Detect header/library using AC_CHECK_HEADERS/AC_CHECK_LIB
- Check required version using AC_COMPILE_IFELSE
- Use AC_CHECK_LIB to check if sqlite3_load_extension is present, and if the result harmonises with --enable-loadable-sqlite-extensions; bail if not
Nice side effect: configure will bail if --enable-loadable-sqlite-extensions is used and the target SQLite library was compiled with SQLITE_OMIT_LOAD_EXTENSION, even if we are not on macOS.
- added3.11only security fixesonly security fixesbuildThe build process and cross-buildThe build process and cross-build
on Nov 9, 2021 Your solution looks very similar to my WIP patch:
AC_CHECK_HEADERS([sqlite3.h],
[AC_SEARCH_LIBS([sqlite3_version], [sqlite3])]
)AS_VAR_IF([ac_cv_search_sqlite3_version], [no], [], [ # found a working sqlite3.h and sqlite3 library # ac_cv_search_sqlite3_version != no LIBS="$LIBS $ac_cv_search_sqlite3_version" AC_CACHE_CHECK([for sqlite3 version >= 3.7.15], [ac_cv_lib_sqlite3_supported], [ AC_LINK_IFELSE([ AC_LANG_PROGRAM([ #include <sqlite3.h> #if SQLITE_VERSION_NUMBER < 3007015 #error "sqlite version is too old" #endif], [] ) ], [ac_cv_lib_sqlite3_supported=yes], [ac_cv_lib_sqlite3_supported=no]) ]) AC_CACHE_CHECK([for sqlite3_enable_load_extension], [ac_cv_lib_sqlite3_sqlite3_enable_load_extension], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM([#include <sqlite3.h>], [void *x = sqlite3_enable_load_extension])], [ac_cv_lib_sqlite3_sqlite3_enable_load_extension=yes], [ac_cv_lib_sqlite3_sqlite3_enable_load_extension=no]) ]) ])
LIBS=$LIBS_SAVE
AS_VAR_IF([ac_cv_lib_sqlite3_supported], [yes],
[AC_DEFINE([HAVE_LIBSQLITE3], [1], [Define to 1 if you have the `sqlite3' library (-lsqlite3).])]
)AS_VAR_IF([ac_cv_lib_sqlite3_sqlite3_enable_load_extension], [yes],
[AC_DEFINE([HAVE_SQLITE3_ENABLE_LOAD_EXTENSION], [1],
[Define to 1 if `sqlite3' library supports sqlite3_enable_load_extension.])]
)Nice. I think I'll steal some of your ideas tomorrow :)
I saw your message concerning sqlite3 on the FreeBSD buildbot. It's hard to tell why configure on FreeBSD doesn't find sqlite3.h without access to config.log or a shell. Maybe sqlite3 is installed in /usr/local ?
configuredoes not use /usr/local/include and /usr/local/lib by default.setup.pyextends the search paths for headers and libraries by non-standard locations.A "config.site" file should do the trick:
$ mkdir -p /usr/local/etc $ cat > /usr/local/etc/config.site << EOF test -z "$CPPFLAGS" && CPPFLAGS="-I$/usr/local/include" test -z "$LDFLAGS" && LDFLAGS="-L/usr/local/lib" EOF
Awesome work! Thanks to your tireless effort we know have a blue print how to use pkg-config for other librariess.
- addedtype-featureA feature request or enhancementA feature request or enhancement
on Nov 19, 2021 Needs amendment before closing. See #73845.
Awesome work! Thanks to your tireless effort we know have a blue print how to use pkg-config for other librariess.
Thank you for reviewing, and thank you for paving the way with all these build system improvements :)
Reopening: the current detection is a little bit weak; many SQLite API's may be disabled at SQLite compile time using SQLITE_OMIT_* defines. We must make sure we've got all vital functions in place before marking the sqlite3 module as present and usable.
The following API's can be omitted using compile time defines:
- sqlite3_column_decltype (SQLITE_OMIT_DECLTYPE)
- sqlite3_complete (SQLITE_OMIT_COMPLETE)
- sqlite3_enable_shared_cache (SQLITE_OMIT_SHARED_CACHE)
- sqlite3_progress_handler (SQLITE_OMIT_PROGRESS_CALLBACK)
- sqlite3_set_authorizer (SQLITE_OMIT_AUTHORIZATION)
- sqlite3_trace_v2 (SQLITE_OMIT_TRACE)
- sqlite3_trace (SQLITE_OMIT_TRACE, SQLITE_OMIT_DEPRECATED)
The following API's _may_ be disabled in the future using SQLITE_OMIT_FLOATING_POINT:
- sqlite3_bind_double
- sqlite3_column_double
- sqlite3_result_double
- sqlite3_value_double
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields: