summaryrefslogtreecommitdiffstats
path: root/configure.ac
diff options
context:
space:
mode:
authorErlend Egeberg Aasland <erlend.aasland@innova.no>2022-04-05 12:54:47 (GMT)
committerGitHub <noreply@github.com>2022-04-05 12:54:47 (GMT)
commitf1606a5ba50bdc4e7d335d62297b4b4043a25e6e (patch)
tree52cc9f04d2d3df8a96ca9bdc6781ec9c5377b600 /configure.ac
parent0aa8d5cbd89cf3b61d7e8626f3a7b9c4881dfd70 (diff)
downloadcpython-f1606a5ba50bdc4e7d335d62297b4b4043a25e6e.zip
cpython-f1606a5ba50bdc4e7d335d62297b4b4043a25e6e.tar.gz
cpython-f1606a5ba50bdc4e7d335d62297b4b4043a25e6e.tar.bz2
bpo-45774: Harden SQLite detection (GH-30016)
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac94
1 files changed, 64 insertions, 30 deletions
diff --git a/configure.ac b/configure.ac
index 53bbc3e..c02adf7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3562,45 +3562,79 @@ PKG_CHECK_MODULES(
)
AS_VAR_APPEND([LIBSQLITE3_CFLAGS], [' -I$(srcdir)/Modules/_sqlite'])
-WITH_SAVE_ENV(
+dnl PY_CHECK_SQLITE_FUNC(FUNCTION, IF-FOUND, IF-NOT-FOUND)
+AC_DEFUN([PY_CHECK_SQLITE_FUNC], [
+ AC_CHECK_LIB([sqlite3], [$1], [$2], [
+ m4_ifblank([$3], [have_supported_sqlite3=no], [$3])
+ ])
+])
+
+WITH_SAVE_ENV([
dnl bpo-45774/GH-29507: The CPP check in AC_CHECK_HEADER can fail on FreeBSD,
dnl hence CPPFLAGS instead of CFLAGS.
CPPFLAGS="$LIBSQLITE3_CFLAGS $CFLAGS"
LDFLAGS="$LIBSQLITE3_LIBS $LDFLAGS"
AC_CHECK_HEADER([sqlite3.h], [
- AC_CHECK_LIB([sqlite3], [sqlite3_open_v2], [
- have_sqlite3=yes
- AC_COMPILE_IFELSE([
- AC_LANG_PROGRAM([
- #include <sqlite3.h>
- #if SQLITE_VERSION_NUMBER < 3007015
- # error "SQLite 3.7.15 or higher required"
- #endif
- ], [])
- ], [have_supported_sqlite3=yes], [have_supported_sqlite3=no])
- ], [have_sqlite3=no])
- AC_CHECK_LIB([sqlite3], [sqlite3_load_extension],
- [have_sqlite3_load_extension=yes],
- [have_sqlite3_load_extension=no])
- ])
-)
+ have_sqlite3=yes
-# Check for support for loadable sqlite extensions
-AC_MSG_CHECKING(for --enable-loadable-sqlite-extensions)
-AC_ARG_ENABLE(loadable-sqlite-extensions,
- AS_HELP_STRING([--enable-loadable-sqlite-extensions],
- [support loadable extensions in _sqlite module, see Doc/library/sqlite3.rst (default is no)]),
- [AS_VAR_IF([have_sqlite3_load_extension], [no],
- [AC_MSG_WARN([Your version of SQLite does not support loadable extensions])])],
- [enable_loadable_sqlite_extensions=no])
-AC_MSG_RESULT($enable_loadable_sqlite_extensions)
-
-AS_VAR_IF([enable_loadable_sqlite_extensions], [yes], [
- AC_DEFINE(PY_SQLITE_ENABLE_LOAD_EXTENSION, 1,
- [Define to 1 to build the sqlite module with loadable extensions support.])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([
+ #include <sqlite3.h>
+ #if SQLITE_VERSION_NUMBER < 3007015
+ # error "SQLite 3.7.15 or higher required"
+ #endif
+ ], [])
+ ], [
+ have_supported_sqlite3=yes
+ dnl Check that required functions are in place. A lot of stuff may be
+ dnl omitted with SQLITE_OMIT_* compile time defines.
+ PY_CHECK_SQLITE_FUNC([sqlite3_bind_double])
+ PY_CHECK_SQLITE_FUNC([sqlite3_column_decltype])
+ PY_CHECK_SQLITE_FUNC([sqlite3_column_double])
+ PY_CHECK_SQLITE_FUNC([sqlite3_complete])
+ PY_CHECK_SQLITE_FUNC([sqlite3_enable_shared_cache])
+ PY_CHECK_SQLITE_FUNC([sqlite3_progress_handler])
+ PY_CHECK_SQLITE_FUNC([sqlite3_result_double])
+ PY_CHECK_SQLITE_FUNC([sqlite3_set_authorizer])
+ PY_CHECK_SQLITE_FUNC([sqlite3_trace_v2], [], [
+ PY_CHECK_SQLITE_FUNC([sqlite3_trace])
+ ])
+ PY_CHECK_SQLITE_FUNC([sqlite3_value_double])
+ AC_CHECK_LIB([sqlite3], [sqlite3_load_extension],
+ [have_sqlite3_load_extension=yes],
+ [have_sqlite3_load_extension=no]
+ )
+ ], [
+ have_supported_sqlite3=no
+ ])
+ ])
])
+dnl Check for support for loadable sqlite extensions
+AC_MSG_CHECKING([for --enable-loadable-sqlite-extensions])
+AC_ARG_ENABLE([loadable-sqlite-extensions],
+ AS_HELP_STRING(
+ [--enable-loadable-sqlite-extensions], [
+ support loadable extensions in the sqlite3 module, see
+ Doc/library/sqlite3.rst (default is no)
+ ]
+ ), [
+ AS_VAR_IF([have_sqlite3_load_extension], [no], [
+ AC_MSG_RESULT([n/a])
+ AC_MSG_WARN([Your version of SQLite does not support loadable extensions])
+ ], [
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(
+ [PY_SQLITE_ENABLE_LOAD_EXTENSION], [1],
+ [Define to 1 to build the sqlite module with loadable extensions support.]
+ )
+ ])
+ ], [
+ AC_MSG_RESULT([no])
+ ]
+)
+
dnl
dnl Detect Tcl/Tk. Use pkg-config if available.
dnl