Commit Graph

7008 Commits

Author SHA1 Message Date
Zack Weinberg
8de33b817f
Add a bootstrap script like Automake has.
The bootstrap script generates the same files ‘autoreconf -vi’ would,
in a normal package, but it uses autoconf *from the git sources* to do
it.  This means people building from git do not need autoconf to be
installed already.  More importantly, it eliminates the extra steps
when building from git, of re-generating autoconf’s own configure
script with the just-built autoconf, then rebuilding the entire tree.

(This process still requires Automake to be installed already, and
Automake’s bootstrap script requires Autoconf to be installed already,
so there is still a dependency loop between Autoconf and Automake when
building from git—you need at least one of them installed from a
tarball to get started.)

The bootstrap script works by creating a partial installation tree in
a temporary directory, containing bin/autoconf, bin/autom4te, and just
enough of the usual contents of $(pkgdatadir) for autoconf and
autom4te to work.  It then runs a hardcoded list of commands,
corresponding to what ‘autoreconf -i -Wall,error’ would run, but
setting environment variables AUTOCONF and AUTOM4TE to ensure the
bootstrap versions of these tools are used.  (We have to create both,
because automake runs autoconf, not autom4te, to trace configure.ac.)

The ‘Autom4te’, ‘autoconf’, and ‘m4sugar’ subdirectories of the
partial installation tree are symlinked back to the source tree; this
is why version.m4 needed to be moved out of the m4sugar subdirectory,
so the bootstrap script can create it without scribbling on the source
tree.  autom4te is run in --melt mode, so we don’t need to create
freeze files in any subdirectories either.  All of the substitution
variables that are needed for autoconf and autom4te to both run, and
create the same output that they would have if fully configured, are
honored (unfortunately this does involve digging around in
configure.ac with sed expressions).
2021-09-15 14:26:11 -04:00
Zack Weinberg
f060c7e5fd
Rewrite bin/autoconf in Perl.
Of all the installed programs (autoconf, autoheader, autom4te,
autoreconf, autoscan, autoupdate, ifnames) autoconf is the only one
that is a shell script instead of a Perl script.  This means it has to
do a lot of fiddly quoting and requoting to assemble an autom4te
command line, it doesn’t get to use the shared option handling code in
Autom4te/{General,Getopt}.pm, and it has to duplicate usage text that
properly should only be in Autom4te/ChannelDefs.pm.  It also means
there’s extra code in build-aux/help-extract.pl just for it, and a
special two-phase generation process in bin/local.mk.

This also paves the way for the bootstrap script mentioned in the
previous commit; it will only have to know how to deal with
substitution variables, not generation of m4sh scripts.

The new script winds up being slightly longer on disk but that’s
because our boilerplate for Perl scripts is quite long.  The code is
visibly simpler.

* bin/autoconf.as: Rename to bin/autoconf.in and rewrite in Perl.
* bin/local.mk (EXTRA_DIST): Change autoconf.as to autoconf.in.
  (MOSTLYCLEANFILES): Don’t delete autoconf.in.
  (bin/autoconf.in): Delete rule.
  (ETAGS_PERL): Add autoconf.in and sort list.
  (ETAGS_SH): Delete, no longer needed.
* tests/tools.at: Syntax-check autoconf as a Perl script.

* build-aux/help-extract.pl: Remove all code for extracting usage text
  from shell scripts.
* man/autoconf.w, man/local.mk: Refer to autoconf.in, not autoconf.as.
2021-09-15 14:02:41 -04:00
Zack Weinberg
af5c11ed61
Generate version.m4 from config.status, in lib/ not lib/m4sugar/.
This simplifies the Makefile a bit and also paves the way for a
bootstrap script (replacing the process of re-running autoreconf with
the just-built autoconf) which will be able to cope with generated
files that get installed in @pkgdatadir@ but not in @pkgdatadir@/m4sugar.

* lib/version.in: New file, contents extracted from lib/local.mk.
* lib/local.mk: Do not generate version.m4 here.
* configure.ac: Generate lib/version.m4 from lib/version.in via
  config.status.

* lib/freeze.mk, lib/local.mk, lib/m4sugar/m4sugar.m4:
  version.m4 now lives in @pkgdatadir@ rather than @pkgdatadir@/m4sugar.
2021-09-15 14:02:34 -04:00
Paul Eggert
fbdf711569 fortran: *mingw* → mingw* in previous patch
* lib/autoconf/fortran.m4 (_AC_FC_LIBRARY_LDFLAGS): Omit a ‘*’.
2021-09-01 19:08:20 -07:00
Keno Fischer
997dfc9c07 fortran.m4: Filter mingw intrinsic libraries
* lib/autoconf/fortran.m4 (_AC_FC_LIBRARY_LDFLAGS):
Filter out mingw libraries too.
Problem and fix reported by Keno Fischer in
https://lists.gnu.org/r/autoconf-patches/2021-09/msg00000.html
Copyright-paperwork-exempt: Yes
2021-09-01 19:08:20 -07:00
Jim Meyering
9db4522239 fix a typo
* doc/autoconf.texi (Integer Overflow): Fix typo: s/many/may/
2021-09-01 08:50:30 +02:00
Paul Eggert
e8c2d79ec4 Add commentary for Time::HiRes patches 2021-08-31 17:35:42 -07:00
Andreas K. Hüttel
3a9802d601 Fix bug when autom4te updates too quickly
Use stat from Time::HiRes (instead of File::stat).

