Go to file
Zack Weinberg 4c59bf27d7
Improve handling of missing aux scripts.
Another regression identified by the Debian archive rebuild was that
more macros require the presence of config.sub and config.guess now.
‘autoreconf --install’ doesn’t install these itself, it relies on
‘automake --add-missing’ to do that; so, packages that don’t use
Automake will fail at the configure stage after configure is
regenerated.  To make matters worse, AC_CONFIG_AUX_DIRS assumes that
everyone who needs config.sub and config.guess also needs install-sh,
so in about half of the affected packages, the failure manifested as a
complaint about install-sh being missing -- technically true but
adding install-sh wouldn’t have resolved the problem by itself.

This patch overhauls the AC_CONFIG_AUX_DIR(S) mechanism so that a
configure script knows the complete set of aux scripts that were
AC_REQUIRE_AUX_FILE’d for it, checks for the existence of all of
them, and not any others.  Thus, this configure script

    AC_INIT([test], [1.0])
    AC_FUNC_MALLOC
    AC_CONFIG_HEADERS([config.h])
    AC_OUTPUT

will work fine in a directory that contains config.sub and
config.guess but not install-sh.  Also, if it’s in a directory
that *doesn’t* contain config.sub and config.guess, it will print an
accurate error message

    configure: error: cannot find required auxiliary files: config.guess config.sub

instead of the misleading

    configure: error: cannot find install-sh, install.sh, or shtool in "." "./.." "./../.."

A side-effect: it doesn’t make sense for AC_CONFIG_SUBDIRS to demand
the presence of Cygnus configure in the aux dir, on the off-chance
that one of the subdirectories *might* be using it -- I have no idea
where someone would even get a copy of that nowadays -- so I dropped
that feature.  I rather suspect nobody has needed it in over a decade.

I also documented the expanded need for config.sub and config.guess in
NEWS as well as the manual.

* NEWS: Document expanded need for config.sub and config.guess.
  Document removed support for Cygnus configure in subdirectories.

* doc/autoconf.texi: Clarify exactly when install-sh, config.sub,
  and/or config.guess are required.  Document canonical online sources
  for these scripts.  Revise documentation of AC_CONFIG_AUX_DIR and
  AC_REQUIRE_AUX_FILE.  Minor improvements to documentation of
  AC_CONFIG_SRCDIR.  Remove mentions of Cygnus configure in
  subdirectories.

* lib/autoconf/general.m4
  (_AC_INIT_PARSE_ARGS): Remove mention of Cygnus configure;
  clarify function of configure.gnu.
  (AC_CONFIG_AUX_DIR): Support multiple invocations.
  (AC_CONFIG_AUX_DIRS): Now an undocumented compatibility interface
  rather than an internal subroutine; just runs AC_CONFIG_AUX_DIR on
  each of its arguments.
  (AC_CONFIG_AUX_DIR_DEFAULT): Now a backward compatibility stub that
  requires _AC_INIT_AUX_DIR without adding anything to _AC_AUX_FILES.

  (AC_REQUIRE_AUX_FILE): Now adds the named aux file to _AC_AUX_FILES
  and requires _AC_INIT_AUX_DIR, as well as being a trace hook.

  (_AC_INIT_AUX_DIR): New home of the loop searching for necessary aux
  files (formerly in AC_CONFIG_AUX_DIRS).  Looks for all the necessary
  aux files, not just for install-sh.

  (ac_config_guess, ac_config_sub, ac_configure): Issue deprecation
  warnings if these undocumented shell variables are actually used.

  (AC_CANONICAL_BUILD, AC_CANONICAL_HOST, AC_CANONICAL_TARGET):
  No need to require AC_CONFIG_AUX_DIR_DEFAULT.
  Can rely on $ac_aux_dir ending with a slash.

  * lib/autoconf/programs.m4 (AC_PROG_INSTALL, AC_PROG_MKDIR_P):
  No need to require AC_CONFIG_AUX_DIR_DEFAULT.

  * lib/autoconf/status.m4 (_AC_CONFIG_SUBDIRS):
  No need to require AC_CONFIG_AUX_DIR_DEFAULT.
  Remove check for Cygnus configure; clarify function of configure.gnu.

  * lib/autotest/general.m4: Remove mention of Cygnus configure.

  * tests/torture.at (Missing auxiliary files): New test.
