[PATCH 1/2] Improve handling of missing aux scripts.

Zack Weinberg <[email protected]>
Newsgroups gmane.comp.sysutils.autoconf.patches
Message-ID <[email protected]>
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.

I will commit these patches tomorrow afternoon if I don't hear any
comments by then.

zw

* 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.
---
 NEWS                     |  37 ++++++
 doc/autoconf.texi        | 196 ++++++++++++++++---------------
 lib/autoconf/general.m4  | 242 ++++++++++++++++++++++++++++-----------
 lib/autoconf/programs.m4 |   6 +-
 lib/autoconf/status.m4   |   7 +-
 lib/autotest/general.m4  |   2 -
 tests/torture.at         |  38 ++++++
 7 files changed, 360 insertions(+), 168 deletions(-)

diff --git a/NEWS b/NEWS
index 356a28b0..1883faab 100644
--- a/NEWS
+++ b/NEWS
@@ -47,8 +47,31 @@ GNU Autoconf NEWS - User visible changes.
    - AC_REQUIRE cannot be applied to macros that need to be used with
      arguments.  Instead, invoke the macro normally, with its arguments.
 
+*** More macros use config.sub and config.guess internally.
+
+  As a consequence of improved support for cross compilation (see below),
+  more macros now use the auxiliary scripts ‘config.sub’ and ‘config.guess’.
+  If you use any of the affected macros, these scripts must be available
+  when your configure script is run, even if you have no intention of
+  ever cross-compiling your program.
+
+  If you are using Automake, the auxiliary scripts your configure script
+  needs will be added to your source tree by ‘autoreconf --install’ or
+  ‘automake --add-missing’, and will be automatically included in your
+  distribution tarball.  If you are not using Automake, you will need
+  to add them yourself.  See the “Input” section of the manual for
+  where to get the auxiliary scripts that may be needed by autoconf macros.
+
 *** Older versions of automake and aclocal (< 1.8) are no longer supported.
 
+*** AC_CONFIG_SUBDIRS no longer directly supports Cygnus configure.
+
+  If you are still using an Autoconf script to drive configuration of
+  a multi-package build tree where some subdirectories use Cygnus
+  configure, copy or link $ac_aux_dir/configure into each subdirectory
+  where it is needed.  Please also contact us; we were under the
+  impression nobody used this very old tool anymore.
+
 *** AC_CHECK_HEADER and AC_CHECK_HEADERS only do a compilation test.
 
   This completes the transition from preprocessor-based header tests
@@ -188,6 +211,20 @@ GNU Autoconf NEWS - User visible changes.
   useful effect is to trigger those checks, with this macro.  It is
   unlikely to be useful otherwise.
 
+*** AC_REQUIRE_AUX_FILE has been improved.
+
+  Configure scripts now check, on startup, for the availability of all
+  the aux files that were mentioned in an AC_REQUIRE_AUX_FILE
+  invocation.  This should help prevent certain classes of packaging
+  errors.
+
+  Also, it is no longer necessary for third-party macros that use
+  AC_REQUIRE_AUX_FILE to mention AC_CONFIG_AUX_DIR_DEFAULT.  However,
+  if you are using AC_CONFIG_AUX_DIR_DEFAULT *without* also using
+  AC_REQUIRE_AUX_FILE, please start using AC_REQUIRE_AUX_FILE to
+  specify the aux files you actually need, so that the check can be
+  effective.
+
 ** Obsolete features and new warnings
 
 *** Use of the long-deprecated name ‘configure.in’ for the autoconf
diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index 9a52fbdb..21bc1af9 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -2041,81 +2041,27 @@ Notices
 
 
 @node Input
-@section Finding @command{configure} Input
+@section Configure Input: Source Code, Macros, and Auxiliary Files
+
+The following macros help you manage the contents of your source tree.
 
 @anchor{AC_CONFIG_SRCDIR}
 @defmac AC_CONFIG_SRCDIR (@var{unique-file-in-source-dir})
 @acindex{CONFIG_SRCDIR}
