bpo-45774: Harden SQLite detection (GH-30016)

This commit is contained in:
Erlend Egeberg Aasland 2022-04-05 14:54:47 +02:00 committed by GitHub
parent 0aa8d5cbd8
commit f1606a5ba5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 643 additions and 69 deletions

View file

@ -0,0 +1,2 @@
``configure`` now verifies that all SQLite C APIs needed for the
:mod:`sqlite3` extension module are found.

613
configure generated vendored
View file

@ -1742,8 +1742,8 @@ Optional Features:
--enable-optimizations enable expensive, stable optimizations (PGO, etc.) --enable-optimizations enable expensive, stable optimizations (PGO, etc.)
(default is no) (default is no)
--enable-loadable-sqlite-extensions --enable-loadable-sqlite-extensions
support loadable extensions in _sqlite module, see support loadable extensions in the sqlite3 module,
Doc/library/sqlite3.rst (default is no) see Doc/library/sqlite3.rst (default is no)
--enable-ipv6 enable ipv6 (with ipv4) support, see --enable-ipv6 enable ipv6 (with ipv4) support, see
Doc/library/socket.rst (default is yes if supported) Doc/library/socket.rst (default is yes if supported)
--enable-big-digits[=15|30] --enable-big-digits[=15|30]
@ -12262,20 +12262,47 @@ $as_echo "yes" >&6; }
fi fi
as_fn_append LIBSQLITE3_CFLAGS ' -I$(srcdir)/Modules/_sqlite' as_fn_append LIBSQLITE3_CFLAGS ' -I$(srcdir)/Modules/_sqlite'
save_CFLAGS=$CFLAGS save_CFLAGS=$CFLAGS
save_CPPFLAGS=$CPPFLAGS save_CPPFLAGS=$CPPFLAGS
save_LDFLAGS=$LDFLAGS save_LDFLAGS=$LDFLAGS
save_LIBS=$LIBS save_LIBS=$LIBS
CPPFLAGS="$LIBSQLITE3_CFLAGS $CFLAGS" CPPFLAGS="$LIBSQLITE3_CFLAGS $CFLAGS"
LDFLAGS="$LIBSQLITE3_LIBS $LDFLAGS" LDFLAGS="$LIBSQLITE3_LIBS $LDFLAGS"
ac_fn_c_check_header_mongrel "$LINENO" "sqlite3.h" "ac_cv_header_sqlite3_h" "$ac_includes_default" ac_fn_c_check_header_mongrel "$LINENO" "sqlite3.h" "ac_cv_header_sqlite3_h" "$ac_includes_default"
if test "x$ac_cv_header_sqlite3_h" = xyes; then : if test "x$ac_cv_header_sqlite3_h" = xyes; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_open_v2 in -lsqlite3" >&5 have_sqlite3=yes
$as_echo_n "checking for sqlite3_open_v2 in -lsqlite3... " >&6; }
if ${ac_cv_lib_sqlite3_sqlite3_open_v2+:} false; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sqlite3.h>
#if SQLITE_VERSION_NUMBER < 3007015
# error "SQLite 3.7.15 or higher required"
#endif
int
main ()
{
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
have_supported_sqlite3=yes
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_bind_double in -lsqlite3" >&5
$as_echo_n "checking for sqlite3_bind_double in -lsqlite3... " >&6; }
if ${ac_cv_lib_sqlite3_sqlite3_bind_double+:} false; then :
$as_echo_n "(cached) " >&6 $as_echo_n "(cached) " >&6
else else
ac_check_lib_save_LIBS=$LIBS ac_check_lib_save_LIBS=$LIBS
@ -12289,59 +12316,552 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
#endif #endif
char sqlite3_open_v2 (); char sqlite3_bind_double ();
int int
main () main ()
{ {
return sqlite3_open_v2 (); return sqlite3_bind_double ();
; ;
return 0; return 0;
} }
_ACEOF _ACEOF
if ac_fn_c_try_link "$LINENO"; then : if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_sqlite3_sqlite3_open_v2=yes ac_cv_lib_sqlite3_sqlite3_bind_double=yes
else else
ac_cv_lib_sqlite3_sqlite3_open_v2=no ac_cv_lib_sqlite3_sqlite3_bind_double=no
fi fi
rm -f core conftest.err conftest.$ac_objext \ rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS LIBS=$ac_check_lib_save_LIBS
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_open_v2" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_bind_double" >&5
$as_echo "$ac_cv_lib_sqlite3_sqlite3_open_v2" >&6; } $as_echo "$ac_cv_lib_sqlite3_sqlite3_bind_double" >&6; }
if test "x$ac_cv_lib_sqlite3_sqlite3_open_v2" = xyes; then : if test "x$ac_cv_lib_sqlite3_sqlite3_bind_double" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBSQLITE3 1
_ACEOF
have_sqlite3=yes LIBS="-lsqlite3 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
else
have_supported_sqlite3=no
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_column_decltype in -lsqlite3" >&5
$as_echo_n "checking for sqlite3_column_decltype in -lsqlite3... " >&6; }
if ${ac_cv_lib_sqlite3_sqlite3_column_decltype+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsqlite3 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */ /* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
#include <sqlite3.h> Use char because int might match the return type of a GCC
#if SQLITE_VERSION_NUMBER < 3007015 builtin and then its argument prototype would still apply. */
# error "SQLite 3.7.15 or higher required" #ifdef __cplusplus
#endif extern "C"
#endif
char sqlite3_column_decltype ();
int int
main () main ()
{ {
return sqlite3_column_decltype ();
; ;
return 0; return 0;
} }
_ACEOF _ACEOF
if ac_fn_c_try_compile "$LINENO"; then : if ac_fn_c_try_link "$LINENO"; then :
have_supported_sqlite3=yes ac_cv_lib_sqlite3_sqlite3_column_decltype=yes
else else
have_supported_sqlite3=no ac_cv_lib_sqlite3_sqlite3_column_decltype=no
fi fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_column_decltype" >&5
$as_echo "$ac_cv_lib_sqlite3_sqlite3_column_decltype" >&6; }
if test "x$ac_cv_lib_sqlite3_sqlite3_column_decltype" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBSQLITE3 1
_ACEOF
LIBS="-lsqlite3 $LIBS"
else else
have_sqlite3=no
have_supported_sqlite3=no
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_load_extension in -lsqlite3" >&5
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_column_double in -lsqlite3" >&5
$as_echo_n "checking for sqlite3_column_double in -lsqlite3... " >&6; }
if ${ac_cv_lib_sqlite3_sqlite3_column_double+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsqlite3 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char sqlite3_column_double ();
int
main ()
{
return sqlite3_column_double ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_sqlite3_sqlite3_column_double=yes
else
ac_cv_lib_sqlite3_sqlite3_column_double=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_column_double" >&5
$as_echo "$ac_cv_lib_sqlite3_sqlite3_column_double" >&6; }
if test "x$ac_cv_lib_sqlite3_sqlite3_column_double" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBSQLITE3 1
_ACEOF
LIBS="-lsqlite3 $LIBS"
else
have_supported_sqlite3=no
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_complete in -lsqlite3" >&5
$as_echo_n "checking for sqlite3_complete in -lsqlite3... " >&6; }
if ${ac_cv_lib_sqlite3_sqlite3_complete+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsqlite3 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char sqlite3_complete ();
int
main ()
{
return sqlite3_complete ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_sqlite3_sqlite3_complete=yes
else
ac_cv_lib_sqlite3_sqlite3_complete=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_complete" >&5
$as_echo "$ac_cv_lib_sqlite3_sqlite3_complete" >&6; }
if test "x$ac_cv_lib_sqlite3_sqlite3_complete" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBSQLITE3 1
_ACEOF
LIBS="-lsqlite3 $LIBS"
else
have_supported_sqlite3=no
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_enable_shared_cache in -lsqlite3" >&5
$as_echo_n "checking for sqlite3_enable_shared_cache in -lsqlite3... " >&6; }
if ${ac_cv_lib_sqlite3_sqlite3_enable_shared_cache+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsqlite3 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char sqlite3_enable_shared_cache ();
int
main ()
{
return sqlite3_enable_shared_cache ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_sqlite3_sqlite3_enable_shared_cache=yes
else
ac_cv_lib_sqlite3_sqlite3_enable_shared_cache=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_enable_shared_cache" >&5
$as_echo "$ac_cv_lib_sqlite3_sqlite3_enable_shared_cache" >&6; }
if test "x$ac_cv_lib_sqlite3_sqlite3_enable_shared_cache" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBSQLITE3 1
_ACEOF
LIBS="-lsqlite3 $LIBS"
else
have_supported_sqlite3=no
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_progress_handler in -lsqlite3" >&5
$as_echo_n "checking for sqlite3_progress_handler in -lsqlite3... " >&6; }
if ${ac_cv_lib_sqlite3_sqlite3_progress_handler+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsqlite3 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char sqlite3_progress_handler ();
int
main ()
{
return sqlite3_progress_handler ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_sqlite3_sqlite3_progress_handler=yes
else
ac_cv_lib_sqlite3_sqlite3_progress_handler=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_progress_handler" >&5
$as_echo "$ac_cv_lib_sqlite3_sqlite3_progress_handler" >&6; }
if test "x$ac_cv_lib_sqlite3_sqlite3_progress_handler" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBSQLITE3 1
_ACEOF
LIBS="-lsqlite3 $LIBS"
else
have_supported_sqlite3=no
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_result_double in -lsqlite3" >&5
$as_echo_n "checking for sqlite3_result_double in -lsqlite3... " >&6; }
if ${ac_cv_lib_sqlite3_sqlite3_result_double+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsqlite3 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char sqlite3_result_double ();
int
main ()
{
return sqlite3_result_double ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_sqlite3_sqlite3_result_double=yes
else
ac_cv_lib_sqlite3_sqlite3_result_double=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_result_double" >&5
$as_echo "$ac_cv_lib_sqlite3_sqlite3_result_double" >&6; }
if test "x$ac_cv_lib_sqlite3_sqlite3_result_double" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBSQLITE3 1
_ACEOF
LIBS="-lsqlite3 $LIBS"
else
have_supported_sqlite3=no
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_set_authorizer in -lsqlite3" >&5
$as_echo_n "checking for sqlite3_set_authorizer in -lsqlite3... " >&6; }
if ${ac_cv_lib_sqlite3_sqlite3_set_authorizer+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsqlite3 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char sqlite3_set_authorizer ();
int
main ()
{
return sqlite3_set_authorizer ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_sqlite3_sqlite3_set_authorizer=yes
else
ac_cv_lib_sqlite3_sqlite3_set_authorizer=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_set_authorizer" >&5
$as_echo "$ac_cv_lib_sqlite3_sqlite3_set_authorizer" >&6; }
if test "x$ac_cv_lib_sqlite3_sqlite3_set_authorizer" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBSQLITE3 1
_ACEOF
LIBS="-lsqlite3 $LIBS"
else
have_supported_sqlite3=no
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_trace_v2 in -lsqlite3" >&5
$as_echo_n "checking for sqlite3_trace_v2 in -lsqlite3... " >&6; }
if ${ac_cv_lib_sqlite3_sqlite3_trace_v2+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsqlite3 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char sqlite3_trace_v2 ();
int
main ()
{
return sqlite3_trace_v2 ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_sqlite3_sqlite3_trace_v2=yes
else
ac_cv_lib_sqlite3_sqlite3_trace_v2=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_trace_v2" >&5
$as_echo "$ac_cv_lib_sqlite3_sqlite3_trace_v2" >&6; }
if test "x$ac_cv_lib_sqlite3_sqlite3_trace_v2" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBSQLITE3 1
_ACEOF
LIBS="-lsqlite3 $LIBS"
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_trace in -lsqlite3" >&5
$as_echo_n "checking for sqlite3_trace in -lsqlite3... " >&6; }
if ${ac_cv_lib_sqlite3_sqlite3_trace+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsqlite3 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char sqlite3_trace ();
int
main ()
{
return sqlite3_trace ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_sqlite3_sqlite3_trace=yes
else
ac_cv_lib_sqlite3_sqlite3_trace=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_trace" >&5
$as_echo "$ac_cv_lib_sqlite3_sqlite3_trace" >&6; }
if test "x$ac_cv_lib_sqlite3_sqlite3_trace" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBSQLITE3 1
_ACEOF
LIBS="-lsqlite3 $LIBS"
else
have_supported_sqlite3=no
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_value_double in -lsqlite3" >&5
$as_echo_n "checking for sqlite3_value_double in -lsqlite3... " >&6; }
if ${ac_cv_lib_sqlite3_sqlite3_value_double+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lsqlite3 $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char sqlite3_value_double ();
int
main ()
{
return sqlite3_value_double ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_sqlite3_sqlite3_value_double=yes
else
ac_cv_lib_sqlite3_sqlite3_value_double=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sqlite3_sqlite3_value_double" >&5
$as_echo "$ac_cv_lib_sqlite3_sqlite3_value_double" >&6; }
if test "x$ac_cv_lib_sqlite3_sqlite3_value_double" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBSQLITE3 1
_ACEOF
LIBS="-lsqlite3 $LIBS"
else
have_supported_sqlite3=no
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_load_extension in -lsqlite3" >&5
$as_echo_n "checking for sqlite3_load_extension in -lsqlite3... " >&6; } $as_echo_n "checking for sqlite3_load_extension in -lsqlite3... " >&6; }
if ${ac_cv_lib_sqlite3_sqlite3_load_extension+:} false; then : if ${ac_cv_lib_sqlite3_sqlite3_load_extension+:} false; then :
$as_echo_n "(cached) " >&6 $as_echo_n "(cached) " >&6
@ -12381,9 +12901,17 @@ if test "x$ac_cv_lib_sqlite3_sqlite3_load_extension" = xyes; then :
have_sqlite3_load_extension=yes have_sqlite3_load_extension=yes
else else
have_sqlite3_load_extension=no have_sqlite3_load_extension=no
fi fi
else
have_supported_sqlite3=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi fi
@ -12395,30 +12923,37 @@ LIBS=$save_LIBS
# Check for support for loadable sqlite extensions
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-loadable-sqlite-extensions" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-loadable-sqlite-extensions" >&5
$as_echo_n "checking for --enable-loadable-sqlite-extensions... " >&6; } $as_echo_n "checking for --enable-loadable-sqlite-extensions... " >&6; }
# Check whether --enable-loadable-sqlite-extensions was given. # Check whether --enable-loadable-sqlite-extensions was given.
if test "${enable_loadable_sqlite_extensions+set}" = set; then : if test "${enable_loadable_sqlite_extensions+set}" = set; then :
enableval=$enable_loadable_sqlite_extensions; if test "x$have_sqlite3_load_extension" = xno; then : enableval=$enable_loadable_sqlite_extensions;
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Your version of SQLite does not support loadable extensions" >&5 if test "x$have_sqlite3_load_extension" = xno; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: n/a" >&5
$as_echo "n/a" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Your version of SQLite does not support loadable extensions" >&5
$as_echo "$as_me: WARNING: Your version of SQLite does not support loadable extensions" >&2;} $as_echo "$as_me: WARNING: Your version of SQLite does not support loadable extensions" >&2;}
fi
else else
enable_loadable_sqlite_extensions=no
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_loadable_sqlite_extensions" >&5
$as_echo "$enable_loadable_sqlite_extensions" >&6; }
if test "x$enable_loadable_sqlite_extensions" = xyes; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
$as_echo "#define PY_SQLITE_ENABLE_LOAD_EXTENSION 1" >>confdefs.h $as_echo "#define PY_SQLITE_ENABLE_LOAD_EXTENSION 1" >>confdefs.h
fi fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
found_tcltk=no found_tcltk=no
for _QUERY in \ for _QUERY in \
"tcl >= 8.5.12 tk >= 8.5.12" \ "tcl >= 8.5.12 tk >= 8.5.12" \