2020-10-20 13:59:26 -04:00
bin autoreconf: remove redundant xsystem calls 2020-10-14 20:33:19 -04:00
build-aux build-aux/fetch.pl: Fetch ChannelDefs.pm from automake. 2020-09-24 08:55:28 -04:00
doc Improve handling of missing aux scripts. 2020-10-20 13:59:26 -04:00
lib Improve handling of missing aux scripts. 2020-10-20 13:59:26 -04:00
m4 make fetch 2020-09-03 12:08:31 -04:00
man Generate manpages directly from source code. 2020-08-21 16:23:32 -04:00
tests Improve handling of missing aux scripts. 2020-10-20 13:59:26 -04:00
.gitattributes maint: don't sync elisp-comp or missing from gnulib 2012-06-27 16:59:21 -06:00
.gitignore build: remove refs to obsolescent 'mkinstalldir' script and variable 2013-05-06 12:53:41 +02:00
.prev-version maint: post-release administrivia 2012-04-24 21:06:32 -06:00
.x-update-copyright maint: document use of copyright ranges 2011-01-04 16:32:25 -07:00
AUTHORS maint: make update-copyright 2020-01-01 11:45:50 -08:00
BUGS BUGS: Remove mention of old shells lacking functions. 2020-08-28 16:44:59 -04:00
cfg.mk Rewrite fetch.sh in Perl. 2020-09-11 14:51:00 -04:00
ChangeLog.0 Prefer HTTPS to FTP and HTTP 2017-09-16 17:48:51 -07:00
ChangeLog.1 Prefer HTTPS to FTP and HTTP 2017-09-16 17:48:51 -07:00
ChangeLog.2 Prefer HTTPS to FTP and HTTP 2017-09-16 17:48:51 -07:00
ChangeLog.3 maint: update URLs 2017-09-23 12:49:23 -07:00
configure.ac Add NetBSD /bin/sh to the -n whitelist. 2020-08-26 15:08:26 -04:00
COPYING Update links in COPYING, COPYINGv3, and COPYING.EXCEPTION. 2020-07-10 16:43:22 -04:00
COPYING.EXCEPTION Update links in COPYING, COPYINGv3, and COPYING.EXCEPTION. 2020-07-10 16:43:22 -04:00
COPYINGv3 Update links in COPYING, COPYINGv3, and COPYING.EXCEPTION. 2020-07-10 16:43:22 -04:00
GNUmakefile Partially revert e54e3f90: restore use of $(MAKE) in error message. 2020-08-04 08:46:59 -04:00
HACKING Update release advice 2020-06-29 17:08:27 -07:00
maint.mk make fetch 2020-06-29 17:08:26 -07:00
Makefile.am Generate manpages directly from source code. 2020-08-21 16:23:32 -04:00
NEWS Improve handling of missing aux scripts. 2020-10-20 13:59:26 -04:00
README maint: make update-copyright 2020-01-01 11:45:50 -08:00
README-alpha maint: make update-copyright 2020-01-01 11:45:50 -08:00
README-hacking * doc/autoconf.texi: Fix mishandling of `. 2020-07-13 12:55:19 -07:00
THANKS maint: make update-copyright 2020-01-01 11:45:50 -08:00
TODO * TODO: Add -Werror support. 2020-08-06 12:28:40 -07:00

-*- text -*-

Autoconf

Autoconf is an extensible package of M4 macros that produce shell
scripts to automatically configure software source code packages.
These scripts can adapt the packages to many kinds of UNIX-like
systems without manual user intervention.  Autoconf creates a
configuration script for a package from a template file that lists the
operating system features that the package can use, in the form of M4
macro calls.

Producing configuration scripts using Autoconf requires GNU M4 and
Perl.  You should install GNU M4 (version 1.4.6 or later is required;
1.4.14 or later is recommended) and Perl (5.006 or later) before
configuring Autoconf, so that Autoconf's configure script can find
them.  The configuration scripts produced by Autoconf are
self-contained, so their users do not need to have Autoconf (or GNU
M4, Perl, etc.).

You can get GNU M4 here:

https://ftp.gnu.org/gnu/m4/

The file INSTALL should be distributed with packages that use
Autoconf-generated configure scripts and Makefiles that conform to the
GNU coding standards.  The package's README can just give an overview
of the package, where to report bugs, and a pointer to INSTALL for
instructions on compilation and installation.  This removes the need
to maintain many similar sets of installation instructions.

Be sure to read BUGS and INSTALL.

Mail suggestions to autoconf@gnu.org, report bugs to
bug-autoconf@gnu.org, and submit patches to autoconf-patches@gnu.org.
All changes can be tracked at the read-only autoconf-commit@gnu.org.
Always include the Autoconf version number, which you can get by
running `autoconf --version'.  Archives of bug-autoconf@gnu.org can be
found in <https://lists.gnu.org/archive/html/bug-autoconf/>, and
similarly for the other mailing lists.

Licensing

Autoconf is released under the General Public License version 3 (GPLv3+).
Additionally, Autoconf includes a licensing exception in some of its
source files; see the respective copyright notices for how your
project is impacted by including scripts generated by Autoconf, and the
COPYING.EXCEPTION file for the exception in terms of the Additional
Permissions as described in section 7 of GPLv3.

For more licensing information, see
<https://www.gnu.org/licenses/gpl-faq.html> and
<https://www.gnu.org/licenses/exceptions.html>.

For any copyright year range specified as YYYY-ZZZZ in this package
note that the range specifies every single year in that closed interval.

-----

Copyright (C) 1992-1994, 1998, 2000-2017, 2020 Free Software Foundation,
Inc.

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 warranty of any kind.