summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* maint: post-release administriviav2.72bbranch-2.70Zack Weinberg2021-01-283-2/+5
| | | | | | * NEWS: Add header line for next release. * .prev-version: Record previous version. * cfg.mk (old_NEWS_hash): Auto-update.
* Release 2.71v2.71Zack Weinberg2021-01-281-2/+16
|
* make fetchZack Weinberg2021-01-2815-33/+45
|
* make update-copyrightZack Weinberg2021-01-2885-118/+147
|
* autoreconf: don’t error out when AM_GNU_GETTEXT is used alone.Zack Weinberg2021-01-041-7/+11
| | | | | | | | | | | | | | | 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.)
* autom4te: always update the output file, even if it hasn’t changedZack Weinberg2020-12-302-1/+49
| | | | | | | | | | | | | Automake generates a Makefile rule for regenerating the configure script, that relies on an invocation of ‘autoconf’ always bumping the timestamp on the configure script, even if it hasn’t changed. The patch to make autom4te update the output file atomically (1725c947144d9bebfe7817c2c5f0d53d884b1297) broke this. Fixes several failures in automake’s test suite. * bin/autom4te.in (handle_output): Always call update_file with force=1. * tests/tools.at (autoconf: timestamp changes): New test.
* Restore compatibility with older std-gnu11.m4.Zack Weinberg2020-12-307-400/+1384
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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: Document another portability problem of 'od'.Bruno Haible2020-12-301-2/+21
| | | | | * doc/autoconf.texi (Limitations of Usual Tools): Document that decimal output is not portable.
* doc: modernize grep discussionPaul Eggert2020-12-291-6/+6
|
* Use -fno-builtin, not -Werror, in AC_CHECK_DECLS (#110400)Zack Weinberg2020-12-234-95/+95
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | clang issues only a warning, not an error, when an undeclared identifier that names a built-in function is used: for instance char *(*p)(const char *, int) = strchr; (with no `#include <string.h>`) is an error with most compilers, a warning with clang. This broke the 2.69 implementation of AC_CHECK_DECL. In commit 82ef7805faffa151e724aa76c245ec590d174580, we tried to work around this quirk by using -Werror, but that put us at risk of being tripped up by other warnings. Bug 110400 reports, for instance, that this fragment (which is roughly what you get, after preprocessing, when AC_CHECK_DECL is applied to a function that *is* properly declared) extern void ac_decl (int, char *); int main (void) { (void) ac_decl; ; return 0; } provokes a warning from clang (and thus an error) when -Wextra-semi-stmt has been added to CFLAGS earlier in the configure script. The extra semicolon comes from AC_LANG_PROGRAM, and we can’t get rid of it because we have no way of telling reliably when someone wrote something like AC_LANG_PROGRAM([[#include <stdio.h>]], [[puts("hello world")]]) with no semicolon at the end of the statement; this has been acceptable for decades. Besides, that’s just one warning, who knows what compilers will start complaining about tomorrow? So: change AC_CHECK_DECL to compile its programs with -fno-builtin, instead, when the default compilation mode fails to detect an undeclared strchr. The code is restructured so that we can try other options as well, if we find another compiler with the same quirk but different command-line syntax. (All of this logic is very C-family specific, but it appears to me that AC_CHECK_DECL has never worked with other languages, so we can continue to live with that for now.) Fixes bug 110400; partially reverts 82ef7805faffa151e724aa76c245ec590d174580. * lib/autoconf/general.m4 (_AC_UNDECLARED_WARNING): Rename to _AC_UNDECLARED_BUILTIN. Instead of looking at diagnostic output, loop trying to find a command-line option that makes the compiler error out on undeclared builtins. (_AC_CHECK_DECL_BODY): Don’t AC_REQUIRE anything here. Make shell code language-agnostic, except for the actual test program. Add arguments to the shell function for additional compiler options to use. (AC_CHECK_DECL): AC_REQUIRE _AC_UNDECLARED_BUILTIN here. Supply $ac_{AC_LANG_ABBREV}_undeclared_builtin_options to ac_fn_check_decl. * tests/local.at (AT_CONFIG_CMP): Update list of variables to ignore when comparing C and C++ configure runs. * tests/semantics.at (AC_CHECK_DECLS): Add memcpy and strchr to AC_CHECK_DECLS call for functions that may be known to the compiler. * doc/autoconf.texi (AC_CHECK_DECL, AC_CHECK_DECLS): Remove note about compiler warnings.
* autom4te: correct error message when we can’t create autom4te.cache.Zack Weinberg2020-12-232-7/+32
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | While testing something else, I noticed that autom4te may print a nonsensical error message when it fails to create autom4te.cache, because it checks again whether the directory already exists before giving up, and this clobbers errno. Instead of doing (the perl equivalent of) test -d $cache || mkdir $cache || test -d $cache call mkdir unconditionally. If it fails with an errno code other than EEXIST, consider that a hard failure; if it fails with EEXIST, check whether the thing that exists is in fact a directory. (A symlink to a directory qualifies; I wouldn’t be surprised if people are moving autom4te.cache around with symlinks.) Either way, if we fail, report strerror(errno) from the original mkdir failure. Also, print the current working directory as part of the error message; this aids debugging when you’re working with a big hairy nested tree. * bin/autom4te.in: Don’t check whether autom4te.cache exists before attempting to create it. Only stat autom4te.cache if mkdir fails with EEXIST, otherwise fail immediately. Make sure to report the errno code from mkdir, not the subsequent stat (if any). Report the current working directory as part of the error message. * tests/tools.at: Verify that autom4te reports the actual reason when it fails to create autom4te.cache. Verify that failure to create autom4te.cache because that name exists, but isn’t a directory, is detected.
* Improve AC_USE_SYSTEM_EXTENSIONS port to HP-UX 11.11Paul Eggert2020-12-111-0/+6
| | | | | | * lib/autoconf/specific.m4 (AC_USE_SYSTEM_EXTENSIONS): Define _HPUX_ALT_XOPEN_SOCKET_API, for HP-UX 11.11. This patch is adapted from Gnulib.
* Port minor AC_HEADER_MAJOR fixes from GnulibPaul Eggert2020-12-111-4/+4
| | | | | * lib/autoconf/headers.m4 (AC_HEADER_MAJOR): Improve m4 quoting.
* Port minor AC_FUNC_ALLOCA fixes from GnulibPaul Eggert2020-12-111-5/+5
| | | | | | | * lib/autoconf/functions.m4 (_AC_LIBOBJ_ALLOCA, AC_FUNC_ALLOCA): Use ' not ` in generated comments, as per current GNU coding style. (_AC_LIBOBJ_ALLOCA): Use plain # instead of unnecessary quadrigraph. This patch is adapted from Gnulib.
* Improve port of AC_C_RESTRICT to Oracle C++Paul Eggert2020-12-111-6/+7
| | | | | | | | Problem reported by Christian Biesinger in: https://lists.gnu.org/r/bug-gnulib/2019-12/msg00159.html * lib/autoconf/c.m4 (AC_C_RESTRICT): Port better to Oracle Developer Studio C++ 12.5 or later. This patch is adapted from Gnulib.
* _AC_PROG_CC_C99: fix typo (#110396)Zack Weinberg2020-12-081-1/+1
| | | | | | | | | _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.
* maint: add outline for future NEWS (release branch).Zack Weinberg2020-12-081-1/+2
|
* maint: post-release administriviaZack Weinberg2020-12-083-2/+5
| | | | | | * NEWS: Add header line for next release. * .prev-version: Record previous version. * cfg.mk (old_NEWS_hash): Auto-update.
* Release 2.70.v2.70Zack Weinberg2020-12-081-1/+1
|
* Remove obsolete instructions from HACKING.Zack Weinberg2020-12-081-4/+1
| | | | | configure CC=g++ is no longer supported, so don’t tell maintainers to test that.
* testsuite: log version of M4 and PerlZack Weinberg2020-12-082-0/+4
| | | | | | | | | | | Jannick reported problems on OSX for which the most plausible explanation is that the system-provided M4 is emitting error messages with different line numbers than we expect, perhaps because Apple froze their copy of GNU M4 to the last GPLv2 release. To test this hypothesis, add $PERL and $M4 to AT_TESTED in our testsuite. * tests/atlocal.in: Also set $M4 from configure. * tests/local.at: Add AT_TESTED([$PERL $M4]).
* lib/autotest/general.m4: typo fixZack Weinberg2020-12-081-1/+1
| | | | | | | | | The absolute-path case in AT_TESTED had a typo in it, causing bizarre error messages and preventing programs identified by absolute path from being logged properly. * lib/autotest/general.m4 (AT_TESTED): Fix typoed shell syntax in handling of programs identified by absolute path.
* Three minor testsuite fixes.Zack Weinberg2020-12-082-9/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1. To insulate the test suite from a system-provided config.site file, set the CONFIG_SITE environment variable to a file that is known not to exist. Problem reported by Jannick. 2. AC_PROG_CC, AC_PROG_CXX, AC_PROG_CPP, and AC_PROG_CXXCPP may set cache variables named ‘ac_cv_prog_$tool’ or ‘ac_cv_prog_ac_ct_$tool’, depending on system conditions; _AT_CONFIG_CMP_PRUNE needs to handle both possibilities. Found by testing on FreeBSD 12; I have no idea why it didn’t show up on _any_ of my other test platforms. 3. The ‘AC_PROG_LEX with yywrap’ test needs to be skipped on systems that don’t provide libl.a nor libfl.a. This change needed yet another hook for AT_CHECK_MACRO. Found by testing on Alpine Linux. (Ideally, instead of skipping this test, we would test that this configure script *errors out* on these systems, but that would involve much more invasive changes to AT_CHECK_MACRO, which I don’t want to hold the release for.) * tests/local.at (AT_PREPARE_TESTS): Set CONFIG_SITE to refer to a file that is known not to exist, and export it. (_AT_CONFIG_CMP_PRUNE): Prune all variables matching the ERE ‘ac_cv_prog_(ac_ct_)?(CC|CXX|CPP|CXXCPP)’. (AT_CHECK_MACRO): Add PRETEST-CMDS argument which takes commands to execute immediately after AT_SETUP. * tests/semantics.at (AC_PROG_LEX with yywrap): Using PRETEST-CMDS, skip this test on OSes where neither -ll nor -lfl provides a definition of yywrap.
* autoreconf --install --force: replace install-sh with no timestampZack Weinberg2020-12-082-13/+26
| | | | | | | | | | | | | Old versions of install-sh did not have a timestamp line. Therefore, treat the absence of a timestamp line as indicating a very old file (that --install --force should replace), not as an error. Problem reported by Pascal Terjan. * bin/autoreconf.in (extract_time_stamp): Return 1970-01-01 when no timestamp line is found. * tests/torture.at (Missing auxiliary files (--force)): Test replacement of old install-sh with no timestamp line.
* make fetchZack Weinberg2020-12-071-1/+2
|
* Update documentation of AC_USE_SYSTEM_EXTENSIONS.Zack Weinberg2020-12-072-72/+111
| | | | | | | | | | | | | | | | | | | | | | | The list of macros documented as being defined by AC_USE_SYSTEM_EXTENSIONS had gotten out of sync with the actual list. Update it thoroughly. Also, I introduced an error into the commentary when I merged Julien ÉLIE’s patch to define _NETBSD_SOURCE and _OPENBSD_SOURCE in AC_USE_SYSTEM_EXTENSIONS. _OPENBSD_SOURCE does something on NetBSD and *doesn’t* do anything on OpenBSD. This is corrected. Clean up the code in AC_USE_SYSTEM_EXTENSIONS a bit while I’m in there; we now had a redundant definition of _NETBSD_SOURCE (one unconditional and one conditional on minix/config.h existing). Reorganize the macro to make it easier to catch problems like this in the future. * lib/autoconf/specific.m4 (AC_USE_SYSTEM_EXTENSIONS): Reorganize; remove redundant AC_DEFINE of _NETBSD_SOURCE; add some missing AC_BEFOREs; use _AC_CHECK_HEADER_ONCE for header checks; revise all commentary. * doc/autoconf.texi (AC_USE_SYSTEM_EXTENSIONS): Update.
* Revise documentation of AT_CHECK.Zack Weinberg2020-12-071-42/+58
| | | | Patch originally by Jannick but then about 10x more words added by me.
* Revise documentation of AC_PROG_CC and comments on conformance checks.Zack Weinberg2020-12-072-100/+97
| | | | | | | | | | | | | Makes the documentation of AC_PROG_CC consistent with the documentation of AC_PROG_CXX. Also removes a bunch of redundant text from c.m4 and adds lists of the headers that *can* be used in the conformance tests, so future hackers don’t have to look them up. * doc/autoconf.texi (AC_PROG_CC): Make description consistent with description of AC_PROG_CXX. * lib/autoconf/c.m4: Clean up some outdated or repetitive commentary and add lists of the freestanding headers above the code that needs to avoid using non-freestanding headers.
* Add checks of __STDC__ and __STDC_VERSION__ to C conformance tests.Zack Weinberg2020-12-071-0/+17
| | | | | | | | | | | | | This makes the C conformance tests more consistent with the C++ conformance tests, and should also speed up cycling through the possible options to turn on C99/C11. Tested with gcc, clang, SunPRO C, and AIX xlc. * lib/autoconf/c.m4 (_AC_C_C89_TEST_GLOBALS): Add preprocessor test for __STDC__ being defined (to any value). (_AC_C_C99_TEST_GLOBALS, _AC_C_C11_TEST_GLOBALS): Add preprocessor test of the value of __STDC_VERSION__.
* autom4te: don’t crash when warnings have no stacktraceZack Weinberg2020-12-071-0/+2
| | | | | | | | | | | | | In testing on Darwin (OSX), sometimes warnings reported from M4 code reach autom4te with no stack trace at all, causing the perl script to crash with a “use of uninitialized value” error. The root cause of the problem is not clear to me, but the script certainly shouldn’t crash. Problem found by Jannick <thirdedition@gmx.net>. * bin/autom4te.in: When processing warnings, make sure $stacktrace is defined.
* Small bug fixes for the test suite.Jannick2020-12-072-2/+8
| | | | | | | * tests/atlocal.in: Also set AWK to value detected by configure. Alphabetize list of shell variables set by config.status. * tests/local.mk: Add a rule to recreate tests/atconfig when config.status changes.
* Don’t use hosted headers when testing for C(++) standard level (#110393)Zack Weinberg2020-12-061-251/+407
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The tests for the level of the C and C++ standard supported by their respective compilers should also avoid using any headers that are not guaranteed to be available in the respective freestanding environment. Unlike the previous change, the only user-visible consequence of this one should be that C11/C99/C89/C++11/C++98 *compiler* support is now correctly detected when the compilation target is a freestanding environment. This patch also refactors how we “emit [the text of the C/C++ standard-conformance test programs] only once per [configure script], into shell variables which can then be referenced repeatedly,” from c3853873, because editing them just a little made the M4 quotation break. Clearly too fragile. I believe this completes the fix for bug #110393. * lib/autoconf/c.m4 (_AC_PROG_CC_C89, _AC_PROG_CC_C99, _AC_PROG_CC_C11) _AC_C_C99_TEST_HEADER, _AC_C_C99_TEST_BODY): Move all test program fragments into new macros that can be AC_REQUIREd individually: _AC_C_C89_TEST_GLOBALS, _AC_C_C89_TEST_MAIN, _AC_C_C89_TEST_PROGRAM, _AC_C_C99_TEST_GLOBALS, _AC_C_C99_TEST_MAIN, _AC_C_C99_TEST_PROGRAM, _AC_C_C11_TEST_GLOBALS, _AC_C_C11_TEST_MAIN, _AC_C_C11_TEST_PROGRAM. Each emits test code at most once, into a shell variable in the INIT_PREPARE diversion. Revise each test program to use only library features of the respective standard’s freestanding environment. (_AC_C_STD_TRY): Take the *name* of the shell variable holding the complete test program as an argument, not the code itself. All callers adjusted to match. (_AC_PROG_CXX_CXX98, _AC_PROG_CXX_CXX11, _AC_CXX_STD_TRY) (_AC_CXX_CXX98_TEST_HEADER, _AC_CXX_CXX98_TEST_BODY) (_AC_CXX_CXX11_TEST_HEADER, _AC_CXX_CXX11_TEST_BODY): Similarly. New macros are: _AC_CXX_CXX98_TEST_GLOBALS, _AC_CXX_CXX98_TEST_MAIN, _AC_CXX_CXX98_TEST_PROGRAM, _AC_CXX_CXX11_TEST_GLOBALS, _AC_CXX_CXX11_TEST_MAIN, _AC_CXX_CXX11_TEST_PROGRAM.
* AC_INCLUDES_DEFAULT: Check for presence of C90 hosted headers (#110393)Zack Weinberg2020-12-067-68/+104
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since 1993, Autoconf has been assuming that it is safe to include any of the headers defined by ISO C90 without checking for them; this is inaccurate, since only a subset are necessarily available in a C90 *freestanding* environment. It is OK to assume the presence of a header in a macro that checks specifically for something declared by that header (if the header is not present, we will think the specific declaration is unavailable, which is probably accurate for modern embedded environments). It is also OK to continue recommending that user code use these headers unconditionally—anyone working with a freestanding environment knows it. But it is not OK for very generic code within Autoconf itself, such as AC_INCLUDES_DEFAULT, to make this assumption. Note that the set of headers that are not always available includes stdio.h, which we have been assuming can be included unconditionally for even longer. In AC_INCLUDES_DEFAULT, revert to checking for string.h and stdlib.h before including them. Also revert to defining STDC_HEADERS only when string.h and stdlib.h are available (but do not check for float.h and stdarg.h, as these are part of the freestanding set). Add a new check for stdio.h. Sort the inclusion list by standard (C90 freestanding; C90 hosted; C99; POSIX) and alphabetically within each group. Revise all the documentation and update the testsuite. This partially reverts commit 86c213d0e355296f026a36e3203c0813041aae89 and is a partial fix for bug #110393. * lib/autoconf/headers.m4 (AC_CHECK_INCLUDES_DEFAULT): Check for stdio.h, stdlib.h, and string.h before including them. Define STDC_HEADERS only when string.h and stdlib.h are both available. Organize includes list by standard, then alphabetically. * doc/autoconf.texi, NEWS: Update to match. * tests/local.at (AT_CHECK_DEFINES): Make regexes more specific. Also expect a definition of HAVE_STDIO_H. * tests/c.at, tests/semantics.at, tests/tools.at: Use <float.h>, not <stdio.h>, as a header that we expect always to exist. Add HAVE_STDIO_H to various lists of macros that are expected to appear in config.h.
* Define _NETBSD_SOURCE and _OPENBSD_SOURCE in AC_USE_SYSTEM_EXTENSIONS (#110392)Julien ÉLIE2020-12-061-18/+34
| | | | | | | | | | | | | | | | | These expose additional extensions specific to those operating systems, similar to _DARWIN_C_SOURCE, _GNU_SOURCE, etc. (DragonflyBSD and FreeBSD currently do not have any equivalent macros.) Fixes bug #110392. See also https://git.savannah.gnu.org/cgit/gnulib.git/tree/m4/extensions.m4 https://git.eyrie.org/?p=devel/rra-c-util.git;a=commitdiff;h=f8a922cf31804dcc25ac176dcc22fdcdffcb5fdf * lib/autoconf/specific.m4 (AC_USE_SYSTEM_EXTENSIONS): Also define _NETBSD_SOURCE and _OPENBSD_SOURCE. Add comment explaining that there are (currently) no equivalent macros on DragonflyBSD and FreeBSD. Put macro list in alphabetical order.
* Revert "AC_PROG_CC: define via AC_DEFUN_ONCE". (#110350)Zack Weinberg2020-12-044-11/+269
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Revert commit 18c140b50b0619454d4da50d58a318cc257d580a, restoring AC_PROG_CC to being defined as an ordinary AC_DEFUN. This broke third-party macros (e.g. the Autoconf Macro Archive’s AX_PROG_CC_FOR_BUILD) that intentionally invoked AC_PROG_CC a second time with its guts redefined via a whole bunch of ‘pushdef’s. I don’t think we want to support this long-term, but needing access to a build-native compiler in cross-compilation is common enough that we should have *some* supported way to do it, and it may as well be AX_PROG_CC_FOR_BUILD until we come up with something better. If we go back to AC_DEFUN_ONCE for AC_PROG_CC in the future, we should do it consistently for all the “find me a compiler” macros -- it was *only* done for AC_PROG_CC in 18c140b5. The rationale for AC_DEFUN_ONCE seems to have been to reduce the size of the generated configure script. The bulk of the size accountable to AC_PROG_CC is the test programs for figuring out which version of the C standard is available, so I tweaked _AC_C_STD_TRY (and _AC_CXX_STD_TRY) to emit that text only once per program, into shell variables which can then be referenced repeatedly. Fixes bug #110350. * NEWS, doc/autoconf.texi: Revert documentation changes associated with AC_PROG_CC being a one-shot macro. * lib/autoconf/c.m4 (AC_PROG_CC): Revert to defining with AC_DEFUN. (_AC_C_STD_TRY, _AC_CXX_STD_TRY): Emit the test program only once, even if invoked multiple times with the same arguments. * tests/foreign.at (AX_PROG_CC_FOR_BUILD, AX_PROG_CXX_FOR_BUILD): New tests.
* Autotest: add official way to execute code before all/each test.Zack Weinberg2020-12-029-74/+221
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, there isn’t any documented way for an Autotest testsuite to add custom code to be run either right before the main driver loop, or at the point of each AT_SETUP. For instance, there’s no good place to put environment variable sanitization that should apply to the entire testsuite (but isn’t universally relevant), or shell function definitions to be used by custom test macros. Autoconf’s test suite is poking shell functions directly into the PREPARE_TESTS diversion, and doing environment variable sanitization in each individual test. Both of these are obviously undesirable. This patch adds three new AT_* macros that can be used to do these things in an officially-supported way: AT_PREPARE_TESTS adds code to be run right before the main driver loop, AT_PREPARE_EACH_TEST adds code to be run at the beginning of each test, and AT_TEST_HELPER_FN defines a shell function that will be available to each test. In Autoconf’s test suite, I use AT_PREPARE_TESTS to factor out environment variable sanitization that *ought* to apply across the board, and AT_TEST_HELPER_FN for the helper function used by AT_CHECK_ENV. (This fixes the testsuite bug reported by Jannick at https://lists.gnu.org/archive/html/autoconf/2020-10/msg00052.html : CONFIG_SITE in the parent environment will no longer be visible to tests.) It would be nice to give an example of when AT_PREPARE_EACH_TEST is useful, in the documentation, but I didn’t find one in the autoconf test suite. * lib/autotest/general.m4 (AT_PREPARE_TESTS, AT_PREPARE_EACH_TEST) (AT_TEST_HELPER_FN): New macros. (AT_INIT, AT_TESTED): Emit the code to report tested programs only if it’s needed, and make sure it’s after any code added by AT_PREPARE_TESTS. * tests/local.at: Add AT_PREPARE_TESTS block that ensures $MAKE is set sensibly and $MAKEFLAGS and $CONFIG_SITE are unset. Use AT_TEST_HELPER_FN for the helper function needed by AT_CHECK_ENV. (AT_CHECK_MAKE): No need to sanitize $MAKE or $MAKEFLAGS here. * tests/base.at, tests/compile.at, tests/m4sh.at, tests/torture.at: No need to unset or neutralize $CONFIG_SITE in individual tests. * tests/autotest.at: Add tests for new macros. * doc/autoconf.texi, NEWS: Document new macros.
* Document better where to put -m32 or -m64 compiler options.Bruno Haible2020-12-011-3/+12
| | | | | | * doc/autoconf.texi (Preset Output Variables): Clarify that options -m32 or -m64 must go into CC, not CFLAGS and not CPPFLAGS either. This is needed because on bi-arch platforms, config.guess runs $CC without $CFLAGS nor $CPPFLAGS.
* Add a note to NEWS about ac_cv_header_stdlib_h not being set...v2.69eZack Weinberg2020-12-011-0/+3
| | | | ... even though HAVE_STDLIB_H is.
* Make autoreconf --force --install overwrite existing files (#110371)Zack Weinberg2020-11-302-6/+102
| | | | | | | | | | | | | | | | | | | | | | | | | | | The new feature of autoreconf --install installing config.guess, config.sub, and install-sh itself didn’t implement --force mode correctly; existing files would not be overwritten. The fix has two parts. If --force is in effect, we try to install everything that we can from the needed-auxfiles list *before* checking which of them already exist. But also, we don’t overwrite existing files unconditionally, even with --force; we only do so if the file we can install has a newer “timestamp” line than the copy at the destination. This is because Automake can also install all of the files we can install. Suppose someone is using autoconf 2.70 with a newly released automake 1.17; automake 1.17 will presumably ship with a newer config.guess than autoconf 2.70 did; that version should win. Fixes bug #110371. * bin/autoreconf.in (extract_time_stamp, our_aux_file_is_newer): New functions. (install_aux_file): If the destination exists, and our copy is not newer, do not overwrite it. (autoreconf_current_directory): When $force is true, attempt to install all needed aux files *before* scanning for missing aux files. (throughout): Remove extra \n from various error messages. * tests/torture.at (Missing auxiliary files (--force)): New test.
* Add more release notes about compatibility problems.Zack Weinberg2020-11-301-0/+32
| | | | | See https://savannah.gnu.org/support/?110382 and https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97998 for background.
* AT_CHECK_MACRO: test C++ as well as C, cross as well as nativeZack Weinberg2020-11-306-167/+777
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Many of the reported regressions in Autoconf 2.70 betas went unnoticed for years because Autoconf’s bundled test suite didn’t test most of the macros with a C++ compiler and/or in cross compilation mode. There’s a special makefile target ‘maintainer-check-c++’ that runs all the tests with CC=g++, but that doesn’t catch the regressions either, because it doesn’t compare the configure results with what you’d have gotten with a C compiler. Also, C and C++ have diverged to the point where setting CC to a C++ compiler doesn’t work reliably anymore. This patch overhauls AT_CHECK_MACRO to test each macro four times: (C compiler, C++ compiler) x (native mode, cross-compilation mode). All four tests are expected to produce the same config.cache and config.h, except for certain predictable differences due to running AC_PROG_CXX instead of AC_PROG_CC, and a short list of known, acceptable differences, maintained in mktests.pl. There are two classes of known, acceptable differences. Macros that use AC_RUN_IFELSE aren’t tested in cross-compilation mode at all, because they may crash the script (this is temporary and will be revisited after 2.70). Macros that correctly detect a difference between C and C++ (e.g. AC_HEADER_STDBOOL will notice that C++ doesn’t have the _Bool type) are annotated with the specific cache variable and #define that varies. mktests.pl now also has the capability to provide values for the MACRO-USE, ADDITIONAL-COMMANDS, and AUTOCONF-FLAGS arguments to AT_CHECK_(AU_)MACRO, on a per-macro basis, but that’s not used in this patch. Some of the manual uses of AT_CHECK_MACRO do not need to test C++ and/or cross compilation; for them, there is a new test helper, AT_CHECK_CONFIGURE_AC. Another new helper, AT_PRESERVE_CONFIG_STATUS, is used extensively in AT_CHECK_(AU_)MACRO but may be also useful in manual tests that need to do multiple configure runs. This change supersedes AT_CHECK_MACRO_CROSS and ‘make maintainer-check-c++’, which are removed. In my testing, setting CC to a C++ compiler no longer works at all, for reasons that are impractical to fix (e.g. C++ compilers choke on the test for C2011 features) so I have added a note to NEWS saying that this is not supported anymore. * tests/local.at (AT_CHECK_MACRO): Default behavior is now to test the macro in both native and cross-compilation mode, and expect the results to be identical. If the macro transitively required AC_PROG_CC, and a C++ compiler is available, then test it twice more with AC_LANG([C++]) in effect, and again expect the results to be identical. New fifth argument TEST-PARAMETERS can modify this behavior. (_AT_FILTER_CXX_CV_VARIES, _AT_FILTER_CXX_DEFINE_VARIES): New, subroutines of AT_CHECK_MACRO. (AT_CHECK_MACRO_CROSS): Remove, subsumed by new AT_CHECK_MACRO behavior. (AT_CHECK_AU_MACRO): Forward to AT_CHECK_MACRO for the basic test; then do the same autoupdate test as before, as a separate test group. (at_check_env): Also ignore OPENMP_CXXFLAGS. (AT_CONFIG_CMP): Add third argument EXTRA-VARIANCE that specifies additional variables that are expected to vary in a particular test. (_AT_CONFIG_CMP_PRUNE): New, subroutine of AT_CONFIG_CMP. (AT_DEFINES_CMP): New helper macro that compares config.h headers, with the ability to ignore variation in specific defines. (_AT_DEFINES_CMP_PRUNE): New, subroutine of AT_DEFINES_CMP. (AT_PRESERVE_CONFIG_STATUS): New helper that makes copies of config.h, config.log, config.status, and state-env.after under names that won’t be clobbered by a subsequent run of configure. (AT_CHECK_CONFIGURE_AC): New helper that defines a complete test group consisting of a single invocation of _AT_CHECK_AC_MACRO; effectively what AT_CHECK_MACRO used to be. (_AT_CHECK_AC_MACRO): Correct documentation comment; the PRE-TESTS argument has always been optional. * tests/mktests.pl (test_parameters): New global data object giving extra arguments to pass to AT_CHECK_MACRO/AT_CHECK_AU_MACRO on a per-macro basis. (emit_test): New function that handles emitting calls to AT_CHECK_(AU_)MACRO with the desired arguments. (scan_m4_files): Use emit_test. (au_exclude_list): Add AC_HAVE_LIBRARY, AC_COMPILE_CHECK, AC_TRY_CPP, AC_TRY_COMPILE, AC_TRY_LINK, and AC_TRY_RUN. * tests/semantics.at (AC_CHECK_LIB, AC_SEARCH_LIBS): Rewrite test using symbols from zlib instead of libm, to get consistent behavior from C and C++. (AC_SEARCH_LIBS (none needed)): Revise to clarify what is being tested. (AC_CHECK_DECLS): Use _AC_LANG_ABBREV when inspecting cache variables. (AC_CHECK_ALIGNOF, AC_CHECK_ALIGNOF struct) (AC_CHECK_SIZEOF, AC_CHECK_SIZEOF struct) No need for AT_CHECK_MACRO_CROSS. (AC_CHECK_FILES): Switch to AT_CHECK_CONFIGURE_AC. (AC_SYS_RESTARTABLE_SYSCALLS, AC_FUNC_WAIT3): Do not test in cross compilation mode. (AC_TRY_CPP, AC_TRY_COMPILE, AC_TRY_LINK, AC_TRY_RUN) (AC_COMPILE_CHECK, AC_HAVE_LIBRARY): New manual AT_CHECK_AU_MACRO tests. * tests/c.at (Extensions, C keywords, AC_PROG_CPP requires AC_PROG_CC) (AC_NO_EXECUTABLES (working linker), AC_NO_EXECUTABLES (broken linker)): Switch to AT_CHECK_CONFIGURE_AC. Also convert case statements to AS_CASE. (Broken/missing compilers): Pass CC=no-such-compiler on the command line instead of hardwiring it in the configure script. * tests/local.mk (maintainer-check-c++): Remove target. (maintainer-check): Run the ordinary ‘make check’ as well as ‘make maintainer-check-posix’.
* Rewrite mktests.sh in Perl.Zack Weinberg2020-11-303-254/+310
| | | | | | | | | | | | | | | | This is probably marginally faster since it doesn’t have to read the .m4 files twice or muck around with temporary files and subprocesses, but the actual point of this rewrite is that it will make it easier to provide additional arguments to AT_CHECK_MACRO and AT_CHECK_AU_MACRO on a per-macro basis; this capability will be added and used in the next patch. In *this* patch, the ac*.at files are not functionally changed at all. (The comments come out slightly differently, though.) * tests/mktests.sh: Delete and... * tests/mktests.pl: ...rewrite in Perl. * tests/local.mk: Update to match.
* Overhaul Erlang support.Zack Weinberg2020-11-304-148/+84
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Erlang is similar to Java in that it doesn’t compile to standalone machine code; the output of ‘erlc’ is byte-code files that are then interpreted by ‘erl’. We handle this poorly in a whole bunch of ways, particularly when cross-compiling. This patch fixes up the more serious problems: - AC_COMPILE_IFELSE now actually works when AC_LANG([Erlang]) is in effect. - ‘conftest.beam’ is now deleted in several more places where it could be created. - The various AC_ERLANG_* macros that interrogate the runtime environment do so by invoking ‘$ERL’ directly, rather than using AC_RUN_IFELSE, and thus do not crash the configure script when we think we’re cross-compiling. (It is not clear to me whether they get the correct answer when cross-compiling, but this should still be strictly an improvement.) - The Erlang-related tests have been streamlined. Further improvements are definitely possible, but we’d have to teach the infrastructure to make $ac_objext language-specific first, which seems like too big of a change for 2.70. (This patch is all fallout from a logically unrelated testsuite change which is coming up next. Gotta love the fundamental interconnectedness of things.) * lib/autoconf/general.m4 (_AC_COMPILE_IFELSE_BODY) (_AC_LINK_IFELSE_BODY): Delete conftest.beam as well as conftest.$ac_objext. * lib/autoconf/erlang.m4 (AC_ERLANG_PATH_ERLC, AC_ERLANG_PATH_ERL): Don’t repeat work done by AC_PATH_TOOL. (Erlang $ac_compile): Fake an .o file so AC_TRY_COMPILE will be happy. (AC_LANG_COMPILER(Erlang)): AC_REQUIRE AC_ERLANG_NEED_ERLC, not AC_ERLANG_PATH_ERLC. Also AC_REQUIRE AC_ERLANG_NEED_ERL so AC_RUN_IFELSE works reliably. (AC_ERLANG_CHECK_LIB, AC_ERLANG_SUBST_ROOT_DIR) (AC_ERLANG_SUBST_LIB_DIR, AC_ERLANG_SUBST_ERTS_VER): Use $ERL -eval, not AC_RUN_IFELSE. No need to AC_REQUIRE AC_ERLANG_NEED_ERLC. * tests/erlang.at: Don’t test anything here that’s tested adequately by acerlang.at; document which macros those are expected to be. Remove unnecessary AC_ERLANG_PATH_ERL/ERLC invocations throughout. (AT_CHECK_MACRO([Erlang])): Rename test to ‘Erlang basic compilation’; expect both AC_COMPILE_IFELSE and AC_RUN_IFELSE to work; handle cross compilation mode properly. * tests/mktests.sh: Exclude from acerlang.at all macros completely covered by erlang.at.
* Make “redefining AS_ECHO internals” test more robust.Zack Weinberg2020-11-301-4/+14
| | | | | | | | | M4-redefining ‘printf’ as ‘echo’ brings back all the variations in ‘echo’ behavior that we were trying to get away from by switching to ‘printf’ in the first place. This caused a spurious failure on AIX. * tests/m4sh.at (Redefining AS_ECHO internals): Redefine ‘printf’ as a shell function with fully predictable output, not as ‘echo’.
* torture.at: Insulate more tests from buggy third-party m4 files.Zack Weinberg2020-11-301-6/+16
| | | | | | | | | | | All tests that run autoreconf need to defend against the possibility of aclocal not existing and/or barfing on bugs in third-party m4 files installed on the build system. Two of the “Missing auxiliary files” tests were missing this defensive code. * tests/torture.at (Missing auxiliary files (install-sh)) (Missing auxiliary files (foreign)): Prevent autoreconf from running aclocal.
* Avoid ‘new File::Temp’ in Perl scripts.Zack Weinberg2020-11-302-16/+9
| | | | | | | | | | Despite what the documentation says, ‘new File::Temp’ does not work reliably in perl 5.6.x. Rather than figure out exactly what is wrong with it, let’s just stick to ‘tempfile’. * bin/autom4te.in (handle_output): Use tempfile function instead of object-oriented File::Temp interface. * bin/autoreconf.in (install_aux_file): Likewise.
* Disentangle HAVE__BOOL from ac_cv_header_stdbool_h.Zack Weinberg2020-11-301-45/+89
| | | | | | | | | | | | | | | | | | | | | AC_CHECK_HEADER_STDBOOL is documented to make two checks: whether the C99 header <stdbool.h> is available and fulfills its specification (i.e. including it makes the type ‘bool’ and the constants ‘true’ and ‘false’ available), and, independently, whether the type ‘_Bool’ is available. In C++, the type ‘_Bool’ is usually _not_ available, but <stdbool.h> is still supposed to be include-able and the type ‘bool’ and the constants ‘true’ and ‘false’ are still supposed to be available (unconditionally). However, the test for <stdbool.h> fulfilling its specification freely used _Bool, and would therefore fail spuriously. Correct this by checking for _Bool first, and then refactoring the test program for <stdbool.h> so that it does all its tests using bool, then repeats them with _Bool only when available. * lib/autoconf/headers.m4 (AC_CHECK_HEADER_STDBOOL): Do the test for _Bool before the test for stdbool.h. Test semantics of bool unconditionally; test _Bool only when HAVE__BOOL is defined.
* AC_FUNC_SETPGRP: Don’t depend on the return type of setpgrp.Zack Weinberg2020-11-302-12/+15
| | | | | | | | | | | | | | | | | | | | | | | AC_FUNC_SETPGRP determines whether you have the historic BSD setpgrp, which takes two arguments and returns int, or the historic POSIX setpgrp, which takes no arguments and returns int. Solaris has yet a third variant, which takes no arguments and returns a pid_t (the new process group ID). This difference causes AC_FUNC_SETPGRP’s test program to fail to compile under AC_LANG([C++]), which in turn causes the macro to report that setpgrp does take arguments, which is wrong. It is not worth adding a new result #define for this variant, since *all* forms of setpgrp are deprecated in favor of setpgid, which is old enough that it can be used unconditionally. However, it is worth documenting that this variant exists, and fixing AC_FUNC_SETPGRP to produce the right value for its existing result #define on Solaris with C++. * lib/autoconf/functions.m4 (AC_FUNC_SETPGRP): Redesign test program to not depend on the return type of setpgrp. * doc/autoconf.texi (AC_FUNC_SETPGRP): Mention that the macro does not check for the Solaris variant of setpgrp that returns pid_t. Change programming advice to recommend use of setpgid.
* AC_C_CHAR_UNSIGNED: Remove check of $GCC.Zack Weinberg2020-11-301-2/+3
| | | | | | | | | | | | | | | | | | | | On systems where plain ‘char’ is unsigned (e.g. AIX) we would define __CHAR_UNSIGNED__ only when $GCC was not true at configure time. If AC_LANG([C++]) has been in effect since the beginning of the script (so AC_PROG_CC was never invoked), $GCC will be false regardless; this causes an inconsistency between the C and C++ behaviors, even when both compilers are GNU. The point of checking $GCC here is that GCC has command line options to override the signedness of plain ‘char’, and it predefines __CHAR_UNSIGNED__ to indicate what the signedness actually is. We don’t want config.h to override that. However, there is already a special autoheader template for __CHAR_UNSIGNED__ that prevents it being redefined if it’s defined already, so checking $GCC at configure time is redundant and can safely be removed. * lib/autoconf/c.m4 (AC_C_CHAR_UNSIGNED): Do not make result depend on value of $GCC. Adjust commentary.
* sc_error_message_uppercase: allow fully uppercased wordsZack Weinberg2020-11-301-2/+5
| | | | | | | | | | | | | | | | | | | If an error message starts with an entire fully uppercased word, that’s probably a proper noun and it should stay that way. For instance, autoreconf has an error message that starts with "AM_GNU_GETTEXT is used, but ..."; AM_GNU_GETTEXT is the name of an Automake macro, it needs to stay uppercased. This subsumes the existing exception for the words FATAL and WARNING. While I was in there I generalized the exception for PRIuMAX to cover all of the inttypes.h PRI* and SCN* macros. This patch has been submitted to Gnulib; until it is merged there, anyone running ‘make fetch’ should take care not to drop this change. * maint.mk (sc_error_message_uppercase): Allow error messages that begin with any fully uppercased word, or with any of the inttypes.h PRI[dioux]\w+ or SCN[dioux]\w+ macros.