-@var{unique-file-in-source-dir} is some file that is in the package's
-source directory; @command{configure} checks for this file's existence to
-make sure that the directory that it is told contains the source code in
-fact does.  Occasionally people accidentally specify the wrong directory
-with @option{--srcdir}; this is a safety check.  @xref{configure
-Invocation}, for more information.
+Distinguish this package's source directory from other source
+directories that might happen to exist in the filesystem.
+@var{unique-file-in-source-dir} should name a file that is unique to
+this package.  @command{configure} will verify that this file exists in
+@file{@var{srcdir}}, before it runs any other checks.
+
+Use of this macro is strongly recommended.  It protects against people
+accidentally specifying the wrong directory with @option{--srcdir}.
+@xref{configure Invocation}, for more information.
 @end defmac
 
-
-@c FIXME: Remove definitively once --install explained.
-@c
-@c Small packages may store all their macros in @code{aclocal.m4}.  As the
-@c set of macros grows, or for maintenance reasons, a maintainer may prefer
-@c to split the macros in several files.  In this case, Autoconf must be
-@c told which files to load, and in which order.
-@c
-@c @defmac AC_INCLUDE (@var{file}@dots{})
-@c @acindex{INCLUDE}
-@c @c FIXME: There is no longer shell globbing.
-@c Read the macro definitions that appear in the listed files.  A list of
-@c space-separated file names or shell globbing patterns is expected.  The
-@c files are read in the order they're listed.
-@c
-@c Because the order of definition of macros is important (only the last
-@c definition of a macro is used), beware that it is @code{AC_INIT} that
-@c loads @file{acsite.m4} and @file{aclocal.m4}.  Note that
-@c @code{AC_INCLUDE}ing a file before @code{AC_INIT} or within
-@c @file{aclocal.m4} is different from doing so after @code{AC_INIT}: in
-@c the latter case, non-macro lines from included files may end up in the
-@c @file{configure} script, whereas in the former case, they'd be discarded
-@c just like any text that appear before @code{AC_INIT}.
-@c @end defmac
-
-Packages that do manual configuration or use the @command{install} program
-might need to tell @command{configure} where to find some other shell
-scripts by calling @code{AC_CONFIG_AUX_DIR}, though the default places
-it looks are correct for most cases.
-
-@defmac AC_CONFIG_AUX_DIR (@var{dir})
-@acindex{CONFIG_AUX_DIR}
-Use the auxiliary build tools (e.g., @file{install-sh},
-@file{config.sub}, @file{config.guess}, Cygnus @command{configure},
-Automake and Libtool scripts, etc.)@: that are in directory @var{dir}.
-These are auxiliary files used in configuration.  @var{dir} can be
-either absolute or relative to @file{@var{srcdir}}.  The default is
-@file{@var{srcdir}} or @file{@var{srcdir}/..} or
-@file{@var{srcdir}/../..}, whichever is the first that contains
-@file{install-sh}.  The other files are not checked for, so that using
-@code{AC_PROG_INSTALL} does not automatically require distributing the
-other auxiliary files.  It checks for @file{install.sh} also, but that
-name is obsolete because some @command{make} have a rule that creates
-@file{install} from it if there is no makefile.
-
-The auxiliary directory is commonly named @file{build-aux}.
-If you need portability to DOS variants, do not name the
-auxiliary directory @file{aux}.  @xref{File System Conventions}.
-@end defmac
-
-@defmac AC_REQUIRE_AUX_FILE (@var{file})
-@acindex{REQUIRE_AUX_FILE}
-Declares that @var{file} is expected in the directory defined above.  In
-Autoconf proper, this macro does nothing: its sole purpose is to be
-traced by third-party tools to produce a list of expected auxiliary
-files.  For instance it is called by macros like @code{AC_PROG_INSTALL}
-(@pxref{Particular Programs}) or @code{AC_CANONICAL_BUILD}
-(@pxref{Canonicalizing}) to register the auxiliary files they need.
-@end defmac
-
-Similarly, packages that use @command{aclocal} should declare where
-local macros can be found using @code{AC_CONFIG_MACRO_DIRS}.
+Packages that use @command{aclocal} to generate @file{aclocal.m4}
+should declare where local macros can be found using
+@code{AC_CONFIG_MACRO_DIRS}.
 
 @defmac AC_CONFIG_MACRO_DIRS (@var{dir1} [@var{dir2} ... @var{dirN}])
 @defmacx AC_CONFIG_MACRO_DIR (@var{dir})
@@ -2158,6 +2104,68 @@ Input
 without any backslash-newlines.
 @end defmac
 
