From da56b3f7cbddac22e012d6b9b662af3bcd778c5c33df8f87221cd4424497e6ca Mon Sep 17 00:00:00 2001 From: Dirk Mueller Date: Sat, 16 Jan 2021 22:06:09 +0000 Subject: [PATCH] - add autom4te-always-update-output-file.patch to fix testsuite failures - add autom4te-always-update-output-file.patch to fix testsuite failures OBS-URL: https://build.opensuse.org/package/show/devel:tools:building/autoconf?expand=0&rev=49 --- autoconf-el.changes | 11 + autoconf-testsuite.changes | 11 + autoconf-testsuite.spec | 9 + autoconf.changes | 5 + autoconf.spec | 9 + handle-gettext-alone.patch | 58 + prog-c99-fix-typo.patch | 31 + restore-compatibility-gnu11.patch | 1913 +++++++++++++++++++++++++++++ 8 files changed, 2047 insertions(+) create mode 100644 handle-gettext-alone.patch create mode 100644 prog-c99-fix-typo.patch create mode 100644 restore-compatibility-gnu11.patch diff --git a/autoconf-el.changes b/autoconf-el.changes index 51c9fb9..8dbb554 100644 --- a/autoconf-el.changes +++ b/autoconf-el.changes @@ -1,3 +1,14 @@ +------------------------------------------------------------------- +Sat Jan 16 18:47:23 UTC 2021 - Dirk Müller + +- add autom4te-always-update-output-file.patch to fix testsuite + failures +- handle-gettext-alone.patch: support GNU_GETTEXT alone being called + again +- add prog-c99-fix-typo.patch: fix typo in C99 detection +- add restore-compatibility-gnu11.patch: restore compatibility in GNU11 + mode + ------------------------------------------------------------------- Sun Dec 13 18:52:47 UTC 2020 - Andreas Stieger diff --git a/autoconf-testsuite.changes b/autoconf-testsuite.changes index 51c9fb9..8dbb554 100644 --- a/autoconf-testsuite.changes +++ b/autoconf-testsuite.changes @@ -1,3 +1,14 @@ +------------------------------------------------------------------- +Sat Jan 16 18:47:23 UTC 2021 - Dirk Müller + +- add autom4te-always-update-output-file.patch to fix testsuite + failures +- handle-gettext-alone.patch: support GNU_GETTEXT alone being called + again +- add prog-c99-fix-typo.patch: fix typo in C99 detection +- add restore-compatibility-gnu11.patch: restore compatibility in GNU11 + mode + ------------------------------------------------------------------- Sun Dec 13 18:52:47 UTC 2020 - Andreas Stieger diff --git a/autoconf-testsuite.spec b/autoconf-testsuite.spec index f6b8f91..157961c 100644 --- a/autoconf-testsuite.spec +++ b/autoconf-testsuite.spec @@ -28,6 +28,12 @@ Source2: %{name}.keyring Patch0: autoreconf-ltdl.diff # PATCH-FIX-UPSTREAM Patch1: https://git.savannah.gnu.org/cgit/autoconf.git/patch/?id=07130c3e48d12ec155ac5d7630dc7477b6989904#/autom4te-always-update-output-file.patch +# PATCH-FIX-UPSTREAM +Patch2: https://git.savannah.gnu.org/cgit/autoconf.git/patch/?id=05972f49ee632cd98057a3caf82ebfb9574846da#/prog-c99-fix-typo.patch +# PATCH-FIX-UPSTREAM +Patch3: https://git.savannah.gnu.org/cgit/autoconf.git/patch/?id=66fdaea3cfb4e758212c1891913e9a59441d49af#/handle-gettext-alone.patch +# PATCH-FIX-UPSTREAM https://git.savannah.gnu.org/cgit/autoconf.git/patch/?id=2d0f19d84ddb13412382674fd48e6fc5c2875d0e +Patch4: restore-compatibility-gnu11.patch BuildRequires: help2man BuildRequires: m4 >= 1.4.6 Requires: info @@ -55,6 +61,9 @@ only required for the generation of the scripts, not their use. %setup -q -n autoconf-%{version} %patch0 %patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 %build %configure diff --git a/autoconf.changes b/autoconf.changes index 51f9861..8dbb554 100644 --- a/autoconf.changes +++ b/autoconf.changes @@ -3,6 +3,11 @@ Sat Jan 16 18:47:23 UTC 2021 - Dirk Müller - add autom4te-always-update-output-file.patch to fix testsuite failures +- handle-gettext-alone.patch: support GNU_GETTEXT alone being called + again +- add prog-c99-fix-typo.patch: fix typo in C99 detection +- add restore-compatibility-gnu11.patch: restore compatibility in GNU11 + mode ------------------------------------------------------------------- Sun Dec 13 18:52:47 UTC 2020 - Andreas Stieger diff --git a/autoconf.spec b/autoconf.spec index 31064b2..5c6de21 100644 --- a/autoconf.spec +++ b/autoconf.spec @@ -28,6 +28,12 @@ Source2: %{name}.keyring Patch0: autoreconf-ltdl.diff # PATCH-FIX-UPSTREAM Patch1: https://git.savannah.gnu.org/cgit/autoconf.git/patch/?id=07130c3e48d12ec155ac5d7630dc7477b6989904#/autom4te-always-update-output-file.patch +# PATCH-FIX-UPSTREAM +Patch2: https://git.savannah.gnu.org/cgit/autoconf.git/patch/?id=05972f49ee632cd98057a3caf82ebfb9574846da#/prog-c99-fix-typo.patch +# PATCH-FIX-UPSTREAM +Patch3: https://git.savannah.gnu.org/cgit/autoconf.git/patch/?id=66fdaea3cfb4e758212c1891913e9a59441d49af#/handle-gettext-alone.patch +# PATCH-FIX-UPSTREAM https://git.savannah.gnu.org/cgit/autoconf.git/patch/?id=2d0f19d84ddb13412382674fd48e6fc5c2875d0e +Patch4: restore-compatibility-gnu11.patch BuildRequires: help2man BuildRequires: m4 >= 1.4.6 Requires: info @@ -55,6 +61,9 @@ only required for the generation of the scripts, not their use. %setup -q -n autoconf-%{version} %patch0 %patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 %build %configure diff --git a/handle-gettext-alone.patch b/handle-gettext-alone.patch new file mode 100644 index 0000000..80e00cf --- /dev/null +++ b/handle-gettext-alone.patch @@ -0,0 +1,58 @@ +From 66fdaea3cfb4e758212c1891913e9a59441d49af Mon Sep 17 00:00:00 2001 +From: Zack Weinberg +Date: Mon, 4 Jan 2021 17:27:37 -0500 +Subject: =?UTF-8?q?autoreconf:=20don=E2=80=99t=20error=20out=20when=20AM?= + =?UTF-8?q?=5FGNU=5FGETTEXT=20is=20used=20alone.?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Some projects intentionally don't call AM_GNU_GETTEXT_(REQUIRE_)VERSION +because they have all of the gettext infrastructure checked into version +control and they want autoreconf to _not_ run autopoint. Therefore, make +the “AM_GNU_GETTEXT is used, but not AM_GNU_GETTEXT_(REQUIRE_)VERSION” +and “AM_GNU_GETTEXT_(REQUIRE_)VERSION is used, but not AM_GNU_GETTEXT” +diagnostics be warnings again, as they were in 2.69. + +(Technically these diagnostics were always errors, in the sense that +they were reported with a call to Autom4te::Channels::error(), but +prior to 2.70, error() calls made by autoreconf did not cause +autoreconf to exit unsuccessfully, due to an unrelated bug. So people +came to depend on these diagnostics not being fatal.) +--- + bin/autoreconf.in | 18 +++++++++++------- + 1 file changed, 11 insertions(+), 7 deletions(-) + +diff --git a/bin/autoreconf.in b/bin/autoreconf.in +index bb9f316d..9855efbe 100644 +--- a/bin/autoreconf.in ++++ b/bin/autoreconf.in +@@ -644,14 +644,18 @@ sub autoreconf_current_directory ($) + } + } + +- # Gettext consistency checks... +- error($configure_ac, +- "AM_GNU_GETTEXT is used, but not AM_GNU_GETTEXT_VERSION" +- . " or AM_GNU_GETTEXT_REQUIRE_VERSION") ++ # Gettext consistency checks. ++ # Some projects intentionally don't call AM_GNU_GETTEXT_(REQUIRE_)VERSION ++ # because they have all of the gettext infrastructure checked into version ++ # control and they want us to _not_ run autopoint. Therefore, these ++ # diagnostics are only warnings. ++ msg('syntax', $configure_ac, ++ "AM_GNU_GETTEXT is used, but not AM_GNU_GETTEXT_VERSION" ++ . " or AM_GNU_GETTEXT_REQUIRE_VERSION") + if $uses_gettext_via_traces && ! $uses_gettext; +- error($configure_ac, +- "AM_GNU_GETTEXT_VERSION or AM_GNU_GETTEXT_REQUIRE_VERSION is used," +- . " but not AM_GNU_GETTEXT") ++ msg('syntax', $configure_ac, ++ "AM_GNU_GETTEXT_VERSION or AM_GNU_GETTEXT_REQUIRE_VERSION is used," ++ . " but not AM_GNU_GETTEXT") + if $uses_gettext && ! $uses_gettext_via_traces; + + +-- +cgit v1.2.1 + diff --git a/prog-c99-fix-typo.patch b/prog-c99-fix-typo.patch new file mode 100644 index 0000000..3d541ff --- /dev/null +++ b/prog-c99-fix-typo.patch @@ -0,0 +1,31 @@ +From 05972f49ee632cd98057a3caf82ebfb9574846da Mon Sep 17 00:00:00 2001 +From: Zack Weinberg +Date: Tue, 8 Dec 2020 21:35:45 -0500 +Subject: _AC_PROG_CC_C99: fix typo (#110396) + +_AC_PROG_CC_C99 was using the wrong test program. + +Fixes #110396, reported anonymously. + +* lib/autoconf/c.m4 (_AC_PROG_CC_C99): Use the C99 test program, not + the C89 test program. +--- + lib/autoconf/c.m4 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/autoconf/c.m4 b/lib/autoconf/c.m4 +index fe217cad..601c2df4 100644 +--- a/lib/autoconf/c.m4 ++++ b/lib/autoconf/c.m4 +@@ -1559,7 +1559,7 @@ dnl SVR4 -Xc -D__EXTENSIONS__ + # option to output variable CC to make it so. + AC_DEFUN([_AC_PROG_CC_C99], + [AC_REQUIRE([_AC_C_C99_TEST_PROGRAM])]dnl +-[_AC_C_STD_TRY([c99], [ac_c_conftest_c89_program], ++[_AC_C_STD_TRY([c99], [ac_c_conftest_c99_program], + dnl Try + dnl GCC -std=gnu99 (unused restrictive modes: -std=c99 -std=iso9899:1999) + dnl IBM XL C -qlanglvl=extc1x (V12.1; does not pass C11 test) +-- +cgit v1.2.1 + diff --git a/restore-compatibility-gnu11.patch b/restore-compatibility-gnu11.patch new file mode 100644 index 0000000..e310399 --- /dev/null +++ b/restore-compatibility-gnu11.patch @@ -0,0 +1,1913 @@ +From 2d0f19d84ddb13412382674fd48e6fc5c2875d0e Mon Sep 17 00:00:00 2001 +From: Zack Weinberg +Date: Mon, 21 Dec 2020 14:04:22 -0500 +Subject: Restore compatibility with older std-gnu11.m4. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Gnulib’s std-gnu11.m4 backports C11 and C++11 detection to autoconf +2.69. It does this by replacing the definitions of AC_PROC_CC and +AC_PROG_CXX and most of their subroutines. In particular, it replaces +the definitions of _AC_PROG_CC_C11, _AC_PROG_CC_C99, and _AC_C_STD_TRY, +but it does *not* replace the definition of _AC_PROG_CC_C89. + +Autoconf commit 131d8c69f31dc6fc8dc93abe1096d52d1fe19fd3 changed the +calling convention of _AC_C_STD_TRY, and changed the internal +definitions of _AC_PROG_CC_C{11,99,89} to match. If std-gnu11.m4 is +in use, our _AC_PROG_CC_C89 calls their _AC_C_STD_TRY with the new +calling convention, and this produces a syntactically invalid +configure script. (This is is fortunate: it could easily have been a +runtime malfunction that only manifested with compilers that only +implement C89, and then we might not have noticed the problem for +years.) + +Gnulib commit a3b3fc85e3e632374811b27cb2111e50fa177e36 makes +std-gnu11.m4 do nothing when used with autoconf >=2.70, but older +versions of the file will circulate for years to come, so this patch +works around the problem in autoconf. It does this by renaming all of +the internal macros involved with C and C++ standard edition +detection, *except* _AC_PROG_CC_C89. AC_PROG_CC now calls +_AC_PROG_CC_STDC_EDITION, which loops over all supported editions +calling _AC_PROG_CC_STDC_EDITION_TRY, which uses the data provided by +the existing _AC_C_C${edition}_TEST_PROGRAM macros and a new set of +macros called _AC_C_C${edition}_OPTIONS to perform the test for that +edition of the standard. Similarly, AC_PROG_CXX calls +_AC_PROG_CXX_STDCXX_EDITION, which loops calling +_AC_PROG_CXX_STDCXX_EDITION_TRY, which uses data from +_AC_CXX_CXX${edition}_TEST_PROGRAM and _AC_CXX_CXX${edition}_OPTIONS. + +_AC_PROG_CC_C89 is the only macro from the old set that we still +define, and its definition is reverted to what std-gnu11.m4 expects it +to be. Nothing in Autoconf proper uses it anymore. + +foreign.at grows a test to verify that the compatibility stub version +of _AC_PROG_CC_C89 does its job. Since this is now the third test +involving an embedded copy of a third-party macro, I broke them all +out of foreign.at to separate files in test/data/. + +In addition to fixing the breakage, this patch should make it easier +to extend C / C++ standard edition detection in the future, by getting +rid of the if-else chains in AC_PROG_CC/CXX and by disentangling the +lists of command-line options to test from the logic. + +I also changed the manual to suggest people refer to the variables +‘ac_prog_cc_stdc’ and ‘ac_prog_cxx_stdcxx’ to learn which edition +of the C and C++ standards are selected; these are much easier to +work with than the ac_cv_prog_cc_cNN cache variables. + +* lib/autoconf/c.m4 (_AC_C_STD_TRY, _AC_PROG_CC_C99, _AC_PROG_CC_C11) + (_AC_CXX_STD_TRY, _AC_PROG_CXX_CXX98, _AC_PROG_CXX_CXX11): Remove macro. + + (_AC_C_C89_OPTIONS, _AC_C_C99_OPTIONS, _AC_C_C11_OPTIONS) + (_AC_PROG_CC_STDC_EDITION, _AC_PROG_CC_STDC_EDITION_TRY) + (_AC_CXX_CXX98_OPTIONS, _AC_CXX_CXX11_OPTIONS) + (_AC_PROG_CXX_STDCXX_EDITION, _AC_PROG_CXX_STDCXX_EDITION_TRY): New macros. + + (_AC_PROG_CC_C89): Convert to compatibility stub for std-gnu11.m4. + + (AC_PROG_CC): Use _AC_PROG_CC_STDC_EDITION. + (AC_PROG_CXX): Use _AC_PROG_CXX_STDCXX_EDITION. + +* tests/data/ax_prog_cc_for_build_v18.m4 +* tests/data/ax_prog_cxx_for_build_v3.m4 +* tests/data/gnulib_std_gnu11_2020_08_17.m4: New files. +* tests/foreign.at (AX_PROG_CC_FOR_BUILD, AX_PROG_CXX_FOR_BUILD): + Remove embedded copy of ax_prog_cc_for_build_v18.m4, + ax_prog_cxx_for_build_v3.m4 respectively. + (gnulib-std-gnu11.m4): New test. +* tests/local.mk: Distribute tests/data/*.m4. + +* doc/autoconf.texi (AC_PROG_CC, AC_PROG_CXX): Document use of + ac_prog_cc_stdc / ac_prog_cxx_stdcxx, respectively, to tell which + edition of the C / C++ standards are selected, instead of looking + through a series of cache variables with awkward definitions. +--- + doc/autoconf.texi | 45 +- + lib/autoconf/c.m4 | 444 +++++++++------- + tests/data/ax_prog_cc_for_build_v18.m4 | 139 +++++ + tests/data/ax_prog_cxx_for_build_v3.m4 | 110 ++++ + tests/data/gnulib_std_gnu11_2020_08_17.m4 | 824 ++++++++++++++++++++++++++++++ + tests/foreign.at | 215 ++------ + tests/local.mk | 7 +- + 7 files changed, 1384 insertions(+), 400 deletions(-) + create mode 100644 tests/data/ax_prog_cc_for_build_v18.m4 + create mode 100644 tests/data/ax_prog_cxx_for_build_v3.m4 + create mode 100644 tests/data/gnulib_std_gnu11_2020_08_17.m4 + +--- a/lib/autoconf/c.m4 ++++ b/lib/autoconf/c.m4 +@@ -498,19 +498,7 @@ else + GCC= + fi + _AC_PROG_CC_G +-dnl +-dnl Set ac_prog_cc_stdc to the supported C version. +-dnl Also set the documented variable ac_cv_prog_cc_stdc; +-dnl its name was chosen when it was cached, but it is no longer cached. +-_AC_PROG_CC_C11([ac_prog_cc_stdc=c11 +- ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11], +- [_AC_PROG_CC_C99([ac_prog_cc_stdc=c99 +- ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99], +- [_AC_PROG_CC_C89([ac_prog_cc_stdc=c89 +- ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89], +- [ac_prog_cc_stdc=no +- ac_cv_prog_cc_stdc=no])])]) +-dnl ++_AC_PROG_CC_STDC_EDITION + AC_LANG_POP(C)dnl + ])# AC_PROG_CC + +@@ -745,13 +733,7 @@ else + GXX= + fi + _AC_PROG_CXX_G +-_AC_PROG_CXX_CXX11([ac_prog_cxx_stdcxx=cxx11 +- ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 +- ac_cv_prog_cxx_cxx98=$ac_cv_prog_cxx_cxx11], +- [_AC_PROG_CXX_CXX98([ac_prog_cxx_stdcxx=cxx98 +- ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98], +- [ac_prog_cxx_stdcxx=no +- ac_cv_prog_cxx_stdcxx=no])]) ++_AC_PROG_CXX_STDCXX_EDITION + AC_LANG_POP(C++)dnl + ])# AC_PROG_CXX + +@@ -1496,114 +1478,170 @@ main (int argc, char **argv) + ]])]) + + +-# _AC_C_STD_TRY(STANDARD, TEST-PROGRAM-HOLDER, OPTION-LIST, +-# ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE) +-# -------------------------------------------------------------- +-# Check whether the C compiler accepts features of STANDARD (e.g `c89', `c99') +-# by trying to compile the program in the shell variable TEST-PROGRAM-HOLDER. +-# Caller is responsible for making sure this variable has been initialized. +-# If compilation fails in the default mode, try again with each compiler +-# option in the space-separated OPTION-LIST; if one helps, append it to CC. +-# If eventually successful, run ACTION-IF-AVAILABLE, else ACTION-IF-UNAVAILABLE. +-AC_DEFUN([_AC_C_STD_TRY], ++# _AC_C_C89_OPTIONS ++# ----------------- ++# Whitespace-separated list of options that might put the C compiler ++# into a mode conforming to ISO C1990 with extensions. Do not try ++# "strictly conforming" modes (e.g. gcc's -std=c90); they break some ++# systems' header files. If more than one option is needed, put ++# shell quotes around the group. ++# ++# AIX circa 2003 -qlanglvl=extc89 ++# old AIX -qlanglvl=ansi ++# Ultrix, OSF/1, Tru64 -std ++# HP-UX 10.20 and later -Ae ++# HP-UX older versions -Aa -D_HPUX_SOURCE ++# SVR4 -Xc -D__EXTENSIONS__ ++m4_define([_AC_C_C89_OPTIONS], [ ++ -qlanglvl=extc89 ++ -qlanglvl=ansi ++ -std ++ -Ae ++ "-Aa -D_HPUX_SOURCE" ++ "-Xc -D__EXTENSIONS__" ++]) ++ ++ ++# _AC_C_C99_OPTIONS ++# ----------------- ++# Whitespace-separated list of options that might put the C compiler ++# into a mode conforming to ISO C1999 with extensions. Do not try ++# "strictly conforming" modes (e.g. gcc's -std=c99); they break some ++# systems' header files. If more than one option is needed, put ++# shell quotes around the group. ++# ++# GCC, Clang -std=gnu99 ++# Intel ICC -std=c99, -c99 (deprecated) ++# Note: because -std=c99 puts GCC in strictly conforming mode, ++# this option must be tested *after* -std=gnu99. ++# IRIX -c99 ++# Tru64 -c99 ++# IBM XL C -qlanglvl=extc1x (V12.1; does not pass C11 test) ++# IBM XL C -qlanglvl=extc99 (pre-V12.1) ++# HP cc -AC99 ++# Solaris -D_STDC_C99= ++# Note: acc's -xc99 option uses linker magic to define the external ++# symbol __xpg4 as if by "int __xpg4 = 1;", which enables C99 ++# behavior for C library functions. This is not wanted here, ++# because it means that a single module compiled with -xc99 alters ++# C runtime behavior for the entire program, not for just the ++# module. Instead, define the (private) symbol _STDC_C99, which ++# suppresses a bogus failure in . The resulting compiler ++# passes the test case here, and that's good enough. ++# For more, please see the thread starting at: ++# https://lists.gnu.org/archive/html/autoconf/2010-12/msg00059.html ++m4_define([_AC_C_C99_OPTIONS], [ ++ -std=gnu99 ++ -std=c99 ++ -c99 ++ -qlanglvl=extc1x ++ -qlanglvl=extc99 ++ -AC99 ++ -D_STDC_C99= ++]) ++ ++ ++# _AC_C_C11_OPTIONS ++# ----------------- ++# Whitespace-separated list of options that might put the C compiler ++# into a mode conforming to ISO C2011 with extensions. Do not try ++# "strictly conforming" modes (e.g. gcc's -std=c11); they break some ++# systems' header files. If more than one option is needed, put ++# shell quotes around the group. ++# ++# GCC, Clang -std=gnu11 ++# ++# For IBM XL C for AIX V16.1 or later, '-std=gnu11' should work if ++# the user configured with CC='xlclang'. Otherwise, do not try ++# -qlanglvl=extc1x as xlc with IBM XL C V16.1 (the latest version as ++# of August 2020) does not pass the C11 test. Instead, try extc1x when ++# compiling the C99 test instead, since it enables _Static_assert and ++# _Noreturn, which is a win. ++m4_define([_AC_C_C11_OPTIONS], [ ++ -std=gnu11 ++]) ++ ++ ++# _AC_PROG_CC_STDC_EDITION_TRY(EDITION) ++# ------------------------------------- ++# Subroutine of _AC_PROG_CC_STDC_EDITION. Not to be called directly. ++# ++# Check whether the C compiler accepts features of EDITION of the ++# C standard. EDITION should be a two-digit year (e.g. 89, 99, 11). ++# (FIXME: Switch to four-digit years for futureproofing.) ++# This is done by compiling the test program defined by ++# _AC_C_C{EDITION}_TEST_PROGRAM, first with no additional ++# command-line options, and then with each of the options ++# in the space-separated list defined by _AC_C_C{EDITION}_OPTIONS. ++# ++# If we find a way to make the test program compile, set cache variable ++# ac_cv_prog_cc_cEDITION to the options required (if any), and add those ++# options to $CC. Set shell variable ac_prog_cc_stdc to `cEDITION', ++# and set shell variable ac_cv_prog_cc_stdc to the options required. ++# (Neither of these variables is AC_SUBSTed. ac_cv_prog_cc_stdc used ++# to be a cache variable and is preserved with this name for backward ++# compatibility.) Otherwise, ac_cv_prog_cc_cEDITION is set to `no' ++# and the other variables are not changed. ++# ++# If ac_prog_cc_stdc is already set to a value other than `no', ++# the shell code produced by this macro does nothing. This is so ++# _AC_PROG_CC_STDC_EDITION can use m4_map to iterate through ++# all the editions. ++AC_DEFUN([_AC_PROG_CC_STDC_EDITION_TRY], + [AC_LANG_ASSERT([C])]dnl +-[AC_MSG_CHECKING([for $CC option to enable ]dnl +-m4_translit($1, [c], [C])[ features]) +-AC_CACHE_VAL([ac_cv_prog_cc_$1], +-[ac_cv_prog_cc_$1=no ++[AC_REQUIRE([_AC_C_C$1_TEST_PROGRAM])]dnl ++[AS_IF([test x$ac_prog_cc_stdc = xno], ++[AC_MSG_CHECKING([for $CC option to enable C$1 features]) ++AC_CACHE_VAL([ac_cv_prog_cc_c$1], ++[ac_cv_prog_cc_c$1=no + ac_save_CC=$CC +-AC_LANG_CONFTEST([AC_LANG_DEFINES_PROVIDED][$][$2]) +-for ac_arg in '' $3 ++AC_LANG_CONFTEST([AC_LANG_DEFINES_PROVIDED][$][ac_c_conftest_c$1_program]) ++for ac_arg in '' m4_normalize(m4_defn([_AC_C_C$1_OPTIONS])) + do + CC="$ac_save_CC $ac_arg" +- _AC_COMPILE_IFELSE([], [ac_cv_prog_cc_$1=$ac_arg]) +- test "x$ac_cv_prog_cc_$1" != "xno" && break ++ _AC_COMPILE_IFELSE([], [ac_cv_prog_cc_c$1=$ac_arg]) ++ test "x$ac_cv_prog_cc_c$1" != "xno" && break + done + rm -f conftest.$ac_ext +-CC=$ac_save_CC +-])# AC_CACHE_VAL +-ac_prog_cc_stdc_options= +-AS_CASE(["x$ac_cv_prog_cc_$1"], +- [x], [AC_MSG_RESULT([none needed])], +- [xno], [AC_MSG_RESULT([unsupported])], +- [ac_prog_cc_stdc_options=" $ac_cv_prog_cc_$1" +- CC="$CC$ac_prog_cc_stdc_options" +- AC_MSG_RESULT([$ac_cv_prog_cc_$1])]) +-AS_IF([test "x$ac_cv_prog_cc_$1" != xno], [$4], [$5]) +-])# _AC_C_STD_TRY +- +- +-# _AC_PROG_CC_C89 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) +-# ---------------------------------------------------------------- +-# If the C compiler is not in ANSI C89 (ISO C90) mode by default, try +-# to add an option to output variable CC to make it so. ++CC=$ac_save_CC]) ++AS_IF([test "x$ac_cv_prog_cc_c$1" = xno], ++ [AC_MSG_RESULT([unsupported])], ++ [AS_IF([test "x$ac_cv_prog_cc_c$1" = x], ++ [AC_MSG_RESULT([none needed])], ++ [AC_MSG_RESULT([$ac_cv_prog_cc_c$1]) ++ CC="$CC $ac_cv_prog_cc_c$1"]) ++ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c$1 ++ ac_prog_cc_stdc=c$1])]) ++]) ++ ++ ++# _AC_PROG_CC_STDC_EDITION ++# ------------------------ ++# Detect the most recent edition of the ISO C standard that is ++# supported by the C compiler. Add command-line options to $CC, if ++# necessary, to enable support for this edition. Set the shell ++# variable ac_prog_cc_stdc to indicate the edition. ++AC_DEFUN([_AC_PROG_CC_STDC_EDITION], ++[ac_prog_cc_stdc=no ++m4_map([_AC_PROG_CC_STDC_EDITION_TRY], [[11], [99], [89]])]) ++ ++ ++# _AC_PROG_CC_C89(ACTION-IF-SUPPORTED, ACTION-IF-NOT-SUPPORTED) ++# ------------------------------------------------------------- ++# Obsolete internal macro. No longer used by Autoconf itself, but ++# preserved for backward compatibility with pre-December 2020 versions ++# of Gnulib's std-gnu11.m4, which replaced the entire definition of ++# AC_PROG_CC *except* for this macro. Can be removed once everyone is ++# using Autoconf 2.70 and/or a current std-gnu11.m4. + AC_DEFUN([_AC_PROG_CC_C89], +-[AC_REQUIRE([_AC_C_C89_TEST_PROGRAM])]dnl +-[_AC_C_STD_TRY([c89], [ac_c_conftest_c89_program], +-dnl Don't try gcc -ansi; that turns off useful extensions and +-dnl breaks some systems' header files. +-dnl AIX circa 2003 -qlanglvl=extc89 +-dnl old AIX -qlanglvl=ansi +-dnl Ultrix, OSF/1, Tru64 -std +-dnl HP-UX 10.20 and later -Ae +-dnl HP-UX older versions -Aa -D_HPUX_SOURCE +-dnl SVR4 -Xc -D__EXTENSIONS__ +-[-qlanglvl=extc89 -qlanglvl=ansi -std \ +- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"], [$1], [$2])[]dnl +-])# _AC_PROG_CC_C89 +- +- +-# _AC_PROG_CC_C99 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) +-# ---------------------------------------------------------------- +-# If the C compiler is not in ISO C99 mode by default, try to add an +-# option to output variable CC to make it so. +-AC_DEFUN([_AC_PROG_CC_C99], +-[AC_REQUIRE([_AC_C_C99_TEST_PROGRAM])]dnl +-[_AC_C_STD_TRY([c99], [ac_c_conftest_c99_program], +-dnl Try +-dnl GCC -std=gnu99 (unused restrictive modes: -std=c99 -std=iso9899:1999) +-dnl IBM XL C -qlanglvl=extc1x (V12.1; does not pass C11 test) +-dnl IBM XL C -qlanglvl=extc99 +-dnl (pre-V12.1; unused restrictive mode: -qlanglvl=stdc99) +-dnl HP cc -AC99 +-dnl Intel ICC -std=c99, -c99 (deprecated) +-dnl IRIX -c99 +-dnl Solaris -D_STDC_C99= +-dnl cc's -xc99 option uses linker magic to define the external +-dnl symbol __xpg4 as if by "int __xpg4 = 1;", which enables C99 +-dnl behavior for C library functions. This is not wanted here, +-dnl because it means that a single module compiled with -xc99 +-dnl alters C runtime behavior for the entire program, not for +-dnl just the module. Instead, define the (private) symbol +-dnl _STDC_C99, which suppresses a bogus failure in . +-dnl The resulting compiler passes the test case here, and that's +-dnl good enough. For more, please see the thread starting at: +-dnl https://lists.gnu.org/archive/html/autoconf/2010-12/msg00059.html +-dnl Tru64 -c99 +-dnl with extended modes being tried first. +-[[-std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc1x -qlanglvl=extc99]], [$1], [$2])[]dnl +-])# _AC_PROG_CC_C99 +- +- +-# _AC_PROG_CC_C11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) +-# ---------------------------------------------------------------- +-# If the C compiler is not in ISO C11 mode by default, try to add an +-# option to output variable CC to make it so. +-AC_DEFUN([_AC_PROG_CC_C11], +-[AC_REQUIRE([_AC_C_C11_TEST_PROGRAM])]dnl +-[_AC_C_STD_TRY([c11], [ac_c_conftest_c11_program], +-dnl Try +-dnl GCC -std=gnu11 (unused restrictive mode: -std=c11) +-dnl with extended modes being tried first. +-dnl +-dnl For IBM XL C for AIX V16.1 or later, '-std=gnu11' should work if +-dnl the user configured with CC='xlclang'. Otherwise, do not try +-dnl -qlanglvl=extc1x as xlc with IBM XL C V16.1 (the latest version as +-dnl of August 2020) does not pass the C11 test. Instead, try extc1x when +-dnl compiling the C99 test instead, since it enables _Static_assert and +-dnl _Noreturn, which is a win. +-[[-std=gnu11]], [$1], [$2])[]dnl +-])# _AC_PROG_CC_C11 ++[AC_REQUIRE([_AC_C_C89_TEST_GLOBALS])]dnl ++[AC_REQUIRE([_AC_C_C89_TEST_MAIN])]dnl ++[_AC_C_STD_TRY([c89], ++ [$ac_c_conftest_c89_globals], [$ac_c_conftest_c89_main], ++ m4_quote(m4_normalize(m4_defn([_AC_C_C89_OPTIONS]))), ++ [$1], ++ [$2])]) ++ + + + # AC_PROG_CC_C89 +@@ -2633,78 +2671,112 @@ main (int argc, char **argv) + " + ]])]) + ++# _AC_CXX_CXX98_OPTIONS ++# --------------------- ++# Whitespace-separated list of options that might put the C++ compiler ++# into a mode conforming to ISO C++ 1998 with extensions. Do not try ++# "strictly conforming" modes (e.g. gcc's -std=c++98); they break some ++# systems' header files. If more than one option is needed, put ++# shell quotes around the group. ++# ++# GCC -std=gnu++98 ++# Intel ICC -std=c++98 ++# Note: because -std=c++98 puts GCC in strictly conforming mode, ++# this option must be tested *after* -std=gnu++98. ++# IBM XL C -qlanglvl=extended ++# HP aC++ -AA ++# Solaris N/A (default) ++# Tru64 N/A (default, but -std gnu could be used) ++m4_define([_AC_CXX_CXX98_OPTIONS], [ ++ -std=gnu++98 ++ -std=c++98 ++ -qlanglvl=extended ++ -AA ++]) + +-# _AC_CXX_STD_TRY(STANDARD, TEST-PROGRAM-HOLDER, OPTION-LIST, +-# ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE) +-# ---------------------------------------------------------------- +-# Check whether the C++ compiler accepts features of STANDARD (e.g `cxx98', +-# `cxx11') by trying to compile the program in the shell variable +-# TEST-PROGRAM-HOLDER. Caller is responsible for making sure this variable +-# has been initialized. If compilation fails in the default mode, try again +-# with each compiler option in the space-separated OPTION-LIST; if one helps, +-# append it to CXX. If eventually successful, run ACTION-IF-AVAILABLE, else +-# ACTION-IF-UNAVAILABLE. ++# _AC_CXX_CXX11_OPTIONS ++# --------------------- ++# Whitespace-separated list of options that might put the C++ compiler ++# into a mode conforming to ISO C++ 2011 with extensions. Do not try ++# "strictly conforming" modes (e.g. gcc's -std=c++11); they break some ++# systems' header files. If more than one option is needed, put ++# shell quotes around the group. ++# ++# GCC -std=gnu++11, -std=gnu++0x ++# Intel ICC -std=c++11, -std=c++0x ++# Note: because -std=c++11 puts GCC in strictly conforming mode, ++# these options must be tested *after* -std=gnu++11. ++# IBM XL C -qlanglvl=extended0x (pre-V12.1) ++# HP aC++ -AA ++# Solaris N/A (no support) ++# Tru64 N/A (no support) ++m4_define([_AC_CXX_CXX11_OPTIONS], [ ++ -std=gnu++11 ++ -std=gnu++0x ++ -std=c++11 ++ -std=c++0x ++ -qlanglvl=extended0x ++ -AA ++]) + +-AC_DEFUN([_AC_CXX_STD_TRY], ++# _AC_PROG_CXX_STDCXX_EDITION_TRY(EDITION) ++# ---------------------------------------- ++# Subroutine of _AC_PROG_CXX_STDCXX_EDITION. Not to be called directly. ++# ++# Check whether the C++ compiler accepts features of EDITION of the ++# C++ standard. EDITION should be a two-digit year (e.g. 98, 11). ++# (FIXME: Switch to four-digit years for futureproofing.) ++# This is done by compiling the test program defined by ++# _AC_C_CXX{EDITION}_TEST_PROGRAM, first with no additional ++# command-line options, and then with each of the options ++# in the space-separated list defined by _AC_C_CXX{EDITION}_OPTIONS. ++# ++# If we find a way to make the test program compile, set cache variable ++# ac_cv_prog_cxx_cxxEDITION to the options required (if any), and add those ++# options to $CXX. Set shell variable ac_prog_cxx_stdcxx to `cxxEDITION', ++# and set shell variable ac_cv_prog_cxx_stdcxx to the options required. ++# (Neither of these variables is AC_SUBSTed. ac_cv_prog_cxx_stdcxx used ++# to be a cache variable and is preserved with this name for backward ++# compatibility.) Otherwise, ac_cv_prog_cxx_cxxEDITION is set to `no' ++# and the other variables are not changed. ++# ++# If ac_prog_cxx_stdcxx is already set to a value other than `no', ++# the shell code produced by this macro does nothing. This is so ++# _AC_PROG_CXX_STDCXX_EDITION can use m4_map to iterate through ++# all the editions. ++AC_DEFUN([_AC_PROG_CXX_STDCXX_EDITION_TRY], + [AC_LANG_ASSERT([C++])]dnl +-[AC_MSG_CHECKING([for $CXX option to enable ]dnl +-m4_translit([$1], [a-wxyz], [A-W+YZ])[ features]) ++[AC_REQUIRE([_AC_CXX_CXX$1_TEST_PROGRAM])]dnl ++[AS_IF([test x$ac_prog_cxx_stdcxx = xno], ++[AC_MSG_CHECKING([for $CXX option to enable C++$1 features]) + AC_CACHE_VAL(ac_cv_prog_cxx_$1, + [ac_cv_prog_cxx_$1=no + ac_save_CXX=$CXX +-AC_LANG_CONFTEST([AC_LANG_DEFINES_PROVIDED][$][$2]) +-for ac_arg in '' $3 ++AC_LANG_CONFTEST([AC_LANG_DEFINES_PROVIDED][$][ac_cxx_conftest_cxx$1_program]) ++for ac_arg in '' m4_normalize(m4_defn([_AC_CXX_CXX$1_OPTIONS])) + do + CXX="$ac_save_CXX $ac_arg" +- _AC_COMPILE_IFELSE([], [ac_cv_prog_cxx_$1=$ac_arg]) +- test "x$ac_cv_prog_cxx_$1" != "xno" && break ++ _AC_COMPILE_IFELSE([], [ac_cv_prog_cxx_cxx$1=$ac_arg]) ++ test "x$ac_cv_prog_cxx_cxx$1" != "xno" && break + done + rm -f conftest.$ac_ext +-CXX=$ac_save_CXX +-])# AC_CACHE_VAL +-ac_prog_cxx_stdcxx_options= +-AS_CASE(["x$ac_cv_prog_cxx_$1"], +- [x], [AC_MSG_RESULT([none needed])], +- [xno], [AC_MSG_RESULT([unsupported])], +- [ac_prog_cxx_stdcxx_options=" $ac_cv_prog_cxx_$1" +- CXX=$CXX$ac_prog_cxx_stdcxx_options +- AC_MSG_RESULT([$ac_cv_prog_cxx_$1])]) +-AS_IF([test "x$ac_cv_prog_cxx_$1" != xno], [$4], [$5]) +-])# _AC_CXX_STD_TRY +- +-# _AC_PROG_CXX_CXX98 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) +-# ------------------------------------------------------------------- +-# If the C++ compiler is not in ISO C++98 mode by default, try to add +-# an option to output variable CXX to make it so. +-AC_DEFUN([_AC_PROG_CXX_CXX98], +-[AC_REQUIRE([_AC_CXX_CXX98_TEST_PROGRAM])]dnl +-[_AC_CXX_STD_TRY([cxx98], [ac_cxx_conftest_cxx98_program], +-dnl Try +-dnl GCC -std=gnu++98 (unused restrictive mode: -std=c++98) +-dnl IBM XL C -qlanglvl=extended +-dnl HP aC++ -AA +-dnl Intel ICC -std=gnu++98 +-dnl Solaris N/A (default) +-dnl Tru64 N/A (default, but -std gnu could be used) +-dnl with extended modes being tried first. +-[[-std=gnu++98 -std=c++98 -qlanglvl=extended -AA]], [$1], [$2])[]dnl +-])# _AC_PROG_CXX_CXX98 +- +-# _AC_PROG_CXX_CXX11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) +-# ------------------------------------------------------------------- +-# If the C++ compiler is not in ISO CXX11 mode by default, try to add +-# an option to output variable CXX to make it so. +-AC_DEFUN([_AC_PROG_CXX_CXX11], +-[AC_REQUIRE([_AC_CXX_CXX11_TEST_PROGRAM])]dnl +-[_AC_CXX_STD_TRY([cxx11], [ac_cxx_conftest_cxx11_program], +-dnl Try +-dnl GCC -std=gnu++11 (unused restrictive mode: -std=c++11) [and 0x variants] +-dnl IBM XL C -qlanglvl=extended0x +-dnl (pre-V12.1; unused restrictive mode: -qlanglvl=stdcxx11) +-dnl HP aC++ -AA +-dnl Intel ICC -std=c++11 -std=c++0x +-dnl Solaris N/A (no support) +-dnl Tru64 N/A (no support) +-dnl with extended modes being tried first. +-[[-std=gnu++11 -std=c++11 -std=gnu++0x -std=c++0x -qlanglvl=extended0x -AA]], [$1], [$2])[]dnl +-])# _AC_PROG_CXX_CXX11 ++CXX=$ac_save_CXX]) ++AS_IF([test "x$ac_cv_prog_cxx_cxx$1" = xno], ++ [AC_MSG_RESULT([unsupported])], ++ [AS_IF([test "x$ac_cv_prog_cxx_cxx$1" = x], ++ [AC_MSG_RESULT([none needed])], ++ [AC_MSG_RESULT([$ac_cv_prog_cxx_cxx$1]) ++ CXX="$CXX $ac_cv_prog_cxx_cxx$1"]) ++ ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx$1 ++ ac_prog_cxx_stdcxx=cxx$1])]) ++]) ++ ++# _AC_PROG_CXX_STDCXX_EDITION ++# --------------------------- ++# Detect the most recent edition of the ISO C++ standard that is ++# supported by the C++ compiler. Add command-line options to $CXX, ++# if necessary, to enable support for this edition. Set the shell ++# variable ac_prog_cxx_stdcxx to indicate the edition. ++AC_DEFUN([_AC_PROG_CXX_STDCXX_EDITION], ++[ac_prog_cxx_stdcxx=no ++m4_map([_AC_PROG_CXX_STDCXX_EDITION_TRY], [[11], [98]])]) +diff --git a/tests/data/ax_prog_cc_for_build_v18.m4 b/tests/data/ax_prog_cc_for_build_v18.m4 +new file mode 100644 +index 00000000..f7410d74 +--- /dev/null ++++ b/tests/data/ax_prog_cc_for_build_v18.m4 +@@ -0,0 +1,139 @@ ++# =========================================================================== ++# https://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html ++# =========================================================================== ++# ++# SYNOPSIS ++# ++# AX_PROG_CC_FOR_BUILD ++# ++# DESCRIPTION ++# ++# This macro searches for a C compiler that generates native executables, ++# that is a C compiler that surely is not a cross-compiler. This can be ++# useful if you have to generate source code at compile-time like for ++# example GCC does. ++# ++# The macro sets the CC_FOR_BUILD and CPP_FOR_BUILD macros to anything ++# needed to compile or link (CC_FOR_BUILD) and preprocess (CPP_FOR_BUILD). ++# The value of these variables can be overridden by the user by specifying ++# a compiler with an environment variable (like you do for standard CC). ++# ++# It also sets BUILD_EXEEXT and BUILD_OBJEXT to the executable and object ++# file extensions for the build platform, and GCC_FOR_BUILD to `yes' if ++# the compiler we found is GCC. All these variables but GCC_FOR_BUILD are ++# substituted in the Makefile. ++# ++# LICENSE ++# ++# Copyright (c) 2008 Paolo Bonzini ++# ++# Copying and distribution of this file, with or without modification, are ++# permitted in any medium without royalty provided the copyright notice ++# and this notice are preserved. This file is offered as-is, without any ++# warranty. ++ ++#serial 18 ++ ++AU_ALIAS([AC_PROG_CC_FOR_BUILD], [AX_PROG_CC_FOR_BUILD]) ++AC_DEFUN([AX_PROG_CC_FOR_BUILD], [dnl ++AC_REQUIRE([AC_PROG_CC])dnl ++AC_REQUIRE([AC_PROG_CPP])dnl ++AC_REQUIRE([AC_CANONICAL_BUILD])dnl ++ ++dnl Use the standard macros, but make them use other variable names ++dnl ++pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP)dnl ++pushdef([ac_cv_prog_cc_c89], ac_cv_build_prog_cc_c89)dnl ++pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc)dnl ++pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works)dnl ++pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross)dnl ++pushdef([ac_cv_prog_cc_g], ac_cv_build_prog_cc_g)dnl ++pushdef([ac_cv_c_compiler_gnu], ac_cv_build_c_compiler_gnu)dnl ++pushdef([ac_cv_exeext], ac_cv_build_exeext)dnl ++pushdef([ac_cv_objext], ac_cv_build_objext)dnl ++pushdef([ac_exeext], ac_build_exeext)dnl ++pushdef([ac_objext], ac_build_objext)dnl ++pushdef([CC], CC_FOR_BUILD)dnl ++pushdef([CPP], CPP_FOR_BUILD)dnl ++pushdef([GCC], GCC_FOR_BUILD)dnl ++pushdef([CFLAGS], CFLAGS_FOR_BUILD)dnl ++pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl ++pushdef([EXEEXT], BUILD_EXEEXT)dnl ++pushdef([LDFLAGS], LDFLAGS_FOR_BUILD)dnl ++pushdef([OBJEXT], BUILD_OBJEXT)dnl ++pushdef([host], build)dnl ++pushdef([host_alias], build_alias)dnl ++pushdef([host_cpu], build_cpu)dnl ++pushdef([host_vendor], build_vendor)dnl ++pushdef([host_os], build_os)dnl ++pushdef([ac_cv_host], ac_cv_build)dnl ++pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl ++pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl ++pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl ++pushdef([ac_cv_host_os], ac_cv_build_os)dnl ++pushdef([ac_tool_prefix], ac_build_tool_prefix)dnl ++pushdef([am_cv_CC_dependencies_compiler_type], am_cv_build_CC_dependencies_compiler_type)dnl ++pushdef([am_cv_prog_cc_c_o], am_cv_build_prog_cc_c_o)dnl ++pushdef([cross_compiling], cross_compiling_build)dnl ++ ++cross_compiling_build=no ++ ++ac_build_tool_prefix= ++AS_IF([test -n "$build"], [ac_build_tool_prefix="$build-"], ++ [test -n "$build_alias"],[ac_build_tool_prefix="$build_alias-"]) ++ ++AC_LANG_PUSH([C]) ++AC_PROG_CC ++_AC_COMPILER_EXEEXT ++_AC_COMPILER_OBJEXT ++AC_PROG_CPP ++ ++dnl Restore the old definitions ++dnl ++popdef([cross_compiling])dnl ++popdef([am_cv_prog_cc_c_o])dnl ++popdef([am_cv_CC_dependencies_compiler_type])dnl ++popdef([ac_tool_prefix])dnl ++popdef([ac_cv_host_os])dnl ++popdef([ac_cv_host_vendor])dnl ++popdef([ac_cv_host_cpu])dnl ++popdef([ac_cv_host_alias])dnl ++popdef([ac_cv_host])dnl ++popdef([host_os])dnl ++popdef([host_vendor])dnl ++popdef([host_cpu])dnl ++popdef([host_alias])dnl ++popdef([host])dnl ++popdef([OBJEXT])dnl ++popdef([LDFLAGS])dnl ++popdef([EXEEXT])dnl ++popdef([CPPFLAGS])dnl ++popdef([CFLAGS])dnl ++popdef([GCC])dnl ++popdef([CPP])dnl ++popdef([CC])dnl ++popdef([ac_objext])dnl ++popdef([ac_exeext])dnl ++popdef([ac_cv_objext])dnl ++popdef([ac_cv_exeext])dnl ++popdef([ac_cv_c_compiler_gnu])dnl ++popdef([ac_cv_prog_cc_g])dnl ++popdef([ac_cv_prog_cc_cross])dnl ++popdef([ac_cv_prog_cc_works])dnl ++popdef([ac_cv_prog_cc_c89])dnl ++popdef([ac_cv_prog_gcc])dnl ++popdef([ac_cv_prog_CPP])dnl ++ ++dnl restore global variables ac_ext, ac_cpp, ac_compile, ++dnl ac_link, ac_compiler_gnu (dependant on the current ++dnl language after popping): ++AC_LANG_POP([C]) ++ ++dnl Finally, set Makefile variables ++dnl ++AC_SUBST(BUILD_EXEEXT)dnl ++AC_SUBST(BUILD_OBJEXT)dnl ++AC_SUBST([CFLAGS_FOR_BUILD])dnl ++AC_SUBST([CPPFLAGS_FOR_BUILD])dnl ++AC_SUBST([LDFLAGS_FOR_BUILD])dnl ++]) +diff --git a/tests/data/ax_prog_cxx_for_build_v3.m4 b/tests/data/ax_prog_cxx_for_build_v3.m4 +new file mode 100644 +index 00000000..17c19a89 +--- /dev/null ++++ b/tests/data/ax_prog_cxx_for_build_v3.m4 +@@ -0,0 +1,110 @@ ++# =========================================================================== ++# https://www.gnu.org/software/autoconf-archive/ax_prog_cxx_for_build.html ++# =========================================================================== ++# ++# SYNOPSIS ++# ++# AX_PROG_CXX_FOR_BUILD ++# ++# DESCRIPTION ++# ++# This macro searches for a C++ compiler that generates native ++# executables, that is a C++ compiler that surely is not a cross-compiler. ++# This can be useful if you have to generate source code at compile-time ++# like for example GCC does. ++# ++# The macro sets the CXX_FOR_BUILD and CXXCPP_FOR_BUILD macros to anything ++# needed to compile or link (CXX_FOR_BUILD) and preprocess ++# (CXXCPP_FOR_BUILD). The value of these variables can be overridden by ++# the user by specifying a compiler with an environment variable (like you ++# do for standard CXX). ++# ++# LICENSE ++# ++# Copyright (c) 2008 Paolo Bonzini ++# Copyright (c) 2012 Avionic Design GmbH ++# ++# Based on the AX_PROG_CC_FOR_BUILD macro by Paolo Bonzini. ++# ++# Copying and distribution of this file, with or without modification, are ++# permitted in any medium without royalty provided the copyright notice ++# and this notice are preserved. This file is offered as-is, without any ++# warranty. ++ ++#serial 3 ++ ++AU_ALIAS([AC_PROG_CXX_FOR_BUILD], [AX_PROG_CXX_FOR_BUILD]) ++AC_DEFUN([AX_PROG_CXX_FOR_BUILD], [dnl ++AC_REQUIRE([AX_PROG_CC_FOR_BUILD])dnl ++AC_REQUIRE([AC_PROG_CXX])dnl ++AC_REQUIRE([AC_PROG_CXXCPP])dnl ++AC_REQUIRE([AC_CANONICAL_HOST])dnl ++ ++dnl Use the standard macros, but make them use other variable names ++dnl ++pushdef([ac_cv_prog_CXXCPP], ac_cv_build_prog_CXXCPP)dnl ++pushdef([ac_cv_prog_gxx], ac_cv_build_prog_gxx)dnl ++pushdef([ac_cv_prog_cxx_works], ac_cv_build_prog_cxx_works)dnl ++pushdef([ac_cv_prog_cxx_cross], ac_cv_build_prog_cxx_cross)dnl ++pushdef([ac_cv_prog_cxx_g], ac_cv_build_prog_cxx_g)dnl ++pushdef([CXX], CXX_FOR_BUILD)dnl ++pushdef([CXXCPP], CXXCPP_FOR_BUILD)dnl ++pushdef([CXXFLAGS], CXXFLAGS_FOR_BUILD)dnl ++pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD)dnl ++pushdef([CXXCPPFLAGS], CXXCPPFLAGS_FOR_BUILD)dnl ++pushdef([host], build)dnl ++pushdef([host_alias], build_alias)dnl ++pushdef([host_cpu], build_cpu)dnl ++pushdef([host_vendor], build_vendor)dnl ++pushdef([host_os], build_os)dnl ++pushdef([ac_cv_host], ac_cv_build)dnl ++pushdef([ac_cv_host_alias], ac_cv_build_alias)dnl ++pushdef([ac_cv_host_cpu], ac_cv_build_cpu)dnl ++pushdef([ac_cv_host_vendor], ac_cv_build_vendor)dnl ++pushdef([ac_cv_host_os], ac_cv_build_os)dnl ++pushdef([ac_cxxcpp], ac_build_cxxcpp)dnl ++pushdef([ac_compile], ac_build_compile)dnl ++pushdef([ac_link], ac_build_link)dnl ++ ++save_cross_compiling=$cross_compiling ++save_ac_tool_prefix=$ac_tool_prefix ++cross_compiling=no ++ac_tool_prefix= ++ ++AC_PROG_CXX ++AC_PROG_CXXCPP ++ ++ac_tool_prefix=$save_ac_tool_prefix ++cross_compiling=$save_cross_compiling ++ ++dnl Restore the old definitions ++dnl ++popdef([ac_link])dnl ++popdef([ac_compile])dnl ++popdef([ac_cxxcpp])dnl ++popdef([ac_cv_host_os])dnl ++popdef([ac_cv_host_vendor])dnl ++popdef([ac_cv_host_cpu])dnl ++popdef([ac_cv_host_alias])dnl ++popdef([ac_cv_host])dnl ++popdef([host_os])dnl ++popdef([host_vendor])dnl ++popdef([host_cpu])dnl ++popdef([host_alias])dnl ++popdef([host])dnl ++popdef([CXXCPPFLAGS])dnl ++popdef([CPPFLAGS])dnl ++popdef([CXXFLAGS])dnl ++popdef([CXXCPP])dnl ++popdef([CXX])dnl ++popdef([ac_cv_prog_cxx_g])dnl ++popdef([ac_cv_prog_cxx_cross])dnl ++popdef([ac_cv_prog_cxx_works])dnl ++popdef([ac_cv_prog_gxx])dnl ++popdef([ac_cv_prog_CXXCPP])dnl ++ ++dnl Finally, set Makefile variables ++dnl ++AC_SUBST([CXXFLAGS_FOR_BUILD])dnl ++AC_SUBST([CXXCPPFLAGS_FOR_BUILD])dnl ++]) +diff --git a/tests/data/gnulib_std_gnu11_2020_08_17.m4 b/tests/data/gnulib_std_gnu11_2020_08_17.m4 +new file mode 100644 +index 00000000..db833d82 +--- /dev/null ++++ b/tests/data/gnulib_std_gnu11_2020_08_17.m4 +@@ -0,0 +1,824 @@ ++# Prefer GNU C11 and C++11 to earlier versions. -*- coding: utf-8 -*- ++ ++# This implementation is taken from GNU Autoconf lib/autoconf/c.m4 ++# commit 017d5ddd82854911f0119691d91ea8a1438824d6 ++# dated Sun Apr 3 13:57:17 2016 -0700 ++# This implementation will be obsolete once we can assume Autoconf 2.70 ++# or later is installed everywhere a Gnulib program might be developed. ++ ++ ++# Copyright (C) 2001-2020 Free Software Foundation, Inc. ++ ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation, either version 3 of the License, or ++# (at your option) any later version. ++# ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++ ++# Written by David MacKenzie, with help from ++# Akim Demaille, Paul Eggert, ++# François Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor, ++# Roland McGrath, Noah Friedman, david d zuhn, and many others. ++ ++ ++# AC_PROG_CC([COMPILER ...]) ++# -------------------------- ++# COMPILER ... is a space separated list of C compilers to search for. ++# This just gives the user an opportunity to specify an alternative ++# search list for the C compiler. ++AC_DEFUN_ONCE([AC_PROG_CC], ++[AC_LANG_PUSH(C)dnl ++AC_ARG_VAR([CC], [C compiler command])dnl ++AC_ARG_VAR([CFLAGS], [C compiler flags])dnl ++_AC_ARG_VAR_LDFLAGS()dnl ++_AC_ARG_VAR_LIBS()dnl ++_AC_ARG_VAR_CPPFLAGS()dnl ++m4_ifval([$1], ++ [AC_CHECK_TOOLS(CC, [$1])], ++[AC_CHECK_TOOL(CC, gcc) ++if test -z "$CC"; then ++ dnl Here we want: ++ dnl AC_CHECK_TOOL(CC, cc) ++ dnl but without the check for a tool without the prefix. ++ dnl Until the check is removed from there, copy the code: ++ if test -n "$ac_tool_prefix"; then ++ AC_CHECK_PROG(CC, [${ac_tool_prefix}cc], [${ac_tool_prefix}cc]) ++ fi ++fi ++if test -z "$CC"; then ++ AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc) ++fi ++if test -z "$CC"; then ++ AC_CHECK_TOOLS(CC, cl.exe) ++fi ++if test -z "$CC"; then ++ AC_CHECK_TOOL(CC, clang) ++fi ++]) ++ ++test -z "$CC" && AC_MSG_FAILURE([no acceptable C compiler found in \$PATH]) ++ ++# Provide some information about the compiler. ++_AS_ECHO_LOG([checking for _AC_LANG compiler version]) ++set X $ac_compile ++ac_compiler=$[2] ++for ac_option in --version -v -V -qversion -version; do ++ _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD]) ++done ++ ++m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl ++m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl ++_AC_LANG_COMPILER_GNU ++if test $ac_compiler_gnu = yes; then ++ GCC=yes ++else ++ GCC= ++fi ++_AC_PROG_CC_G ++dnl ++dnl Set ac_prog_cc_stdc to the supported C version. ++dnl Also set the documented variable ac_cv_prog_cc_stdc; ++dnl its name was chosen when it was cached, but it is no longer cached. ++_AC_PROG_CC_C11([ac_prog_cc_stdc=c11 ++ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11], ++ [_AC_PROG_CC_C99([ac_prog_cc_stdc=c99 ++ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99], ++ [_AC_PROG_CC_C89([ac_prog_cc_stdc=c89 ++ ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89], ++ [ac_prog_cc_stdc=no ++ ac_cv_prog_cc_stdc=no])])]) ++dnl ++AC_LANG_POP(C)dnl ++])# AC_PROG_CC ++ ++ ++ ++# AC_PROG_CXX([LIST-OF-COMPILERS]) ++# -------------------------------- ++# LIST-OF-COMPILERS is a space separated list of C++ compilers to search ++# for (if not specified, a default list is used). This just gives the ++# user an opportunity to specify an alternative search list for the C++ ++# compiler. ++# aCC HP-UX C++ compiler much better than `CC', so test before. ++# FCC Fujitsu C++ compiler ++# KCC KAI C++ compiler ++# RCC Rational C++ ++# xlC_r AIX C Set++ (with support for reentrant code) ++# xlC AIX C Set++ ++AC_DEFUN([AC_PROG_CXX], ++[AC_LANG_PUSH(C++)dnl ++AC_ARG_VAR([CXX], [C++ compiler command])dnl ++AC_ARG_VAR([CXXFLAGS], [C++ compiler flags])dnl ++_AC_ARG_VAR_LDFLAGS()dnl ++_AC_ARG_VAR_LIBS()dnl ++_AC_ARG_VAR_CPPFLAGS()dnl ++_AC_ARG_VAR_PRECIOUS([CCC])dnl ++if test -z "$CXX"; then ++ if test -n "$CCC"; then ++ CXX=$CCC ++ else ++ AC_CHECK_TOOLS(CXX, ++ [m4_default([$1], ++ [g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++])], ++ g++) ++ fi ++fi ++# Provide some information about the compiler. ++_AS_ECHO_LOG([checking for _AC_LANG compiler version]) ++set X $ac_compile ++ac_compiler=$[2] ++for ac_option in --version -v -V -qversion; do ++ _AC_DO_LIMIT([$ac_compiler $ac_option >&AS_MESSAGE_LOG_FD]) ++done ++ ++m4_expand_once([_AC_COMPILER_EXEEXT])[]dnl ++m4_expand_once([_AC_COMPILER_OBJEXT])[]dnl ++_AC_LANG_COMPILER_GNU ++if test $ac_compiler_gnu = yes; then ++ GXX=yes ++else ++ GXX= ++fi ++_AC_PROG_CXX_G ++_AC_PROG_CXX_CXX11([ac_prog_cxx_stdcxx=cxx11 ++ ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ++ ac_cv_prog_cxx_cxx98=$ac_cv_prog_cxx_cxx11], ++ [_AC_PROG_CXX_CXX98([ac_prog_cxx_stdcxx=cxx98 ++ ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98], ++ [ac_prog_cxx_stdcxx=no ++ ac_cv_prog_cxx_stdcxx=no])]) ++AC_LANG_POP(C++)dnl ++])# AC_PROG_CXX ++ ++ ++# _AC_C_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST, ++# ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE) ++# -------------------------------------------------------------- ++# Check whether the C compiler accepts features of STANDARD (e.g `c89', `c99') ++# by trying to compile a program of TEST-PROLOGUE and TEST-BODY. If this fails, ++# try again with each compiler option in the space-separated OPTION-LIST; if one ++# helps, append it to CC. If eventually successful, run ACTION-IF-AVAILABLE, ++# else ACTION-IF-UNAVAILABLE. ++AC_DEFUN([_AC_C_STD_TRY], ++[AC_MSG_CHECKING([for $CC option to enable ]m4_translit($1, [c], [C])[ features]) ++AC_CACHE_VAL(ac_cv_prog_cc_$1, ++[ac_cv_prog_cc_$1=no ++ac_save_CC=$CC ++AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])]) ++for ac_arg in '' $4 ++do ++ CC="$ac_save_CC $ac_arg" ++ _AC_COMPILE_IFELSE([], [ac_cv_prog_cc_$1=$ac_arg]) ++ test "x$ac_cv_prog_cc_$1" != "xno" && break ++done ++rm -f conftest.$ac_ext ++CC=$ac_save_CC ++])# AC_CACHE_VAL ++ac_prog_cc_stdc_options= ++case "x$ac_cv_prog_cc_$1" in ++ x) ++ AC_MSG_RESULT([none needed]) ;; ++ xno) ++ AC_MSG_RESULT([unsupported]) ;; ++ *) ++ ac_prog_cc_stdc_options=" $ac_cv_prog_cc_$1" ++ CC=$CC$ac_prog_cc_stdc_options ++ AC_MSG_RESULT([$ac_cv_prog_cc_$1]) ;; ++esac ++AS_IF([test "x$ac_cv_prog_cc_$1" != xno], [$5], [$6]) ++])# _AC_C_STD_TRY ++ ++# _AC_C_C99_TEST_HEADER ++# --------------------- ++# A C header suitable for testing for C99. ++AC_DEFUN([_AC_C_C99_TEST_HEADER], ++[[#include ++#include ++#include ++#include ++#include ++#include ++ ++// Check varargs macros. These examples are taken from C99 6.10.3.5. ++#define debug(...) fprintf (stderr, __VA_ARGS__) ++#define showlist(...) puts (#__VA_ARGS__) ++#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) ++static void ++test_varargs_macros (void) ++{ ++ int x = 1234; ++ int y = 5678; ++ debug ("Flag"); ++ debug ("X = %d\n", x); ++ showlist (The first, second, and third items.); ++ report (x>y, "x is %d but y is %d", x, y); ++} ++ ++// Check long long types. ++#define BIG64 18446744073709551615ull ++#define BIG32 4294967295ul ++#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) ++#if !BIG_OK ++ your preprocessor is broken; ++#endif ++#if BIG_OK ++#else ++ your preprocessor is broken; ++#endif ++static long long int bignum = -9223372036854775807LL; ++static unsigned long long int ubignum = BIG64; ++ ++struct incomplete_array ++{ ++ int datasize; ++ double data[]; ++}; ++ ++struct named_init { ++ int number; ++ const wchar_t *name; ++ double average; ++}; ++ ++typedef const char *ccp; ++ ++static inline int ++test_restrict (ccp restrict text) ++{ ++ // See if C++-style comments work. ++ // Iterate through items via the restricted pointer. ++ // Also check for declarations in for loops. ++ for (unsigned int i = 0; *(text+i) != '\0'; ++i) ++ continue; ++ return 0; ++} ++ ++// Check varargs and va_copy. ++static bool ++test_varargs (const char *format, ...) ++{ ++ va_list args; ++ va_start (args, format); ++ va_list args_copy; ++ va_copy (args_copy, args); ++ ++ const char *str = ""; ++ int number = 0; ++ float fnumber = 0; ++ ++ while (*format) ++ { ++ switch (*format++) ++ { ++ case 's': // string ++ str = va_arg (args_copy, const char *); ++ break; ++ case 'd': // int ++ number = va_arg (args_copy, int); ++ break; ++ case 'f': // float ++ fnumber = va_arg (args_copy, double); ++ break; ++ default: ++ break; ++ } ++ } ++ va_end (args_copy); ++ va_end (args); ++ ++ return *str && number && fnumber; ++}]])# _AC_C_C99_TEST_HEADER ++ ++# _AC_C_C99_TEST_BODY ++# ------------------- ++# A C body suitable for testing for C99, assuming the corresponding header. ++AC_DEFUN([_AC_C_C99_TEST_BODY], ++[[ ++ // Check bool. ++ _Bool success = false; ++ ++ // Check restrict. ++ if (test_restrict ("String literal") == 0) ++ success = true; ++ char *restrict newvar = "Another string"; ++ ++ // Check varargs. ++ success &= test_varargs ("s, d' f .", "string", 65, 34.234); ++ test_varargs_macros (); ++ ++ // Check flexible array members. ++ struct incomplete_array *ia = ++ malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ++ ia->datasize = 10; ++ for (int i = 0; i < ia->datasize; ++i) ++ ia->data[i] = i * 1.234; ++ ++ // Check named initializers. ++ struct named_init ni = { ++ .number = 34, ++ .name = L"Test wide string", ++ .average = 543.34343, ++ }; ++ ++ ni.number = 58; ++ ++ int dynamic_array[ni.number]; ++ dynamic_array[ni.number - 1] = 543; ++ ++ // work around unused variable warnings ++ return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' ++ || dynamic_array[ni.number - 1] != 543); ++]]) ++ ++# _AC_PROG_CC_C99 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) ++# ---------------------------------------------------------------- ++# If the C compiler is not in ISO C99 mode by default, try to add an ++# option to output variable CC to make it so. This macro tries ++# various options that select ISO C99 on some system or another. It ++# considers the compiler to be in ISO C99 mode if it handles _Bool, ++# // comments, flexible array members, inline, long long int, mixed ++# code and declarations, named initialization of structs, restrict, ++# va_copy, varargs macros, variable declarations in for loops and ++# variable length arrays. ++AC_DEFUN([_AC_PROG_CC_C99], ++[_AC_C_STD_TRY([c99], ++[_AC_C_C99_TEST_HEADER], ++[_AC_C_C99_TEST_BODY], ++dnl Try ++dnl GCC -std=gnu99 (unused restrictive modes: -std=c99 -std=iso9899:1999) ++dnl IBM XL C -qlanglvl=extc1x (V12.1; does not pass C11 test) ++dnl IBM XL C -qlanglvl=extc99 ++dnl (pre-V12.1; unused restrictive mode: -qlanglvl=stdc99) ++dnl HP cc -AC99 ++dnl Intel ICC -std=c99, -c99 (deprecated) ++dnl IRIX -c99 ++dnl Solaris -D_STDC_C99= ++dnl cc's -xc99 option uses linker magic to define the external ++dnl symbol __xpg4 as if by "int __xpg4 = 1;", which enables C99 ++dnl behavior for C library functions. This is not wanted here, ++dnl because it means that a single module compiled with -xc99 ++dnl alters C runtime behavior for the entire program, not for ++dnl just the module. Instead, define the (private) symbol ++dnl _STDC_C99, which suppresses a bogus failure in . ++dnl The resulting compiler passes the test case here, and that's ++dnl good enough. For more, please see the thread starting at: ++dnl https://lists.gnu.org/r/autoconf/2010-12/msg00059.html ++dnl Tru64 -c99 ++dnl with extended modes being tried first. ++[[-std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc1x -qlanglvl=extc99]], [$1], [$2])[]dnl ++])# _AC_PROG_CC_C99 ++ ++ ++# _AC_PROG_CC_C11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) ++# ---------------------------------------------------------------- ++# If the C compiler is not in ISO C11 mode by default, try to add an ++# option to output variable CC to make it so. This macro tries ++# various options that select ISO C11 on some system or another. It ++# considers the compiler to be in ISO C11 mode if it handles _Alignas, ++# _Alignof, _Noreturn, _Static_assert, UTF-8 string literals, ++# duplicate typedefs, and anonymous structures and unions. ++AC_DEFUN([_AC_PROG_CC_C11], ++[_AC_C_STD_TRY([c11], ++[_AC_C_C99_TEST_HEADER[ ++// Check _Alignas. ++char _Alignas (double) aligned_as_double; ++char _Alignas (0) no_special_alignment; ++extern char aligned_as_int; ++char _Alignas (0) _Alignas (int) aligned_as_int; ++ ++// Check _Alignof. ++enum ++{ ++ int_alignment = _Alignof (int), ++ int_array_alignment = _Alignof (int[100]), ++ char_alignment = _Alignof (char) ++}; ++_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); ++ ++// Check _Noreturn. ++int _Noreturn does_not_return (void) { for (;;) continue; } ++ ++// Check _Static_assert. ++struct test_static_assert ++{ ++ int x; ++ _Static_assert (sizeof (int) <= sizeof (long int), ++ "_Static_assert does not work in struct"); ++ long int y; ++}; ++ ++// Check UTF-8 literals. ++#define u8 syntax error! ++char const utf8_literal[] = u8"happens to be ASCII" "another string"; ++ ++// Check duplicate typedefs. ++typedef long *long_ptr; ++typedef long int *long_ptr; ++typedef long_ptr long_ptr; ++ ++// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. ++struct anonymous ++{ ++ union { ++ struct { int i; int j; }; ++ struct { int k; long int l; } w; ++ }; ++ int m; ++} v1; ++]], ++[_AC_C_C99_TEST_BODY[ ++ v1.i = 2; ++ v1.w.k = 5; ++ _Static_assert ((offsetof (struct anonymous, i) ++ == offsetof (struct anonymous, w.k)), ++ "Anonymous union alignment botch"); ++]], ++dnl Try ++dnl GCC -std=gnu11 (unused restrictive mode: -std=c11) ++dnl with extended modes being tried first. ++dnl ++dnl Do not try -qlanglvl=extc1x, because IBM XL C V12.1 (the latest version as ++dnl of September 2012) does not pass the C11 test. For now, try extc1x when ++dnl compiling the C99 test instead, since it enables _Static_assert and ++dnl _Noreturn, which is a win. If -qlanglvl=extc11 or -qlanglvl=extc1x passes ++dnl the C11 test in some future version of IBM XL C, we'll add it here, ++dnl preferably extc11. ++[[-std=gnu11]], [$1], [$2])[]dnl ++])# _AC_PROG_CC_C11 ++ ++ ++# AC_PROG_CC_C89 ++# -------------- ++# Do not use AU_ALIAS here and in AC_PROG_CC_C99 and AC_PROG_CC_STDC, ++# as that'd be incompatible with how Automake redefines AC_PROG_CC. See ++# . ++AU_DEFUN([AC_PROG_CC_C89], ++ [AC_REQUIRE([AC_PROG_CC])], ++ [$0 is obsolete; use AC_PROG_CC] ++) ++ ++# AC_PROG_CC_C99 ++# -------------- ++AU_DEFUN([AC_PROG_CC_C99], ++ [AC_REQUIRE([AC_PROG_CC])], ++ [$0 is obsolete; use AC_PROG_CC] ++) ++ ++# AC_PROG_CC_STDC ++# --------------- ++AU_DEFUN([AC_PROG_CC_STDC], ++ [AC_REQUIRE([AC_PROG_CC])], ++ [$0 is obsolete; use AC_PROG_CC] ++) ++ ++ ++# AC_C_PROTOTYPES ++# --------------- ++# Check if the C compiler supports prototypes, included if it needs ++# options. ++AC_DEFUN([AC_C_PROTOTYPES], ++[AC_REQUIRE([AC_PROG_CC])dnl ++if test "$ac_prog_cc_stdc" != no; then ++ AC_DEFINE(PROTOTYPES, 1, ++ [Define to 1 if the C compiler supports function prototypes.]) ++ AC_DEFINE(__PROTOTYPES, 1, ++ [Define like PROTOTYPES; this can be used by system headers.]) ++fi ++])# AC_C_PROTOTYPES ++ ++ ++# _AC_CXX_STD_TRY(STANDARD, TEST-PROLOGUE, TEST-BODY, OPTION-LIST, ++# ACTION-IF-AVAILABLE, ACTION-IF-UNAVAILABLE) ++# ---------------------------------------------------------------- ++# Check whether the C++ compiler accepts features of STANDARD (e.g ++# `cxx98', `cxx11') by trying to compile a program of TEST-PROLOGUE ++# and TEST-BODY. If this fails, try again with each compiler option ++# in the space-separated OPTION-LIST; if one helps, append it to CXX. ++# If eventually successful, run ACTION-IF-AVAILABLE, else ++# ACTION-IF-UNAVAILABLE. ++AC_DEFUN([_AC_CXX_STD_TRY], ++[AC_MSG_CHECKING([for $CXX option to enable ]m4_translit(m4_translit($1, [x], [+]), [a-z], [A-Z])[ features]) ++AC_LANG_PUSH(C++)dnl ++AC_CACHE_VAL(ac_cv_prog_cxx_$1, ++[ac_cv_prog_cxx_$1=no ++ac_save_CXX=$CXX ++AC_LANG_CONFTEST([AC_LANG_PROGRAM([$2], [$3])]) ++for ac_arg in '' $4 ++do ++ CXX="$ac_save_CXX $ac_arg" ++ _AC_COMPILE_IFELSE([], [ac_cv_prog_cxx_$1=$ac_arg]) ++ test "x$ac_cv_prog_cxx_$1" != "xno" && break ++done ++rm -f conftest.$ac_ext ++CXX=$ac_save_CXX ++])# AC_CACHE_VAL ++ac_prog_cxx_stdcxx_options= ++case "x$ac_cv_prog_cxx_$1" in ++ x) ++ AC_MSG_RESULT([none needed]) ;; ++ xno) ++ AC_MSG_RESULT([unsupported]) ;; ++ *) ++ ac_prog_cxx_stdcxx_options=" $ac_cv_prog_cxx_$1" ++ CXX=$CXX$ac_prog_cxx_stdcxx_options ++ AC_MSG_RESULT([$ac_cv_prog_cxx_$1]) ;; ++esac ++AC_LANG_POP(C++)dnl ++AS_IF([test "x$ac_cv_prog_cxx_$1" != xno], [$5], [$6]) ++])# _AC_CXX_STD_TRY ++ ++# _AC_CXX_CXX98_TEST_HEADER ++# ------------------------- ++# A C++ header suitable for testing for CXX98. ++AC_DEFUN([_AC_CXX_CXX98_TEST_HEADER], ++[[ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++namespace test { ++ typedef std::vector string_vec; ++ typedef std::pair map_value; ++ typedef std::map map_type; ++ typedef std::set set_type; ++ ++ template ++ class printer { ++ public: ++ printer(std::ostringstream& os): os(os) {} ++ void operator() (T elem) { os << elem << std::endl; } ++ private: ++ std::ostringstream& os; ++ }; ++} ++]])# _AC_CXX_CXX98_TEST_HEADER ++ ++# _AC_CXX_CXX98_TEST_BODY ++# ----------------------- ++# A C++ body suitable for testing for CXX98, assuming the corresponding header. ++AC_DEFUN([_AC_CXX_CXX98_TEST_BODY], ++[[ ++ ++try { ++ // Basic string. ++ std::string teststr("ASCII text"); ++ teststr += " string"; ++ ++ // Simple vector. ++ test::string_vec testvec; ++ testvec.push_back(teststr); ++ testvec.push_back("foo"); ++ testvec.push_back("bar"); ++ if (testvec.size() != 3) { ++ throw std::runtime_error("vector size is not 1"); ++ } ++ ++ // Dump vector into stringstream and obtain string. ++ std::ostringstream os; ++ for (test::string_vec::const_iterator i = testvec.begin(); ++ i != testvec.end(); ++i) { ++ if (i + 1 != testvec.end()) { ++ os << teststr << '\n'; ++ } ++ } ++ // Check algorithms work. ++ std::for_each(testvec.begin(), testvec.end(), test::printer(os)); ++ std::string os_out = os.str(); ++ ++ // Test pair and map. ++ test::map_type testmap; ++ testmap.insert(std::make_pair(std::string("key"), ++ std::make_pair(53,false))); ++ ++ // Test set. ++ int values[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; ++ test::set_type testset(values, values + sizeof(values)/sizeof(values[0])); ++ std::list testlist(testset.begin(), testset.end()); ++ std::copy(testset.begin(), testset.end(), std::back_inserter(testlist)); ++} catch (const std::exception& e) { ++ std::cerr << "Caught exception: " << e.what() << std::endl; ++ ++ // Test fstream ++ std::ofstream of("test.txt"); ++ of << "Test ASCII text\n" << std::flush; ++ of << "N= " << std::hex << std::setw(8) << std::left << 534 << std::endl; ++ of.close(); ++} ++std::exit(0); ++]]) ++ ++# _AC_CXX_CXX11_TEST_HEADER ++# ------------------------- ++# A C++ header suitable for testing for CXX11. ++AC_DEFUN([_AC_CXX_CXX11_TEST_HEADER], ++[[ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++namespace cxx11test ++{ ++ typedef std::shared_ptr sptr; ++ typedef std::weak_ptr wptr; ++ ++ typedef std::tuple tp; ++ typedef std::array int_array; ++ ++ constexpr int get_val() { return 20; } ++ ++ struct testinit ++ { ++ int i; ++ double d; ++ }; ++ ++ class delegate { ++ public: ++ delegate(int n) : n(n) {} ++ delegate(): delegate(2354) {} ++ ++ virtual int getval() { return this->n; }; ++ protected: ++ int n; ++ }; ++ ++ class overridden : public delegate { ++ public: ++ overridden(int n): delegate(n) {} ++ virtual int getval() override final { return this->n * 2; } ++ }; ++ ++ class nocopy { ++ public: ++ nocopy(int i): i(i) {} ++ nocopy() = default; ++ nocopy(const nocopy&) = delete; ++ nocopy & operator=(const nocopy&) = delete; ++ private: ++ int i; ++ }; ++} ++]])# _AC_CXX_CXX11_TEST_HEADER ++ ++# _AC_CXX_CXX11_TEST_BODY ++# ----------------------- ++# A C++ body suitable for testing for CXX11, assuming the corresponding header. ++AC_DEFUN([_AC_CXX_CXX11_TEST_BODY], ++[[ ++{ ++ // Test auto and decltype ++ std::deque d; ++ d.push_front(43); ++ d.push_front(484); ++ d.push_front(3); ++ d.push_front(844); ++ int total = 0; ++ for (auto i = d.begin(); i != d.end(); ++i) { total += *i; } ++ ++ auto a1 = 6538; ++ auto a2 = 48573953.4; ++ auto a3 = "String literal"; ++ ++ decltype(a2) a4 = 34895.034; ++} ++{ ++ // Test constexpr ++ short sa[cxx11test::get_val()] = { 0 }; ++} ++{ ++ // Test initializer lists ++ cxx11test::testinit il = { 4323, 435234.23544 }; ++} ++{ ++ // Test range-based for and lambda ++ cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; ++ for (int &x : array) { x += 23; } ++ std::for_each(array.begin(), array.end(), [](int v1){ std::cout << v1; }); ++} ++{ ++ using cxx11test::sptr; ++ using cxx11test::wptr; ++ ++ sptr sp(new std::string("ASCII string")); ++ wptr wp(sp); ++ sptr sp2(wp); ++} ++{ ++ cxx11test::tp tuple("test", 54, 45.53434); ++ double d = std::get<2>(tuple); ++ std::string s; ++ int i; ++ std::tie(s,i,d) = tuple; ++} ++{ ++ static std::regex filename_regex("^_?([a-z0-9_.]+-)+[a-z0-9]+$"); ++ std::string testmatch("Test if this string matches"); ++ bool match = std::regex_search(testmatch, filename_regex); ++} ++{ ++ cxx11test::int_array array = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; ++ cxx11test::int_array::size_type size = array.size(); ++} ++{ ++ // Test constructor delegation ++ cxx11test::delegate d1; ++ cxx11test::delegate d2(); ++ cxx11test::delegate d3(45); ++} ++{ ++ // Test override and final ++ cxx11test::overridden o1(55464); ++} ++{ ++ // Test nullptr ++ char *c = nullptr; ++} ++{ ++ // Test template brackets ++ std::vector> v1; ++} ++{ ++ // Unicode literals ++ char const *utf8 = u8"UTF-8 string \u2500"; ++ char16_t const *utf16 = u"UTF-8 string \u2500"; ++ char32_t const *utf32 = U"UTF-32 string \u2500"; ++} ++]]) ++ ++# _AC_PROG_CXX_CXX98 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) ++# ------------------------------------------------------------------- ++ ++# If the C++ compiler is not in ISO C++98 mode by default, try to add ++# an option to output variable CXX to make it so. This macro tries ++# various options that select ISO C++98 on some system or another. It ++# considers the compiler to be in ISO C++98 mode if it handles basic ++# features of the std namespace including: string, containers (list, ++# map, set, vector), streams (fstreams, iostreams, stringstreams, ++# iomanip), pair, exceptions and algorithms. ++ ++ ++AC_DEFUN([_AC_PROG_CXX_CXX98], ++[_AC_CXX_STD_TRY([cxx98], ++[_AC_CXX_CXX98_TEST_HEADER], ++[_AC_CXX_CXX98_TEST_BODY], ++dnl Try ++dnl GCC -std=gnu++98 (unused restrictive mode: -std=c++98) ++dnl IBM XL C -qlanglvl=extended ++dnl HP aC++ -AA ++dnl Intel ICC -std=gnu++98 ++dnl Solaris N/A (default) ++dnl Tru64 N/A (default, but -std gnu could be used) ++dnl with extended modes being tried first. ++[[-std=gnu++98 -std=c++98 -qlanglvl=extended -AA]], [$1], [$2])[]dnl ++])# _AC_PROG_CXX_CXX98 ++ ++# _AC_PROG_CXX_CXX11 ([ACTION-IF-AVAILABLE], [ACTION-IF-UNAVAILABLE]) ++# ------------------------------------------------------------------- ++# If the C++ compiler is not in ISO CXX11 mode by default, try to add ++# an option to output variable CXX to make it so. This macro tries ++# various options that select ISO C++11 on some system or another. It ++# considers the compiler to be in ISO C++11 mode if it handles all the ++# tests from the C++98 checks, plus the following: Language features ++# (auto, constexpr, decltype, default/deleted constructors, delegate ++# constructors, final, initializer lists, lambda functions, nullptr, ++# override, range-based for loops, template brackets without spaces, ++# unicode literals) and library features (array, memory (shared_ptr, ++# weak_ptr), regex and tuple types). ++AC_DEFUN([_AC_PROG_CXX_CXX11], ++[_AC_CXX_STD_TRY([cxx11], ++[_AC_CXX_CXX11_TEST_HEADER ++_AC_CXX_CXX98_TEST_HEADER], ++[_AC_CXX_CXX11_TEST_BODY ++_AC_CXX_CXX98_TEST_BODY], ++dnl Try ++dnl GCC -std=gnu++11 (unused restrictive mode: -std=c++11) [and 0x variants] ++dnl IBM XL C -qlanglvl=extended0x ++dnl (pre-V12.1; unused restrictive mode: -qlanglvl=stdcxx11) ++dnl HP aC++ -AA ++dnl Intel ICC -std=c++11 -std=c++0x ++dnl Solaris N/A (no support) ++dnl Tru64 N/A (no support) ++dnl with extended modes being tried first. ++[[-std=gnu++11 -std=c++11 -std=gnu++0x -std=c++0x -qlanglvl=extended0x -AA]], [$1], [$2])[]dnl ++])# _AC_PROG_CXX_CXX11 +diff --git a/tests/foreign.at b/tests/foreign.at +index f3a53420..50e49efc 100644 +--- a/tests/foreign.at ++++ b/tests/foreign.at +@@ -153,111 +153,8 @@ cp "$abs_top_srcdir/build-aux/install-sh" \ + # the second time. Git commit 18c140b50b0619454d4da50d58a318cc257d580a + # broke this usage and the breakage went unnoticed for *eight years*. + +-AT_DATA([aclocal.m4], +-[[# ax_prog_cc_for_build.m4 +-# serial 18 +-# Copyright (c) 2008 Paolo Bonzini +- +-AC_DEFUN([AX_PROG_CC_FOR_BUILD], [ +-AC_REQUIRE([AC_PROG_CC]) +-AC_REQUIRE([AC_PROG_CPP]) +-AC_REQUIRE([AC_CANONICAL_BUILD]) +- +-# Use the standard macros, but make them use other variable names +-m4@&t@_pushdef([ac_cv_prog_CPP], ac_cv_build_prog_CPP) +-m4@&t@_pushdef([ac_cv_prog_cc_c89], ac_cv_build_prog_cc_c89) +-m4@&t@_pushdef([ac_cv_prog_gcc], ac_cv_build_prog_gcc) +-m4@&t@_pushdef([ac_cv_prog_cc_works], ac_cv_build_prog_cc_works) +-m4@&t@_pushdef([ac_cv_prog_cc_cross], ac_cv_build_prog_cc_cross) +-m4@&t@_pushdef([ac_cv_prog_cc_g], ac_cv_build_prog_cc_g) +-m4@&t@_pushdef([ac_cv_c_compiler_gnu], ac_cv_build_c_compiler_gnu) +-m4@&t@_pushdef([ac_cv_exeext], ac_cv_build_exeext) +-m4@&t@_pushdef([ac_cv_objext], ac_cv_build_objext) +-m4@&t@_pushdef([ac_exeext], ac_build_exeext) +-m4@&t@_pushdef([ac_objext], ac_build_objext) +-m4@&t@_pushdef([CC], CC_FOR_BUILD) +-m4@&t@_pushdef([CPP], CPP_FOR_BUILD) +-m4@&t@_pushdef([GCC], GCC_FOR_BUILD) +-m4@&t@_pushdef([CFLAGS], CFLAGS_FOR_BUILD) +-m4@&t@_pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD) +-m4@&t@_pushdef([EXEEXT], BUILD_EXEEXT) +-m4@&t@_pushdef([LDFLAGS], LDFLAGS_FOR_BUILD) +-m4@&t@_pushdef([OBJEXT], BUILD_OBJEXT) +-m4@&t@_pushdef([host], build) +-m4@&t@_pushdef([host_alias], build_alias) +-m4@&t@_pushdef([host_cpu], build_cpu) +-m4@&t@_pushdef([host_vendor], build_vendor) +-m4@&t@_pushdef([host_os], build_os) +-m4@&t@_pushdef([ac_cv_host], ac_cv_build) +-m4@&t@_pushdef([ac_cv_host_alias], ac_cv_build_alias) +-m4@&t@_pushdef([ac_cv_host_cpu], ac_cv_build_cpu) +-m4@&t@_pushdef([ac_cv_host_vendor], ac_cv_build_vendor) +-m4@&t@_pushdef([ac_cv_host_os], ac_cv_build_os) +-m4@&t@_pushdef([ac_tool_prefix], ac_build_tool_prefix) +-m4@&t@_pushdef([am_cv_CC_dependencies_compiler_type], am_cv_build_CC_dependencies_compiler_type) +-m4@&t@_pushdef([am_cv_prog_cc_c_o], am_cv_build_prog_cc_c_o) +-m4@&t@_pushdef([cross_compiling], cross_compiling_build) +- +-cross_compiling_build=no +- +-ac_build_tool_prefix= +-AS@&t@_IF([test -n "$build"], [ac_build_tool_prefix="$build-"], +- [test -n "$build_alias"],[ac_build_tool_prefix="$build_alias-"]) +- +-AC_LANG_PUSH([C]) +-AC_PROG_CC +-_AC_COMPILER_EXEEXT +-_AC_COMPILER_OBJEXT +-AC_PROG_CPP +- +-# Restore the old definitions +-m4@&t@_popdef([cross_compiling]) +-m4@&t@_popdef([am_cv_prog_cc_c_o]) +-m4@&t@_popdef([am_cv_CC_dependencies_compiler_type]) +-m4@&t@_popdef([ac_tool_prefix]) +-m4@&t@_popdef([ac_cv_host_os]) +-m4@&t@_popdef([ac_cv_host_vendor]) +-m4@&t@_popdef([ac_cv_host_cpu]) +-m4@&t@_popdef([ac_cv_host_alias]) +-m4@&t@_popdef([ac_cv_host]) +-m4@&t@_popdef([host_os]) +-m4@&t@_popdef([host_vendor]) +-m4@&t@_popdef([host_cpu]) +-m4@&t@_popdef([host_alias]) +-m4@&t@_popdef([host]) +-m4@&t@_popdef([OBJEXT]) +-m4@&t@_popdef([LDFLAGS]) +-m4@&t@_popdef([EXEEXT]) +-m4@&t@_popdef([CPPFLAGS]) +-m4@&t@_popdef([CFLAGS]) +-m4@&t@_popdef([GCC]) +-m4@&t@_popdef([CPP]) +-m4@&t@_popdef([CC]) +-m4@&t@_popdef([ac_objext]) +-m4@&t@_popdef([ac_exeext]) +-m4@&t@_popdef([ac_cv_objext]) +-m4@&t@_popdef([ac_cv_exeext]) +-m4@&t@_popdef([ac_cv_c_compiler_gnu]) +-m4@&t@_popdef([ac_cv_prog_cc_g]) +-m4@&t@_popdef([ac_cv_prog_cc_cross]) +-m4@&t@_popdef([ac_cv_prog_cc_works]) +-m4@&t@_popdef([ac_cv_prog_cc_c89]) +-m4@&t@_popdef([ac_cv_prog_gcc]) +-m4@&t@_popdef([ac_cv_prog_CPP]) +- +-# restore global variables ac_ext, ac_cpp, ac_compile, +-# ac_link, ac_compiler_gnu (dependant on the current +-# language after popping): +-AC_LANG_POP([C]) +- +-# Finally, set Makefile variables +-AC_SUBST(BUILD_EXEEXT) +-AC_SUBST(BUILD_OBJEXT) +-AC_SUBST([CFLAGS_FOR_BUILD]) +-AC_SUBST([CPPFLAGS_FOR_BUILD]) +-AC_SUBST([LDFLAGS_FOR_BUILD]) +-]) +-]]) ++cp "$abs_top_srcdir/tests/data/ax_prog_cc_for_build_v18.m4" \ ++ aclocal.m4 + + AT_DATA([configure.ac], + [[AC_INIT([foo], [1.0]) +@@ -290,87 +187,9 @@ cp "$abs_top_srcdir/build-aux/install-sh" \ + # the second time. This usage was never broken (unlike with AC_PROG_CC) + # but it seems sensible to make sure it doesn't *get* broken. + +-AT_DATA([aclocal.m4], +-[[# ax_prog_cxx_for_build.m4 +-# serial 3 +-# Copyright (c) 2008 Paolo Bonzini +-# Copyright (c) 2012 Avionic Design GmbH +- +-AC_DEFUN([AX_PROG_CXX_FOR_BUILD], [ +-AC_LANG_PUSH([C++]) +- +-AC_REQUIRE([AC_PROG_CXX]) +-AC_REQUIRE([AC_PROG_CXXCPP]) +-AC_REQUIRE([AC_CANONICAL_HOST]) +- +-# Use the standard macros, but make them use other variable names +-m4@&t@_pushdef([ac_cv_prog_CXXCPP], ac_cv_build_prog_CXXCPP) +-m4@&t@_pushdef([ac_cv_prog_gxx], ac_cv_build_prog_gxx) +-m4@&t@_pushdef([ac_cv_prog_cxx_works], ac_cv_build_prog_cxx_works) +-m4@&t@_pushdef([ac_cv_prog_cxx_cross], ac_cv_build_prog_cxx_cross) +-m4@&t@_pushdef([ac_cv_prog_cxx_g], ac_cv_build_prog_cxx_g) +-m4@&t@_pushdef([CXX], CXX_FOR_BUILD) +-m4@&t@_pushdef([CXXCPP], CXXCPP_FOR_BUILD) +-m4@&t@_pushdef([CXXFLAGS], CXXFLAGS_FOR_BUILD) +-m4@&t@_pushdef([CPPFLAGS], CPPFLAGS_FOR_BUILD) +-m4@&t@_pushdef([CXXCPPFLAGS], CXXCPPFLAGS_FOR_BUILD) +-m4@&t@_pushdef([host], build) +-m4@&t@_pushdef([host_alias], build_alias) +-m4@&t@_pushdef([host_cpu], build_cpu) +-m4@&t@_pushdef([host_vendor], build_vendor) +-m4@&t@_pushdef([host_os], build_os) +-m4@&t@_pushdef([ac_cv_host], ac_cv_build) +-m4@&t@_pushdef([ac_cv_host_alias], ac_cv_build_alias) +-m4@&t@_pushdef([ac_cv_host_cpu], ac_cv_build_cpu) +-m4@&t@_pushdef([ac_cv_host_vendor], ac_cv_build_vendor) +-m4@&t@_pushdef([ac_cv_host_os], ac_cv_build_os) +-m4@&t@_pushdef([ac_cxxcpp], ac_build_cxxcpp) +-m4@&t@_pushdef([ac_compile], ac_build_compile) +-m4@&t@_pushdef([ac_link], ac_build_link) +- +-save_cross_compiling=$cross_compiling +-save_ac_tool_prefix=$ac_tool_prefix +-cross_compiling=no +-ac_tool_prefix= +- +-AC_PROG_CXX +-AC_PROG_CXXCPP +- +-ac_tool_prefix=$save_ac_tool_prefix +-cross_compiling=$save_cross_compiling +- +-# Restore the old definitions +-m4@&t@_popdef([ac_link]) +-m4@&t@_popdef([ac_compile]) +-m4@&t@_popdef([ac_cxxcpp]) +-m4@&t@_popdef([ac_cv_host_os]) +-m4@&t@_popdef([ac_cv_host_vendor]) +-m4@&t@_popdef([ac_cv_host_cpu]) +-m4@&t@_popdef([ac_cv_host_alias]) +-m4@&t@_popdef([ac_cv_host]) +-m4@&t@_popdef([host_os]) +-m4@&t@_popdef([host_vendor]) +-m4@&t@_popdef([host_cpu]) +-m4@&t@_popdef([host_alias]) +-m4@&t@_popdef([host]) +-m4@&t@_popdef([CXXCPPFLAGS]) +-m4@&t@_popdef([CPPFLAGS]) +-m4@&t@_popdef([CXXFLAGS]) +-m4@&t@_popdef([CXXCPP]) +-m4@&t@_popdef([CXX]) +-m4@&t@_popdef([ac_cv_prog_cxx_g]) +-m4@&t@_popdef([ac_cv_prog_cxx_cross]) +-m4@&t@_popdef([ac_cv_prog_cxx_works]) +-m4@&t@_popdef([ac_cv_prog_gxx]) +-m4@&t@_popdef([ac_cv_prog_CXXCPP]) +- +-# Finally, set Makefile variables +-AC_SUBST([CXXFLAGS_FOR_BUILD]) +-AC_SUBST([CXXCPPFLAGS_FOR_BUILD]) +- +-AC_LANG_POP([C++]) +-]) +-]]) ++cat "$abs_top_srcdir/tests/data/ax_prog_cc_for_build_v18.m4" \ ++ "$abs_top_srcdir/tests/data/ax_prog_cxx_for_build_v3.m4" \ ++ > aclocal.m4 + + AT_DATA([configure.ac], + [[AC_INIT([foo], [1.0]) +@@ -391,3 +210,27 @@ AT_CHECK([grep '^CXX = ..*$' Makefile > /dev/null 2>&1]) + AT_CHECK([grep '^CXX_FOR_BUILD = ..*$' Makefile > /dev/null 2>&1]) + + AT_CLEANUP ++ ++ ++AT_SETUP([gnulib-std-gnu11.m4]) ++ ++# Gnulib's std-gnu11.m4 (last significant change 2016-03-15) overrides ++# most but not all of the internal macros used by AC_PROG_CC and AC_PROG_CXX. ++# Commit 131d8c69f31dc6fc8dc93abe1096d52d1fe19fd3 changed the calling ++# convention of _AC_C_STD_TRY, causing configure scripts that load ++# std-gnu11.m4 to have shell syntax errors. ++ ++cp "$abs_top_srcdir/tests/data/gnulib_std_gnu11_2020_08_17.m4" \ ++ aclocal.m4 ++ ++AT_DATA([configure.ac], ++[[AC_INIT([foo], [1.0]) ++AC_PROG_CC ++AC_PROG_CXX ++AC_OUTPUT ++]]) ++ ++AT_CHECK_AUTOCONF ++AT_CHECK_CONFIGURE ++ ++AT_CLEANUP