View file

@ -3562,45 +3562,79 @@ PKG_CHECK_MODULES(
) )
AS_VAR_APPEND([LIBSQLITE3_CFLAGS], [' -I$(srcdir)/Modules/_sqlite']) 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 bpo-45774/GH-29507: The CPP check in AC_CHECK_HEADER can fail on FreeBSD,
dnl hence CPPFLAGS instead of CFLAGS. dnl hence CPPFLAGS instead of CFLAGS.
CPPFLAGS="$LIBSQLITE3_CFLAGS $CFLAGS" CPPFLAGS="$LIBSQLITE3_CFLAGS $CFLAGS"
LDFLAGS="$LIBSQLITE3_LIBS $LDFLAGS" LDFLAGS="$LIBSQLITE3_LIBS $LDFLAGS"
AC_CHECK_HEADER([sqlite3.h], [ AC_CHECK_HEADER([sqlite3.h], [
AC_CHECK_LIB([sqlite3], [sqlite3_open_v2], [ have_sqlite3=yes
have_sqlite3=yes
AC_COMPILE_IFELSE([ AC_COMPILE_IFELSE([
AC_LANG_PROGRAM([ AC_LANG_PROGRAM([
#include <sqlite3.h> #include <sqlite3.h>
#if SQLITE_VERSION_NUMBER < 3007015 #if SQLITE_VERSION_NUMBER < 3007015
# error "SQLite 3.7.15 or higher required" # error "SQLite 3.7.15 or higher required"
#endif #endif
], []) ], [])
], [have_supported_sqlite3=yes], [have_supported_sqlite3=no]) ], [
], [have_sqlite3=no]) have_supported_sqlite3=yes
AC_CHECK_LIB([sqlite3], [sqlite3_load_extension], dnl Check that required functions are in place. A lot of stuff may be
[have_sqlite3_load_extension=yes], dnl omitted with SQLITE_OMIT_* compile time defines.
[have_sqlite3_load_extension=no]) 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
])
]) ])
)
# 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.])
]) ])
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
dnl Detect Tcl/Tk. Use pkg-config if available. dnl Detect Tcl/Tk. Use pkg-config if available.
dnl dnl

View file

@ -655,6 +655,9 @@
/* Define to 1 if you have the `sendfile' library (-lsendfile). */ /* Define to 1 if you have the `sendfile' library (-lsendfile). */
#undef HAVE_LIBSENDFILE #undef HAVE_LIBSENDFILE
/* Define to 1 if you have the `sqlite3' library (-lsqlite3). */
#undef HAVE_LIBSQLITE3
/* Define to 1 if you have the <libutil.h> header file. */ /* Define to 1 if you have the <libutil.h> header file. */
#undef HAVE_LIBUTIL_H #undef HAVE_LIBUTIL_H