+@prindex @command{config.guess}
+@prindex @command{config.sub}
+@prindex @command{install-sh}
+
+Some Autoconf macros require auxiliary scripts.  @code{AC_PROG_INSTALL}
+and @code{AC_PROG_@w{MKDIR_P}} (@pxref{Particular Programs}) require a
+fallback implementation of @command{install} called @file{install-sh},
+and the @code{AC_CANONICAL} macros (@pxref{Manual Configuration})
+require the system-identification scripts @file{config.sub} and
+@file{config.guess}.  Third-party tools, such as Automake and Libtool,
+may require additional auxiliary scripts.
+
+By default, @command{configure} looks for these scripts next to itself,
+in @file{@var{srcdir}}.  For convenience when working with subdirectories
+with their own configure scripts (@pxref{Subdirectories}), if the
+scripts are not in @file{@var{srcdir}} it will also look in
+@file{@var{srcdir}/..} and @file{@var{srcdir}/../..}.  All of the
+scripts must be found in the same directory.
+
+If these default locations are not adequate, or simply to reduce clutter
+at the top level of the source tree, packages can use
+@code{AC_CONFIG_AUX_DIR} to declare where to look for auxiliary scripts.
+
+@defmac AC_CONFIG_AUX_DIR (@var{dir})
+@acindex{CONFIG_AUX_DIR}
+Look for auxiliary scripts in @var{dir}.  Normally, @var{dir} should be a
+relative path, which is taken as relative to @file{@var{srcdir}}.
+If @var{dir} is an absolute path or contains shell variables, however,
+it is used as-is.
+
+When the goal of using @code{AC_CONFIG_AUX_DIR} is to reduce clutter at
+the top level of the source tree, the conventional name for @var{dir} is
+@file{build-aux}.  If you need portability to DOS variants, do not name
+the auxiliary directory @file{aux}.  @xref{File System Conventions}.
+@end defmac
+
+@defmac AC_REQUIRE_AUX_FILE (@var{file})
+@acindex{REQUIRE_AUX_FILE}
+@vrindex ac_aux_dir
+Declare that @var{file} is an auxiliary script needed by this configure
+script, and set the shell variable @code{ac_aux_dir} to the directory
+where it can be found.  The value of @code{ac_aux_dir} is guaranteed to
+end with a @samp{/}.
+
+Macros that need auxiliary scripts must use this macro to register each
+script they need.
+@end defmac
+
+Some third-party tools can install and update auxiliary scripts in your
+source tree for you; for instance, Automake's @option{--add-missing}
+mode does this for many commonly-needed scripts, including
+@file{install-sh}, @file{config.sub}, and @file{config.guess}.
+If you are only using Autoconf, however, you will need to add auxiliary
+scripts to your source tree yourself, and arrange for them to be
+included in release tarballs.
+@command{configure} will report any missing scripts when run.
+
+The scripts needed by Autoconf core macros are included with the
+Autoconf source tree.  @file{install-sh} can be downloaded from
+@url{https://git.savannah.gnu.org/cgit/automake.git/plain/lib/install-sh}.
+@file{config.sub} and @file{config.guess} can be downloaded from
+@url{https://git.savannah.gnu.org/cgit/config.git/tree/}.
 
 @node Output
 @section Outputting Files
@@ -3759,14 +3767,11 @@ Subdirectories
 fi
 @end example
 
-@c NB: Yes, below we mean configure.in, not configure.ac.
 If a given @var{dir} contains @command{configure.gnu}, it is run instead
 of @command{configure}.  This is for packages that might use a
 non-Autoconf script @command{Configure}, which can't be called through a
 wrapper @command{configure} since it would be the same file on
-case-insensitive file systems.  Likewise, if a @var{dir} contains
-@file{configure.in} but no @command{configure}, the Cygnus
-@command{configure} script found by @code{AC_CONFIG_AUX_DIR} is used.
+case-insensitive file systems.
 
 The subdirectory @command{configure} scripts are given the same command
 line options that were given to this @command{configure} script, with minor
@@ -4098,6 +4103,7 @@ Particular Programs
 @ovindex INSTALL_DATA
 @ovindex INSTALL_SCRIPT
 @caindex path_install
+@prindex @command{install-sh}
 Set output variable @code{INSTALL} to the name of a BSD-compatible
 @command{install} program, if one is found in the current @env{PATH}.
 Otherwise, set @code{INSTALL} to @samp{@var{dir}/install-sh -c},
@@ -4117,14 +4123,14 @@ Particular Programs
 macro requires @command{install} to be able to install multiple files into a
 target directory in a single invocation.
 
-Autoconf comes with a copy of @file{install-sh} that you can use.  If
-you use @code{AC_PROG_INSTALL}, you must include either
-@file{install-sh} or @file{install.sh} in your distribution; otherwise
-@command{configure} produces an error message saying it can't find
-them---even if the system you're on has a good @command{install} program.
-This check is a safety measure to prevent you from accidentally leaving
-that file out, which would prevent your package from installing on
-systems that don't have a BSD-compatible @command{install} program.
+Autoconf comes with a copy of @file{install-sh} that you can use.
+If you use @code{AC_PROG_INSTALL}, you must include @file{install-sh}
+in your distribution; otherwise @command{configure} produces an error
+message saying it can't find it---even if the system you're on has a
+good @command{install} program.  This check is a safety measure to
+prevent you from accidentally leaving that file out, which would prevent
+your package from installing on systems that don't have a BSD-compatible
+@command{install} program.
 
 If you need to use your own installation program because it has features
 not found in standard @command{install} programs, there is no reason to use
@@ -4139,6 +4145,7 @@ Particular Programs
 @acindex{PROG_MKDIR_P}
 @ovindex MKDIR_P
 @caindex path_mkdir
+@prindex @command{install-sh}
 Set output variable @code{MKDIR_P} to a program that ensures that for
 each argument, a directory named by this argument exists, creating it
 and its parent directories if needed, and without race conditions when
@@ -22033,11 +22040,22 @@ Manual Configuration
 
 A few kinds of features can't be guessed automatically by running test
 programs.  For example, the details of the object-file format, or
-special options that need to be passed to the compiler or linker.  You
-can check for such features using ad-hoc means, such as having
-@command{configure} check the output of the @code{uname} program, or
-looking for libraries that are unique to particular systems.  However,
-Autoconf provides a uniform method for handling unguessable features.
+special options that need to be passed to the compiler or linker.
+Autoconf provides a uniform method for handling unguessable features,
+by giving each operating system a @dfn{canonical system type}, also
+known as a @dfn{canonical name} or @dfn{target triplet}.
+
+@prindex @command{config.guess}
+@prindex @command{config.sub}
+
+If you use any of the macros described in this chapter, you must
+distribute the helper scripts @command{config.guess} and
+@command{config.sub} along with your source code.  Some Autoconf macros
+use these macros internally, so you may need to distribute these scripts
+even if you do not use any of these macros yourself.  @xref{Input}, for
+information about the @code{AC_CONFIG_AUX_DIR} macro which you can use
+to control in which directory @command{configure} looks for helper
+scripts, and where to get the scripts from.
 
 @menu
 * Specifying Target Triplets::  Specifying target triplets
@@ -22168,12 +22186,6 @@ Canonicalizing
 type, run the following macros to get canonical system names.  These
 variables are not set before the macro call.
 
-If you use these macros, you must distribute @command{config.guess} and
-@command{config.sub} along with your source code.  @xref{Output}, for
-information about the @code{AC_CONFIG_AUX_DIR} macro which you can use
-to control in which directory @command{configure} looks for those scripts.
-
-
 @defmac AC_CANONICAL_BUILD
 @acindex{CANONICAL_BUILD}
 @ovindex build
diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4
index eaa1d91b..9baa22df 100644
--- a/lib/autoconf/general.m4
+++ b/lib/autoconf/general.m4
@@ -640,8 +640,6 @@ do
   *)    ac_optarg=yes ;;
   esac
 
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
   case $ac_dashdash$ac_option in
   --)
     ac_dashdash=yes ;;