Problem reported by Ionen Wolkens <https://bugs.gentoo.org/782985>.
2021-08-31 17:35:42 -07:00
Paul Eggert
b27bc3e230 Port AC_LANG_CALL(C) to C++
* lib/autoconf/c.m4 (AC_LANG_CALL(C)): Add an extern "C" if C++.
Problem reported by Vincent Lefèvre (sr #110532).
2021-08-31 16:51:11 -07:00
Paul Eggert
411d0c0ef5 Modernize discussion of integer overflow
* doc/autoconf.texi (Integer Overflow, Integer Overflow Basics)
(Signed Overflow Examples, Optimization and Wraparound):
Modernize discussion to take current compiler and Gnulib
technology into account.
2021-08-31 16:10:30 -07:00
Paul Eggert
7b3aa70a73 Port test to next m4 version
* tests/tools.at (autom4te cache):
Allow m4 to quote 'like this' as well as 'like this'.
2021-08-31 16:10:30 -07:00
Marshall Ward
6cfdc56489 Fortran Cray pointer macro support
This patch adds the AC_F77_CRAY_POINTERS and AC_FC_CRAY_POINTERS macros,
which test if the Fortran compiler supports Cray pointers.

The macros are written such that the tests share a common backend
(_AC_FC_CRAY_POINTERS) which works on both F77 and FC compilers.
Wrappers are provided to address any future potential compatibility
issues.

The macros include additional tests for particular flags required by
GFortran and PGI compilers.  The current set of flags is sparse, but can
be extended for other compilers if needed.

Documentation and a minimal test of the macro have been included.

Two minor variable name typos (@EXEEXT@ as @EEXEXT@) were also fixed in
two of the other Fortran tests.
2021-08-16 09:56:09 -07:00
Eric Blake
706847e2d0 tests: typo fix
* tests/base.at: Fix typo.
Spotted by anonymous in https://savannah.gnu.org/support/?110526
2021-08-12 13:05:42 -05:00
Paul Eggert
64df9b4523 Autoconf now quotes 'like this' instead of `like this'
Autoconf’s diagnostics now follow current GNU coding standards,
which say that diagnostics in the C locale should quote 'like this'
with plain apostrophes instead of the older GNU style `like this'
with grave accent and apostrophe.
2021-07-20 16:04:21 -05:00
Paul Eggert
7b1b9e4650 Document unquoted here-documents better
Problem reported by Bruno Haible (sr #110518).
* doc/autoconf.texi (Generating Sources)
(Running the Preprocessor, Running the Compiler)
(Running the Linker, Runtime): Briefly mention that the program
snippets are expanded as unquoted here-documents.
(Here-Documents): Document escaping needed in unquoted
here-documents.  Remove mention of \" glitch in OpenBSD 2.7 sh;
that old system has not been supported for many years.
Remove advice that every \ must be quoted, as that sort
of quoting (though harmless) is not needed and is rarely done.
* lib/autoconf/c.m4 (AC_C_BIGENDIAN, _AC_LANG_OPENMP(Fortran 77)):
* lib/autoconf/types.m4 (AC_TYPE_LONG_LONG_INT): Properly quote
code snippets.  The backslash-newline typos were harmless, and the
backslash-$ typo has unspecified behavior as per POSIX though the
typo is harmless on all shells I know of.  However, Autoconf
should follow its own quoting advice.
2021-07-18 23:55:45 -05:00
Emanuele Giaquinta
f982d9e4e1 doc: fix typo in variable name
Message-Id: <YJ4Tm3WEkv86L/YV@FSAPPLE2215.fi.f-secure.com>
(tiny change)
2021-06-30 14:59:44 -05:00
Emanuele Giaquinta
f460883035 _AC_PROG_CXX_STDCXX_EDITION_TRY: fix typo in variable name
The typo causes "ac_prog_cxx_stdcxx" to be always set to "cxx11",
regardless of whether the C++ compiler supports C++11.
Message-Id: <YJ4TXAeJcvU0oSec@FSAPPLE2215.fi.f-secure.com>
(tiny change)
2021-06-30 14:53:54 -05:00
Eric Blake
a1b9ba4790 maint: advertise GNU in README
* README: Add section to attract more people towards the GNU project.
Inspired by a suggestion from Jose E. Marchesi <jemarch@gnu.org> on
the gnu-prog-discuss mailing list.
2021-05-10 15:50:42 -05:00
Eric Blake
c8b84ee327 maint: ensure autoconf-latest.* links stay up-to-date
* cfg.mk (GNUPLOADFLAGS): New.
https://lists.gnu.org/archive/html/autoconf/2021-05/msg00006.html
2021-05-10 15:45:24 -05:00
Eric Blake
fb37d4cfc7 maint: Add names to THANKS
* THANKS: Add names that resulted in several recent commits. Also
tweak addresses per owner requests.
Signed-off-by: Eric Blake <eblake@redhat.com>
2021-05-10 15:43:31 -05:00
Ben Elliston
c0fb65f673 update HACKING file
Fairly obvious - be gender neutral in who gets thanked.
* HACKING: Tweak pronouns.
Message-Id: <20151125100819.GA29844@air.net.au>
Signed-off-by: Eric Blake <eblake@redhat.com>
2021-05-10 15:21:47 -05:00
Zack Weinberg
6d38e9fa2b
trunk post-release administrivia
Matching the commits on the release branch:

* NEWS: Bring over record of release notes.
* .prev-version: Record previous version.
* cfg.mk (old_NEWS_hash): Auto-update.
2021-01-28 17:54:10 -05:00
Zack Weinberg
378351df7e
make fetch 2021-01-28 15:21:49 -05:00
Zack Weinberg
300349c84b
make update-copyright 2021-01-28 15:19:21 -05:00
Zack Weinberg
66fdaea3cf
autoreconf: don’t error out when AM_GNU_GETTEXT is used alone.
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.)
2021-01-04 17:27:37 -05:00
Bruno Haible
fbcc365d41
doc: Document another portability problem of 'od'.
* doc/autoconf.texi (Limitations of Usual Tools): Document that decimal output
is not portable.
2020-12-30 10:21:48 -05:00
Paul Eggert
925922406c
doc: modernize grep discussion 2020-12-30 10:07:15 -05:00
Zack Weinberg
07130c3e48
autom4te: always update the output file, even if it hasn’t changed
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
(1725c94714) 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.
2020-12-29 15:33:33 -05:00
Zack Weinberg
2d0f19d84d
Restore compatibility with older std-gnu11.m4.
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 131d8c69f3 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.
2020-12-23 13:42:28 -05:00
Zack Weinberg
ec90049dfc
Use -fno-builtin, not -Werror, in AC_CHECK_DECLS (#110400)
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 82ef7805fa,
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 82ef7805fa.

 * 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.
2020-12-23 13:12:57 -05:00
Zack Weinberg
ea9d7d9f1f
autom4te: correct error message when we can’t create autom4te.cache.
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.
2020-12-23 13:12:51 -05:00
Paul Eggert
237519e6e7 Merge branch 'branch-2.70' into master 2020-12-12 16:10:28 -08:00
Paul Eggert
8118c2adc4 Improve AC_USE_SYSTEM_EXTENSIONS port to HP-UX 11.11
* 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.
2020-12-11 15:25:18 -08:00
Paul Eggert
5c2bcf10c0 Port minor AC_HEADER_MAJOR fixes from Gnulib
* lib/autoconf/headers.m4 (AC_HEADER_MAJOR):
Improve m4 quoting.
2020-12-11 15:25:18 -08:00
Paul Eggert
2f3f782cdd Port minor AC_FUNC_ALLOCA fixes from Gnulib
* 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.
2020-12-11 15:25:18 -08:00
Paul Eggert
8f19de6df0 Improve port of AC_C_RESTRICT to Oracle C++
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.
2020-12-11 15:25:18 -08:00
Zack Weinberg
efc940dc82
_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.
2020-12-08 21:48:10 -05:00
Zack Weinberg
b693e20869
maint: add outline for future NEWS (release branch). 2020-12-08 21:47:13 -05:00
Zack Weinberg
05972f49ee
_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.
2020-12-08 21:35:45 -05:00
Zack Weinberg
697c1a07cd
maint: add outline for future NEWS 2020-12-08 20:53:13 -05:00
Zack Weinberg
29ed3a774d
maint: post-release administrivia
* NEWS: Add header line for next release.
* .prev-version: Record previous version.
* cfg.mk (old_NEWS_hash): Auto-update.
2020-12-08 13:04:16 -05:00
Zack Weinberg
97fbc5c184
Release 2.70. 2020-12-08 11:31:19 -05:00
Zack Weinberg
5144cd0c44
Remove obsolete instructions from HACKING.
configure CC=g++ is no longer supported, so don’t tell maintainers to
test that.
2020-12-08 11:29:05 -05:00
Zack Weinberg
edbc5693ae
testsuite: log version of M4 and Perl
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]).
2020-12-08 11:14:19 -05:00
Zack Weinberg
3f75cfc927
lib/autotest/general.m4: typo fix
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.
2020-12-08 11:12:04 -05:00
Zack Weinberg
48a3113c20
Three minor testsuite fixes.
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.
2020-12-08 10:36:28 -05:00
Zack Weinberg
c3afa48883
autoreconf --install --force: replace install-sh with no timestamp
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.
2020-12-08 10:34:31 -05:00
Zack Weinberg
9887fa54b6
make fetch 2020-12-07 17:23:37 -05:00
Zack Weinberg
4e310e78cb
Update documentation of AC_USE_SYSTEM_EXTENSIONS.
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.
2020-12-07 17:17:40 -05:00
Zack Weinberg
5ab70f1769
Revise documentation of AT_CHECK.
Patch originally by Jannick but then about 10x more words added by me.
2020-12-07 13:24:46 -05:00