From 24001c54e7ae33ec858579edd6d2c997d416506c Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Mon, 6 Dec 2021 14:18:56 +0200 Subject: [PATCH 1/2] [3.9] bpo-44035: Check autoconf files thoroughly (GH-29935) Check that users don't push changes with outdated or patched autoconf. The presence of runstatedir option and aclocal 1.16.3 are good markers. Use my container image to regenerate autoconf files. "Check for changes" will fail later when any file is regenerated. Use ccache in check_generated_files to speed up testing.. (cherry picked from commit 98fac8bc183c113903403793ffe411358ee40d8a) Co-authored-by: Christian Heimes --- .github/workflows/build.yml | 21 ++++++++++++++----- .gitignore | 2 ++ .../2021-12-06-09-31-27.bpo-44035.BiO4XC.rst | 2 ++ 3 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-12-06-09-31-27.bpo-44035.BiO4XC.rst diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bb56a42a5e3401..295b24c2cf1361 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -83,6 +83,18 @@ jobs: - uses: actions/setup-python@v2 - name: Install Dependencies run: sudo ./.github/workflows/posix-deps-apt.sh + - name: Add ccache to PATH + run: echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV + - name: Configure ccache action + uses: hendrikmuhs/ccache-action@v1 + - name: Check Autoconf version 2.69 and aclocal 1.16.3 + run: | + grep "Generated by GNU Autoconf 2.69" configure + grep "aclocal 1.16.3" aclocal.m4 + grep -q "runstatedir" configure + grep -q "PKG_PROG_PKG_CONFIG" aclocal.m4 + - name: Regenerate autoconf files + run: docker run --rm -v $(pwd):/src quay.io/tiran/cpython_autoconf:269 - name: Build CPython run: | ./configure --with-pydebug @@ -91,16 +103,15 @@ jobs: run: | changes=$(git status --porcelain) # Check for changes in regenerated files - if ! test -z "$changes" - then - echo "Generated files not up to date. Perhaps you forgot to run make regen-all or build.bat --regen ;)" + if test -n "$changes"; then + echo "Generated files not up to date." + echo "Perhaps you forgot to run make regen-all or build.bat --regen. ;)" + echo "configure files must be regenerated with a specific, unpatched version of autoconf." echo "$changes" exit 1 fi - name: Check exported libpython symbols run: make smelly - - name: Check Autoconf version 2.69 - run: grep "Generated by GNU Autoconf 2.69" configure build_win32: name: 'Windows (x86)' diff --git a/.gitignore b/.gitignore index 0dd3aee5c3151d..1ba44ec5d635b8 100644 --- a/.gitignore +++ b/.gitignore @@ -112,6 +112,8 @@ Tools/unicode/data/ /config.log /config.status /config.status.lineno +# hendrikmuhs/ccache-action@v1 +/.ccache /platform /profile-clean-stamp /profile-run-stamp diff --git a/Misc/NEWS.d/next/Build/2021-12-06-09-31-27.bpo-44035.BiO4XC.rst b/Misc/NEWS.d/next/Build/2021-12-06-09-31-27.bpo-44035.BiO4XC.rst new file mode 100644 index 00000000000000..7530587b73d140 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-12-06-09-31-27.bpo-44035.BiO4XC.rst @@ -0,0 +1,2 @@ +CI now verifies that autoconf files have been regenerated with a current and +unpatched autoconf package. From a12c5e563a89db6e17cc79d8a376ca0857f9513e Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Mon, 6 Dec 2021 13:23:40 +0100 Subject: [PATCH 2/2] Regenerate files with autoconf 2.69 and aclocal 1.16.3 --- aclocal.m4 | 2 +- configure | 78 +++++++++++++++++++++++---------------------------- pyconfig.h.in | 2 +- 3 files changed, 37 insertions(+), 45 deletions(-) diff --git a/aclocal.m4 b/aclocal.m4 index 04342a4982e2dd..e5e804276f501c 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,4 +1,4 @@ -# generated automatically by aclocal 1.16.2 -*- Autoconf -*- +# generated automatically by aclocal 1.16.3 -*- Autoconf -*- # Copyright (C) 1996-2020 Free Software Foundation, Inc. diff --git a/configure b/configure index 33ecb16f71452b..1b1caf84de7d56 100755 --- a/configure +++ b/configure @@ -788,6 +788,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -905,6 +906,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1157,6 +1159,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1294,7 +1305,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1447,6 +1458,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -9920,13 +9932,15 @@ $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# check for libuuid from util-linux save_LIBS=$LIBS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing uuid_generate_time_safe" >&5 -$as_echo_n "checking for library containing uuid_generate_time_safe... " >&6; } -if ${ac_cv_search_uuid_generate_time_safe+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate_time in -luuid" >&5 +$as_echo_n "checking for uuid_generate_time in -luuid... " >&6; } +if ${ac_cv_lib_uuid_uuid_generate_time+:} false; then : $as_echo_n "(cached) " >&6 else - ac_func_search_save_LIBS=$LIBS + ac_check_lib_save_LIBS=$LIBS +LIBS="-luuid $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -9936,61 +9950,39 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #ifdef __cplusplus extern "C" #endif -char uuid_generate_time_safe (); +char uuid_generate_time (); int main () { -return uuid_generate_time_safe (); +return uuid_generate_time (); ; return 0; } _ACEOF -for ac_lib in '' uuid; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_uuid_generate_time_safe=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_uuid_generate_time_safe+:} false; then : - break -fi -done -if ${ac_cv_search_uuid_generate_time_safe+:} false; then : - +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_uuid_uuid_generate_time=yes else - ac_cv_search_uuid_generate_time_safe=no + ac_cv_lib_uuid_uuid_generate_time=no fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS +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_search_uuid_generate_time_safe" >&5 -$as_echo "$ac_cv_search_uuid_generate_time_safe" >&6; } -ac_res=$ac_cv_search_uuid_generate_time_safe -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - - -$as_echo "#define HAVE_LIBUUID 1" >>confdefs.h -, - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate_time" >&5 +$as_echo "$ac_cv_lib_uuid_uuid_generate_time" >&6; } +if test "x$ac_cv_lib_uuid_uuid_generate_time" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBUUID 1 +_ACEOF -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + LIBS="-luuid $LIBS" fi LIBS=$save_LIBS # AIX provides support for RFC4122 (uuid) in libc.a starting with AIX 6.1 (anno 2007) -# FreeBSD and OpenBSD provides support as well +# FreeBSD and OpenBSD provides support in libc as well. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_create" >&5 $as_echo_n "checking for uuid_create... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext diff --git a/pyconfig.h.in b/pyconfig.h.in index 63b013823cbf13..188faeeb120207 100644 --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -613,7 +613,7 @@ /* Define to 1 if you have the header file. */ #undef HAVE_LIBUTIL_H -/* Define you have libuuid. */ +/* Define to 1 if you have the `uuid' library (-luuid). */ #undef HAVE_LIBUUID /* Define if you have the 'link' function. */