@@ -1163,7 +1161,8 @@ if test "$ac_init_help" = "recursive"; then
       continue
     _AC_SRCDIRS(["$ac_dir"])
     cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
+    # Check for configure.gnu first; this name is used for a wrapper for
+    # Metaconfig's "Configure" on case-insensitive filesystems.
     if test -f "$ac_srcdir/configure.gnu"; then
       echo &&
       $SHELL "$ac_srcdir/configure.gnu" --help=recursive
@@ -1744,60 +1743,188 @@ program_transform_name=`AS_ECHO(["$program_transform_name"]) | sed "$ac_script"`
 
 # AC_CONFIG_AUX_DIR(DIR)
 # ----------------------
-# Find install-sh, config.sub, config.guess, and Cygnus configure
-# in directory DIR.  These are auxiliary files used in configuration.
-# DIR can be either absolute or relative to $srcdir.
+# Find auxiliary scripts (e.g. install-sh, config.sub, config.guess)
+# in DIR.  If DIR is a literal shell word and not an absolute path,
+# it is interpreted relative to $srcdir; otherwise it is assumed to be
+# usable as-is.  If this macro is used more than once, it builds up a
+# list of directories to search, first to last.  If this macro is not
+# used at all, the default is to look in $srcdir and two levels of
+# parent directories above $srcdir; see _AC_INIT_SRCDIR.
+#
+# This macro may be used as a trace hook by tools that wish to know
+# where the auxiliary files should be.
+#
+# Note: paths starting with a DOS drive letter count as absolute, but
+# we do *not* check for backslash as a directory separator, because
+# anything with a backslash in it will be considered non-literal by
+# AS_LITERAL_WORD_IF and won't reach the m4_bmatch.  This is correct
+# behavior, because DIR will wind up inside a double-quoted shell string.
 AC_DEFUN([AC_CONFIG_AUX_DIR],
-[AC_CONFIG_AUX_DIRS($1 "$srcdir"/$1)])
+  [m4_append_uniq([_AC_AUX_DIR_CANDIDATES],
+    AS_LITERAL_WORD_IF([$1],
+      [m4_bmatch([$1],
+                 [^/],       [$1],
+                 [^[a-z]:/], [$1],
+                            [${srcdir}/$1])],
+      [$1]),
+    [${PATH_SEPARATOR}])])
+
+
+# AC_CONFIG_AUX_DIRS(DIRS)
+# ------------------------
+# Find auxiliary scripts (e.g. install-sh, config.sub, config.guess)
+# in any of the whitespace-separated directories named DIRS.
+# This macro is not documented; it used to be an internal subroutine,
+# but its name didn't begin with an underscore, so we're preserving it
+# for the small number of configure scripts that used it themselves.
+# It might be promoted to an official interface in the future.
+AC_DEFUN([AC_CONFIG_AUX_DIRS],
+[m4_map_args_w(m4_validate_w([$1]), [AC_CONFIG_AUX_DIR(], [)])])
+
+
+# AC_REQUIRE_AUX_FILE(FILE)
+# -------------------------
+# Declare that FILE is a required auxiliary file.  FILE must be literal.
+# At configure time, if we cannot locate a directory containing all of the
+# required auxiliary files, the script will bomb out.  This macro may also
+# be used as a trace hook by tools that wish to identify all of the required
+# auxiliary files.
+m4_define([AC_REQUIRE_AUX_FILE],
+[AS_LITERAL_WORD_IF([$1],
+  [m4_do(
+    [AC_REQUIRE([_AC_INIT_AUX_DIR])],
+    [m4_set_add([_AC_AUX_FILES], [$1])]
+  )],
+  [m4_fatal([$0: requires a literal argument])])])
 
 
 # AC_CONFIG_AUX_DIR_DEFAULT
 # -------------------------
