From 65796278cba5fd4a3beba20d91a8cc56a847bb84 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Fri, 19 Nov 2021 13:24:31 +0100 Subject: [PATCH 1/5] bpo-45723: Add helpers for save/restore env PoC: Apply to SQLite check. --- configure | 40 +++++++++++++++------------- configure.ac | 74 ++++++++++++++++++++++++++++++++-------------------- 2 files changed, 68 insertions(+), 46 deletions(-) diff --git a/configure b/configure index 657c71dca62bdd..e23234c5869cc1 100755 --- a/configure +++ b/configure @@ -2806,6 +2806,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test "$srcdir" != . -a "$srcdir" != "$(pwd)"; then # If we're building out-of-tree, we need to make sure the following # resources get picked up before their $srcdir counterparts. @@ -11022,16 +11023,17 @@ fi as_fn_append LIBSQLITE3_CFLAGS ' -I$(srcdir)/Modules/_sqlite' save_CFLAGS=$CFLAGS -save_CPPFLAGS=$CPPFLAGS -save_LDFLAGS=$LDFLAGS -save_LIBS=$LIBS -CPPFLAGS="$LIBSQLITE3_CFLAGS $CFLAGS" -LDFLAGS="$LIBSQLITE3_LIBS $LDFLAGS" + save_CPPFLAGS=$CPPFLAGS + save_LDFLAGS=$LDFLAGS + save_LIBS=$LIBS + + CPPFLAGS="$LIBSQLITE3_CFLAGS $CFLAGS" + 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 : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_open_v2 in -lsqlite3" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3_open_v2 in -lsqlite3" >&5 $as_echo_n "checking for sqlite3_open_v2 in -lsqlite3... " >&6; } if ${ac_cv_lib_sqlite3_sqlite3_open_v2+:} false; then : $as_echo_n "(cached) " >&6 @@ -11069,15 +11071,15 @@ fi $as_echo "$ac_cv_lib_sqlite3_sqlite3_open_v2" >&6; } if test "x$ac_cv_lib_sqlite3_sqlite3_open_v2" = xyes; then : - have_sqlite3=yes - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + have_sqlite3=yes + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - #include - #if SQLITE_VERSION_NUMBER < 3007015 - # error "SQLite 3.7.15 or higher required" - #endif + #include + #if SQLITE_VERSION_NUMBER < 3007015 + # error "SQLite 3.7.15 or higher required" + #endif int main () @@ -11099,7 +11101,7 @@ else have_sqlite3=no 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_load_extension in -lsqlite3" >&5 $as_echo_n "checking for sqlite3_load_extension in -lsqlite3... " >&6; } if ${ac_cv_lib_sqlite3_sqlite3_load_extension+:} false; then : $as_echo_n "(cached) " >&6 @@ -11149,10 +11151,12 @@ fi -CFLAGS=$save_CFLAGS -CPPFLAGS=$save_CPPFLAGS -LDFLAGS=$save_LDFLAGS -LIBS=$save_LIBS + CFLAGS=$save_CFLAGS + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + + # Check for support for loadable sqlite extensions { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --enable-loadable-sqlite-extensions" >&5 diff --git a/configure.ac b/configure.ac index 4bac7ccf2484ea..4652366e3d23b5 100644 --- a/configure.ac +++ b/configure.ac @@ -23,6 +23,32 @@ m4_ifdef( [AC_MSG_ERROR([Please install pkgconf's m4 macro package and re-run autoreconf])] )dnl +dnl Helpers for saving and restoring environment variables: +dnl - _SAVE_VAR([VAR]) Helper for SAVE_ENV; stores VAR as save_VAR +dnl - _RESTORE_VAR([VAR]) Helper for RESTORE_ENV; restores VAR from save_VAR +dnl - SAVE_ENV Saves CFLAGS, LDFLAGS, LIBS, and CPPFLAGS +dnl - RESTORE_ENV Restores CFLAGS, LDFLAGS, LIBS, and CPPFLAGS +dnl - WITH_SAVE_ENV([SCRIPT]) Runs SCRIPT wrapped with SAVE_ENV/RESTORE_ENV +AC_DEFUN([_SAVE_VAR], [AS_VAR_COPY([save_][$1], [$1])])dnl +AC_DEFUN([_RESTORE_VAR], [AS_VAR_COPY([$1], [save_][$1])])dnl +AC_DEFUN([SAVE_ENV], + [_SAVE_VAR([CFLAGS])] + [_SAVE_VAR([CPPFLAGS])] + [_SAVE_VAR([LDFLAGS])] + [_SAVE_VAR([LIBS])] +)dnl +AC_DEFUN([RESTORE_ENV], + [_RESTORE_VAR([CFLAGS])] + [_RESTORE_VAR([CPPFLAGS])] + [_RESTORE_VAR([LDFLAGS])] + [_RESTORE_VAR([LIBS])] +)dnl +AC_DEFUN([WITH_SAVE_ENV], + [SAVE_ENV] + [$1] + [RESTORE_ENV] +)dnl + AC_SUBST(BASECPPFLAGS) if test "$srcdir" != . -a "$srcdir" != "$(pwd)"; then # If we're building out-of-tree, we need to make sure the following @@ -3175,34 +3201,26 @@ PKG_CHECK_MODULES( AS_VAR_APPEND([LIBSQLITE3_CFLAGS], [' -I$(srcdir)/Modules/_sqlite']) dnl bpo-45774/GH-29507: The CPP check in AC_CHECK_HEADER can fail on FreeBSD, -dnl hence CPPFLAGS instead of CFLAGS. We still need to save CFLAGS, because it -dnl is touched by AC_CHECK_HEADER. -AS_VAR_COPY([save_CFLAGS], [CFLAGS]) -AS_VAR_COPY([save_CPPFLAGS], [CPPFLAGS]) -AS_VAR_COPY([save_LDFLAGS], [LDFLAGS]) -AS_VAR_COPY([save_LIBS], [LIBS]) -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 - #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]) -]) - -AS_VAR_COPY([CFLAGS], [save_CFLAGS]) -AS_VAR_COPY([CPPFLAGS], [save_CPPFLAGS]) -AS_VAR_COPY([LDFLAGS], [save_LDFLAGS]) -AS_VAR_COPY([LIBS], [save_LIBS]) +dnl hence CPPFLAGS instead of CFLAGS. +WITH_SAVE_ENV( + 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 + #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]) + ]) +) # Check for support for loadable sqlite extensions AC_MSG_CHECKING(for --enable-loadable-sqlite-extensions) From cf84557f72f622065bac5e6d39fb157caabd4ca6 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Fri, 19 Nov 2021 15:38:10 +0100 Subject: [PATCH 2/5] Relocate comments --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 4652366e3d23b5..02463ae717e1a1 100644 --- a/configure.ac +++ b/configure.ac @@ -3200,9 +3200,9 @@ PKG_CHECK_MODULES( ) AS_VAR_APPEND([LIBSQLITE3_CFLAGS], [' -I$(srcdir)/Modules/_sqlite']) +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. -WITH_SAVE_ENV( CPPFLAGS="$LIBSQLITE3_CFLAGS $CFLAGS" LDFLAGS="$LIBSQLITE3_LIBS $LDFLAGS" From 37c02b2219ffd4ca9a4d57b62e7d9ce6cb1bd282 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Fri, 19 Nov 2021 15:42:32 +0100 Subject: [PATCH 3/5] Add NEWS --- .../Build/2021-11-19-15-42-27.bpo-45723.vwIJWI.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Misc/NEWS.d/next/Build/2021-11-19-15-42-27.bpo-45723.vwIJWI.rst diff --git a/Misc/NEWS.d/next/Build/2021-11-19-15-42-27.bpo-45723.vwIJWI.rst b/Misc/NEWS.d/next/Build/2021-11-19-15-42-27.bpo-45723.vwIJWI.rst new file mode 100644 index 00000000000000..0f35b19e8660f5 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-11-19-15-42-27.bpo-45723.vwIJWI.rst @@ -0,0 +1,10 @@ +Add ``autoconf`` helpers for saving and restoring environment variables: + +- ``SAVE_ENV``: Save ``$CFLAGS``, ``$LDFLAGS``, ``$LIBS``, and + ``$CPPFLAGS``. +- ``RESTORE_ENV``: Restore ``$CFLAGS``, ``$LDFLAGS``, ``$LIBS``, and + ``$CPPFLAGS``. +- ``WITH_SAVE_ENV([SCRIPT])``: Run ``SCRIPT`` wrapped with ``SAVE_ENV`` and + ``RESTORE_ENV``. + +Patch by Erlend E. Aasland. From c81a3dc737ca780db32af90d0c09577fd8ac5f7d Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Fri, 19 Nov 2021 15:49:36 +0100 Subject: [PATCH 4/5] Fix reST formatting in NEWS entry --- .../next/Build/2021-11-19-15-42-27.bpo-45723.vwIJWI.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Misc/NEWS.d/next/Build/2021-11-19-15-42-27.bpo-45723.vwIJWI.rst b/Misc/NEWS.d/next/Build/2021-11-19-15-42-27.bpo-45723.vwIJWI.rst index 0f35b19e8660f5..51e7735d9ca320 100644 --- a/Misc/NEWS.d/next/Build/2021-11-19-15-42-27.bpo-45723.vwIJWI.rst +++ b/Misc/NEWS.d/next/Build/2021-11-19-15-42-27.bpo-45723.vwIJWI.rst @@ -1,10 +1,10 @@ Add ``autoconf`` helpers for saving and restoring environment variables: -- ``SAVE_ENV``: Save ``$CFLAGS``, ``$LDFLAGS``, ``$LIBS``, and +* ``SAVE_ENV``: Save ``$CFLAGS``, ``$LDFLAGS``, ``$LIBS``, and ``$CPPFLAGS``. -- ``RESTORE_ENV``: Restore ``$CFLAGS``, ``$LDFLAGS``, ``$LIBS``, and +* ``RESTORE_ENV``: Restore ``$CFLAGS``, ``$LDFLAGS``, ``$LIBS``, and ``$CPPFLAGS``. -- ``WITH_SAVE_ENV([SCRIPT])``: Run ``SCRIPT`` wrapped with ``SAVE_ENV`` and +* ``WITH_SAVE_ENV([SCRIPT])``: Run ``SCRIPT`` wrapped with ``SAVE_ENV`` and ``RESTORE_ENV``. Patch by Erlend E. Aasland. From dcc2ba93d99c7ebe1e3d46218caf0adf6c9f4eb9 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Fri, 19 Nov 2021 18:59:00 +0100 Subject: [PATCH 5/5] Try to minimise configure diffs --- configure | 14 +++++++------- configure.ac | 22 +++++++++++----------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/configure b/configure index e23234c5869cc1..34bc902a5d7a82 100755 --- a/configure +++ b/configure @@ -11023,9 +11023,9 @@ fi as_fn_append LIBSQLITE3_CFLAGS ' -I$(srcdir)/Modules/_sqlite' save_CFLAGS=$CFLAGS - save_CPPFLAGS=$CPPFLAGS - save_LDFLAGS=$LDFLAGS - save_LIBS=$LIBS +save_CPPFLAGS=$CPPFLAGS +save_LDFLAGS=$LDFLAGS +save_LIBS=$LIBS CPPFLAGS="$LIBSQLITE3_CFLAGS $CFLAGS" LDFLAGS="$LIBSQLITE3_LIBS $LDFLAGS" @@ -11151,10 +11151,10 @@ fi - CFLAGS=$save_CFLAGS - CPPFLAGS=$save_CPPFLAGS - LDFLAGS=$save_LDFLAGS - LIBS=$save_LIBS +CFLAGS=$save_CFLAGS +CPPFLAGS=$save_CPPFLAGS +LDFLAGS=$save_LDFLAGS +LIBS=$save_LIBS diff --git a/configure.ac b/configure.ac index 02463ae717e1a1..7a2eadd5032b23 100644 --- a/configure.ac +++ b/configure.ac @@ -32,21 +32,21 @@ dnl - WITH_SAVE_ENV([SCRIPT]) Runs SCRIPT wrapped with SAVE_ENV/RESTORE_ENV AC_DEFUN([_SAVE_VAR], [AS_VAR_COPY([save_][$1], [$1])])dnl AC_DEFUN([_RESTORE_VAR], [AS_VAR_COPY([$1], [save_][$1])])dnl AC_DEFUN([SAVE_ENV], - [_SAVE_VAR([CFLAGS])] - [_SAVE_VAR([CPPFLAGS])] - [_SAVE_VAR([LDFLAGS])] - [_SAVE_VAR([LIBS])] +[_SAVE_VAR([CFLAGS])] +[_SAVE_VAR([CPPFLAGS])] +[_SAVE_VAR([LDFLAGS])] +[_SAVE_VAR([LIBS])] )dnl AC_DEFUN([RESTORE_ENV], - [_RESTORE_VAR([CFLAGS])] - [_RESTORE_VAR([CPPFLAGS])] - [_RESTORE_VAR([LDFLAGS])] - [_RESTORE_VAR([LIBS])] +[_RESTORE_VAR([CFLAGS])] +[_RESTORE_VAR([CPPFLAGS])] +[_RESTORE_VAR([LDFLAGS])] +[_RESTORE_VAR([LIBS])] )dnl AC_DEFUN([WITH_SAVE_ENV], - [SAVE_ENV] - [$1] - [RESTORE_ENV] +[SAVE_ENV] +[$1] +[RESTORE_ENV] )dnl AC_SUBST(BASECPPFLAGS)