-# The default is `$srcdir' or `$srcdir/..' or `$srcdir/../..'.
-# There's no need to call this macro explicitly; just AC_REQUIRE it.
+# No longer needed (AC_REQUIRE_AUX_FILE now does the whole job) but
+# preserved for backward compatibility with third-party macros.
+# Not yet being removed by autoupdate, because we don't know if any
+# third-party macros used this without also using AC_REQUIRE_AUX_FILE.
+# That usage is now considered incorrect, but removing it would break
+# those macros.
 AC_DEFUN([AC_CONFIG_AUX_DIR_DEFAULT],
-[AC_CONFIG_AUX_DIRS("$srcdir" "$srcdir/.." "$srcdir/../..")])
+[AC_REQUIRE([_AC_INIT_AUX_DIR])])
 
 
-# AC_CONFIG_AUX_DIRS(DIR ...)
-# ---------------------------
-# Internal subroutine.
-# Search for the configuration auxiliary files in directory list $1.
-# We look only for install-sh, so users of AC_PROG_INSTALL
-# do not automatically need to distribute the other auxiliary files.
-AC_DEFUN([AC_CONFIG_AUX_DIRS],
-[ac_aux_dir=
-for ac_dir in $1
-do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
+# _AC_INIT_AUX_DIR
+# ----------------
+# Internal subroutine: AC_REQUIREd by AC_REQUIRE_AUX_FILE and
+# AC_CONFIG_AUX_DIR_DEFAULT.  Emits the shell code that actually
+# searches for the aux directory.  If AC_REQUIRE_AUX_FILE has
+# been used at least once, the aux directory must contain all
+# of the files that were AC_REQUIRE_AUX_FILE'd.  If it was never
+# used, fall back to the old behavior of looking only for install-sh.
+# (This fallback can be removed once we drop AC_CONFIG_AUX_DIR_DEFAULT.)
+AC_DEFUN([_AC_INIT_AUX_DIR],
+[m4_wrap_lifo(
+  [m4_do(
+    [m4_set_empty([_AC_AUX_FILES],
+      [m4_do(
+        [m4_warn([syntax],
+          [AC_CONFIG_AUX_DIR_DEFAULT used without AC_REQUIRE_AUX_FILE])],
+        [m4_set_add([_AC_AUX_FILES], [install-sh])])])],
+  [m4_divert_text([INIT_PREPARE],
+[
+# Auxiliary files required by this configure script.
+ac_aux_files="m4_set_dump([_AC_AUX_FILES], [ ])"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="m4_ifset([_AC_AUX_DIR_CANDIDATES],
+  [m4_defn([_AC_AUX_DIR_CANDIDATES])],
+  [${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../..])"
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+_AS_ECHO_LOG([looking for aux files: $ac_aux_files])
+_AS_PATH_WALK([$ac_aux_dir_candidates], [
+  _AS_ECHO_LOG([ trying $as_dir])
+  ac_aux_dir_found=yes
+  ac_install_sh=
+  for ac_aux in $ac_aux_files
+  do
+    # As a special case, if "install-sh" is required, that requirement
+    # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+    # and $ac_install_sh is set appropriately for whichever one is found.
+    if test x"$ac_aux" = x"install-sh"
+    then
+      if test -f "${as_dir}install-sh"; then
+        _AS_ECHO_LOG([  ${as_dir}install-sh found])
+        ac_install_sh="${as_dir}install-sh -c"
+      elif test -f "${as_dir}install.sh"; then
+        _AS_ECHO_LOG([  ${as_dir}install.sh found])
+        ac_install_sh="${as_dir}install.sh -c"
+      elif test -f "${as_dir}shtool"; then
+        _AS_ECHO_LOG([  ${as_dir}shtool found])
+        ac_install_sh="${as_dir}shtool install -c"
+      else
+        ac_aux_dir_found=no
+        if $ac_first_candidate; then
+          ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+        else
+          break
+        fi
+      fi
+    else
+      if test -f "${as_dir}${ac_aux}"; then
+        _AS_ECHO_LOG([  ${as_dir}${ac_aux} found])
+      else
+        ac_aux_dir_found=no
+        if $ac_first_candidate; then
+          ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+        else
+          break
+        fi
+      fi
+    fi
+  done
+  if test "$ac_aux_dir_found" = yes; then
+    ac_aux_dir="$as_dir"
     break
   fi
-done
-if test -z "$ac_aux_dir"; then
-  AC_MSG_ERROR([cannot find install-sh, install.sh, or shtool in $1])
-fi
+  ac_first_candidate=false
+],
+  [AC_MSG_ERROR([cannot find required auxiliary files:$ac_missing_aux_files])])
 
 # These three variables are undocumented and unsupported,
 # and are intended to be withdrawn in a future Autoconf release.
 # They can cause serious problems if a builder's source tree is in a directory
 # whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+dnl The quadrigraphs prevent spurious deprecation warnings.
+if test -f "${ac_aux_dir}config.guess"; then
+  ac_@&t@config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+  ac_@&t@config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+  ac_@&t@configure="$SHELL ${ac_aux_dir}configure"
+fi
+])])])])
 
-AC_PROVIDE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
-])# AC_CONFIG_AUX_DIRS
+# Deprecation warnings for the unsupported variables above.
+m4_define([ac_config_guess],
+[m4_warn([obsolete],
+ [$ac_config_guess is obsolete and unsafe.  Please stop using it.
+Contact [email protected] if you really need it.])ac_@&t@config_guess])
 
+m4_define([ac_config_sub],
+[m4_warn([obsolete],
+ [$ac_config_sub is obsolete and unsafe.  Please stop using it.
+Contact [email protected] if you really need it.])ac_@&t@config_sub])
+
+m4_define([ac_configure],
+[m4_warn([obsolete],
+ [$ac_configure is obsolete and unsafe.  Please stop using it.
+Contact [email protected] if you really need it.])ac_@&t@config_sub])
 
 
 
@@ -1850,20 +1977,6 @@ AC_DEFUN([AC_CONFIG_MACRO_DIR],
 [_$0S(_$0S_USED()[$0], [$1])])
 
 
-## --------------------- ##
-## Requiring aux files.  ##
-## --------------------- ##
-
-# AC_REQUIRE_AUX_FILE(FILE)
-# -------------------------
-# This macro does nothing, it's a hook to be read with `autoconf --trace'.
-# It announces FILE is required in the auxdir.
-m4_define([AC_REQUIRE_AUX_FILE],
-[AS_LITERAL_WORD_IF([$1], [],
-	       [m4_fatal([$0: requires a literal argument])])])
-
-
-
 ## ----------------------------------- ##
 ## Getting the canonical system type.  ##
 ## ----------------------------------- ##
@@ -1904,25 +2017,24 @@ AC_SUBST([$1_os])dnl
 # AC_CANONICAL_BUILD
 # ------------------
 AC_DEFUN_ONCE([AC_CANONICAL_BUILD],
-[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
-AC_REQUIRE_AUX_FILE([config.sub])dnl
+[AC_REQUIRE_AUX_FILE([config.sub])dnl
 AC_REQUIRE_AUX_FILE([config.guess])dnl
 m4_divert_once([HELP_CANON],
 [[
 System types:
   --build=BUILD     configure for building on BUILD [guessed]]])dnl
 # Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  AC_MSG_ERROR([cannot run $SHELL $ac_aux_dir/config.sub])
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+  AC_MSG_ERROR([cannot run $SHELL ${ac_aux_dir}config.sub])
 
 AC_CACHE_CHECK([build system type], [ac_cv_build],
 [ac_build_alias=$build_alias
 test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+  ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
 test "x$ac_build_alias" = x &&
   AC_MSG_ERROR([cannot guess build type; you must specify one])
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  AC_MSG_ERROR([$SHELL $ac_aux_dir/config.sub $ac_build_alias failed])
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+  AC_MSG_ERROR([$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed])
 ])
 _AC_CANONICAL_SPLIT(build)
 ])# AC_CANONICAL_BUILD
@@ -1938,8 +2050,8 @@ AC_CACHE_CHECK([host system type], [ac_cv_host],
 [if test "x$host_alias" = x; then
   ac_cv_host=$ac_cv_build
 else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    AC_MSG_ERROR([$SHELL $ac_aux_dir/config.sub $host_alias failed])
+  ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+    AC_MSG_ERROR([$SHELL ${ac_aux_dir}config.sub $host_alias failed])
 fi
 ])
 _AC_CANONICAL_SPLIT([host])
@@ -1957,8 +2069,8 @@ AC_CACHE_CHECK([target system type], [ac_cv_target],
 [if test "x$target_alias" = x; then
   ac_cv_target=$ac_cv_host
 else
-  ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
-    AC_MSG_ERROR([$SHELL $ac_aux_dir/config.sub $target_alias failed])
+  ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` ||
+    AC_MSG_ERROR([$SHELL ${ac_aux_dir}config.sub $target_alias failed])
 fi
 ])
 _AC_CANONICAL_SPLIT([target])
diff --git a/lib/autoconf/programs.m4 b/lib/autoconf/programs.m4
index 86ba3948..a895e59a 100644
--- a/lib/autoconf/programs.m4
+++ b/lib/autoconf/programs.m4
@@ -524,8 +524,7 @@ m4_ifval([$3],
 AN_MAKEVAR([INSTALL], [AC_PROG_INSTALL])
 AN_PROGRAM([install], [AC_PROG_INSTALL])
 AC_DEFUN_ONCE([AC_PROG_INSTALL],
-[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
-AC_REQUIRE_AUX_FILE([install-sh])dnl
+[AC_REQUIRE_AUX_FILE([install-sh])dnl
 # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
@@ -662,8 +661,7 @@ AC_SUBST(INSTALL_DATA)dnl
 # directories to create.
 AN_MAKEVAR([MKDIR_P], [AC_PROG_MKDIR_P])
 AC_DEFUN_ONCE([AC_PROG_MKDIR_P],
-[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
-AC_REQUIRE_AUX_FILE([install-sh])dnl
+[AC_REQUIRE_AUX_FILE([install-sh])dnl
 AC_MSG_CHECKING([for a race-free mkdir -p])
 if test -z "$MKDIR_P"; then
   AC_CACHE_VAL([ac_cv_path_mkdir],
diff --git a/lib/autoconf/status.m4 b/lib/autoconf/status.m4
index 1389f328..b604368a 100644
--- a/lib/autoconf/status.m4
+++ b/lib/autoconf/status.m4
@@ -1097,7 +1097,6 @@ AC_DEFUN([AC_CONFIG_SUBDIRS],
 [_$0(m4_validate_w([$1]))])
 
 m4_define([_AC_CONFIG_SUBDIRS],
-[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])]dnl
 [AC_REQUIRE([AC_DISABLE_OPTION_CHECKING])]dnl
 [AS_LITERAL_IF([$1], [],
 	       [m4_warn([syntax], [$0: you should use literals])])]dnl
@@ -1191,14 +1190,12 @@ if test "$no_recursion" != yes; then
 
     cd "$ac_dir"
 
-    # Check for guested configure; otherwise get Cygnus style configure.
+    # Check for configure.gnu first; this name is used for a wrapper for
+    # Metaconfig's "Configure" on case-insensitive filesystems.
     if test -f "$ac_srcdir/configure.gnu"; then
       ac_sub_configure=$ac_srcdir/configure.gnu
     elif test -f "$ac_srcdir/configure"; then
       ac_sub_configure=$ac_srcdir/configure
-    elif test -f "$ac_srcdir/configure.in"; then
-      # This should be Cygnus configure.
-      ac_sub_configure=$ac_aux_dir/configure
     else
       AC_MSG_WARN([no configuration information is in $ac_dir])
       ac_sub_configure=
diff --git a/lib/autotest/general.m4 b/lib/autotest/general.m4
index 6a6d1a47..f29ce490 100644
--- a/lib/autotest/general.m4
+++ b/lib/autotest/general.m4
@@ -479,8 +479,6 @@ do
   *)    at_optarg= ;;
   esac
 
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
   case $at_option in
     --help | -h )
 	at_help_p=:
diff --git a/tests/torture.at b/tests/torture.at
index 631f34f4..f9bcf5e5 100644
--- a/tests/torture.at
+++ b/tests/torture.at
@@ -1926,3 +1926,41 @@ AT_CHECK([autoreconf -Werror -Wportability-recursive], 0, [], [])
 rm -rf configure config.h.in Makefile.in aclocal.m4 autom4te.cache
 
 AT_CLEANUP
+
+## ------------------------- ##
+## Missing auxiliary files.  ##
+## ------------------------- ##
+
+AT_SETUP([Missing auxiliary files])
+
+AT_DATA([configure.ac],
+[[AC_INIT([GNU foo], [1.0])
+AC_CONFIG_AUX_DIR([build-aux])
+AC_CANONICAL_HOST
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([], [1], [ignore],
+[configure: error: cannot find required auxiliary files: config.guess config.sub
+])
+
+: > build-aux/config.guess
+
+AT_CHECK_CONFIGURE([], [1], [ignore],
+[configure: error: cannot find required auxiliary files: config.sub
+])
+
+AT_DATA([configure.ac],
+[[AC_INIT([GNU foo], [1.0])
+AC_CONFIG_AUX_DIR([build-aux])
+AC_PROG_INSTALL
+AC_OUTPUT
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK_CONFIGURE([], [1], [ignore],
+[configure: error: cannot find required auxiliary files: install-sh
+])
+
+AT_CLEANUP
-- 
2.28.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.