summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS24
-rw-r--r--doc/autoconf.texi379
-rw-r--r--lib/autoconf/functions.m447
-rw-r--r--lib/autoconf/headers.m4189
-rw-r--r--tests/tools.at6
5 files changed, 263 insertions, 382 deletions
diff --git a/NEWS b/NEWS
index 5d6c6579..f2cd5c52 100644
--- a/NEWS
+++ b/NEWS
@@ -70,6 +70,30 @@ GNU Autoconf NEWS - User visible changes.
- AT_TESTED arguments can use variable or command substitutions, including
in particular $EXEEXT
+- AC_INCLUDES_DEFAULT has been streamlined. It now assumes that the
+ ISO C90 headers 'stdlib.h' and 'string.h' are unconditionally
+ available, and does not include the pre-standard header 'memory.h'
+ at all. If the POSIX header 'strings.h' exists, it will be
+ included; it is assumed to be safe to include both 'string.h' and
+ 'strings.h' in the same source file. We are not aware of any
+ current system that violates any of the above assumptions.
+
+ For compatibility's sake, the C preprocessor macros STDC_HEADERS,
+ HAVE_STDLIB_H, and HAVE_STRING_H are defined unconditionally.
+ These preprocessor macros should be considered obsolescent.
+
+ Future releases of Autoconf may reduce the set of headers checked
+ for by AC_INCLUDES_DEFAULT.
+
+- AC_HEADER_STDC and AC_HEADER_TIME are now stubs which will be
+ removed from 'configure.ac' by 'autoupdate'. For compatibility's
+ sake, the stubs (and their 'autoupdate' replacements) continue to
+ define the C preprocessor macros STDC_HEADERS and TIME_WITH_SYS_TIME,
+ respectively, but without actually checking for the ancient systems
+ where formerly those macros would not be defined.
+
+ These macros were already labeled obsolescent in the manual.
+
* Noteworthy changes in release 2.69 (2012-04-24) [stable]
** Autoconf now requires perl 5.6 or better (but generated configure
diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index 0c489a31..3e27e295 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -3885,57 +3885,78 @@ succeeds.
@subsection Default Includes
@cindex Default includes
@cindex Includes, default
+@hdrindex{assert.h}
+@hdrindex{ctype.h}
+@hdrindex{errno.h}
+@hdrindex{float.h}
+@hdrindex{iso646.h}
+@hdrindex{limits.h}
+@hdrindex{locale.h}
+@hdrindex{math.h}
+@hdrindex{setjmp.h}
+@hdrindex{signal.h}
+@hdrindex{stdarg.h}
+@hdrindex{stddef.h}
+@hdrindex{stdio.h}
+@hdrindex{stdlib.h}
+@hdrindex{string.h}
+@hdrindex{time.h}
+@hdrindex{wchar.h}
+@hdrindex{wctype.h}
-Several tests depend upon a set of header files. Since these headers
-are not universally available, tests actually have to provide a set of
-protected includes, such as:
+Test programs frequently need to include headers that may or may not be
+available on the system whose features are being tested. Each test can
+use all the preprocessor macros that have been @code{AC_DEFINE}d by
+previous tests, so for example one may write
@example
@group
-#ifdef TIME_WITH_SYS_TIME
+#include <time.h>
+#ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
-# include <time.h>
-#else
-# ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
#endif
@end group
@end example
@noindent
-Unless you know exactly what you are doing, you should avoid using
-unconditional includes, and check the existence of the headers you
-include beforehand (@pxref{Header Files}).
+if @file{sys/time.h} has already been tested for.
+
+All hosted environments that are still of interest for portable code
+provide all of the headers specified in ISO C90 (as amended in 1995):
+@file{assert.h}, @file{ctype.h}, @file{errno.h}, @file{float.h},
+@file{iso646.h}, @file{limits.h}, @file{locale.h}, @file{math.h},
+@file{setjmp.h}, @file{signal.h}, @file{stdarg.h}, @file{stddef.h},
+@file{stdio.h}, @file{stdlib.h}, @file{string.h}, @file{time.h},
+@file{wchar.h}, and @file{wctype.h}. Most programs can safely include
+these headers unconditionally. All other headers, including all headers
+from later revisions of the C standard, need to be tested for
+(@pxref{Header Files}).
-Most generic macros use the following macro to provide the default set
+If your program needs to be portable to a @emph{freestanding}
+environment, such as an embedded OS that doesn't provide all of the
+facilities of the C90 standard library, you may need to test for some of
+the above headers as well. Note that many Autoconf macros internally
+assume that the complete set of C90 headers are available.
+
+Most generic macros use the following macro to provide a default set
of includes:
@defmac AC_INCLUDES_DEFAULT (@ovar{include-directives})
@acindex{INCLUDES_DEFAULT}
-Expand to @var{include-directives} if defined, otherwise to:
+Expand to @var{include-directives} if present and nonempty, otherwise to:
@example
@group
+#include <stddef.h>
#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
-#if defined STDC_HEADERS || defined HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-#include <stddef.h>
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
@@ -3951,14 +3972,13 @@ Expand to @var{include-directives} if defined, otherwise to:
@end group
@end example
-If the default includes are used, then check for the presence of these
-headers and their compatibility, i.e., you don't need to run
-@code{AC_HEADER_STDC}, nor check for @file{stdlib.h} etc.
-
-These headers are checked for in the same order as they are included.
-For instance, on some systems @file{string.h} and @file{strings.h} both
-exist, but conflict. Then @code{HAVE_STRING_H} is defined, not
-@code{HAVE_STRINGS_H}.
+Using this macro without @var{include-directives} has the side effect of
+checking for @file{sys/types.h}, @file{sys/stat.h}, @file{strings.h},
+@file{inttypes.h}, @file{stdint.h}, and @file{unistd.h}, as if by
+@code{AC_CHECK_HEADERS}. For backward compatibility's sake, it also
+unconditionally defines @code{HAVE_STRING_H}, @code{HAVE_STDLIB_H}, and
+@code{STDC_HEADERS}. New code should not make use of these preprocessor
+macros.
@end defmac
@node Alternative Programs
@@ -4887,9 +4907,7 @@ like the following, to declare it properly.
@example
@group
-#if defined STDC_HEADERS || defined HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
+#include <stdlib.h>
#include <stddef.h>
#ifdef HAVE_ALLOCA_H
# include <alloca.h>
@@ -5744,6 +5762,34 @@ Posix Headers, gnulib, GNU gnulib} and @ref{Glibc Header File
Substitutes, , Glibc Headers, gnulib, GNU gnulib}. Please help us keep
the gnulib list as complete as possible.
+When we say that a header ``may require'' some set of other headers, we
+mean that it may be necessary for you to manually include those other
+headers first, or the contents of the header under test will fail to
+compile. When checking for these headers, you must provide the
+potentially-required headers in the @var{includes} argument to
+@code{AC_CHECK_HEADER} or @code{AC_CHECK_HEADERS}, or the check will
+fail spuriously. @code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes})
+arranges to include a number of common requirements and should normally
+come first in your @var{includes}. For example, @file{net/if.h} may
+require @file{sys/types.h}, @file{sys/socket.h}, or both, and
+@code{AC_INCLUDES_DEFAULT} handles @file{sys/types.h} but not
+@file{sys/socket.h}, so you should check for it like this:
+
+@example
+AC_CHECK_HEADERS([sys/socket.h])
+AC_CHECK_HEADERS([net/if.h], [], [],
+[AC_INCLUDES_DEFAULT[
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+]])
+@end example
+
+Note that the example mixes single quoting (for@code{AC_INCLUDES_DEFAULT},
+so that it gets expanded) and double quoting (to ensure that each
+preprocessor @code{#} gets treated as a literal string rather than a
+comment).
+
@table @asis
@item @file{limits.h}
@@ -5752,96 +5798,67 @@ In C99 and later, @file{limits.h} defines @code{LLONG_MIN},
environments (e.g., default GCC 4.0.2 + glibc 2.4) do not
define them.
+@item @file{memory.h}
+@hdrindex{memory.h}
+This header file is obsolete; use @file{string.h} instead.
+
+@item @file{strings.h}
+@hdrindex{strings.h}
+On some systems, this is the only header that declares
+@code{strcasecmp}, @code{strncasecmp}, and @code{ffs}.
+
+This header may or may not include @file{string.h} for you. However, on
+all recent systems it is safe to include both @file{string.h} and
+@file{strings.h}, in either order, in the same source file.
+
@item @file{inttypes.h} vs.@: @file{stdint.h}
@hdrindex{inttypes.h}
@hdrindex{stdint.h}
-In C99 and later, @file{inttypes.h} includes
-@file{stdint.h}, so there's no need to include @file{stdint.h}
-separately in a standard environment. Some implementations have
-@file{inttypes.h} but not @file{stdint.h} (e.g., Solaris 7), but we don't
-know of any implementation that has @file{stdint.h} but not
-@file{inttypes.h}.
+C99 specifies that @file{inttypes.h} includes @file{stdint.h}, so there's
+no need to include @file{stdint.h} separately in a standard environment.
+However, some implementations have @file{inttypes.h} but not @file{stdint.h}
+(e.g., Solaris 7), and some have @file{stdint.h} but not @file{inttypes.h}
+(e.g. MSVC 2012). Therefore, it is necessary to check for each and include
+each only if available.
@item @file{linux/irda.h}
@hdrindex{linux/irda.h}
-It requires @file{linux/types.h} and @file{sys/socket.h}.
+This header may require @file{linux/types.h} and/or @file{sys/socket.h}.
@item @file{linux/random.h}
@hdrindex{linux/random.h}
-It requires @file{linux/types.h}.
+This header may require @file{linux/types.h}.
@item @file{net/if.h}
@hdrindex{net/if.h}
-On Darwin, this file requires that @file{sys/socket.h} be included
-beforehand. One should run:
-
-@example
-AC_CHECK_HEADERS([sys/socket.h])
-AC_CHECK_HEADERS([net/if.h], [], [],
-[#include <stdio.h>
-#if defined STDC_HEADERS || defined HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-#include <stddef.h>
-#ifdef HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
-])
-@end example
+This header may require @file{sys/types.h} and/or @file{sys/socket.h}.
@item @file{netinet/if_ether.h}
@hdrindex{netinet/if_ether.h}
-On Darwin, this file requires that @file{stdio.h} and
-@file{sys/socket.h} be included beforehand. One should run:
-
-@example
-AC_CHECK_HEADERS([sys/socket.h])
-AC_CHECK_HEADERS([netinet/if_ether.h], [], [],
-[#include <stdio.h>
-#if defined STDC_HEADERS || defined HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-#include <stddef.h>
-#ifdef HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
-])
-@end example
-
-@item @file{stdint.h}
-See above, item @file{inttypes.h} vs.@: @file{stdint.h}.
-
-@item @file{stdlib.h}
-@hdrindex{stdlib.h}
-On many systems (e.g., Darwin), @file{stdio.h} is a prerequisite.
+This header may require some combination of @file{sys/types.h},
+@file{sys/socket.h}, @file{netinet/in.h}, and @file{net/if.h}.
@item @file{sys/mount.h}
@hdrindex{sys/mount.h}
-On FreeBSD 4.8 on ia32 and using gcc version 2.95.4,
-@file{sys/params.h} is a prerequisite.
+This header may require @file{sys/params.h}.
@item @file{sys/ptem.h}
@hdrindex{sys/ptem.h}
-On Solaris 8, @file{sys/stream.h} is a prerequisite.
+This header may require @file{sys/stream.h}.
@item @file{sys/socket.h}
@hdrindex{sys/socket.h}
-On Darwin, @file{stdlib.h} is a prerequisite.
+This header may require @file{sys/types.h}.
@item @file{sys/ucred.h}
@hdrindex{sys/ucred.h}
-On Tru64 5.1, @file{sys/types.h} is a prerequisite.
+This header may require @file{sys/types.h}.
@item @file{X11/extensions/scrnsaver.h}
@hdrindex{X11/extensions/scrnsaver.h}
Using XFree86, this header requires @file{X11/Xlib.h}, which is probably
so required that you might not even consider looking for it.
-@example
-AC_CHECK_HEADERS([X11/extensions/scrnsaver.h], [], [],
-[[#include <X11/Xlib.h>
-]])
-@end example
@end table
@@ -6035,91 +6052,14 @@ does not.
@defmac AC_HEADER_STDC
@acindex{HEADER_STDC}
@cvindex STDC_HEADERS
-@hdrindex{stdlib.h}
-@hdrindex{stdarg.h}
-@hdrindex{string.h}
-@hdrindex{float.h}
-@hdrindex{ctype.h}
@caindex header_stdc
-Define @code{STDC_HEADERS} if the system has C header files
-conforming to ANSI C89 (ISO C90).
-Specifically, this macro checks for @file{stdlib.h}, @file{stdarg.h},
-@file{string.h}, and @file{float.h}; if the system has those, it
-probably has the rest of the C89 header files. This macro also
-checks whether @file{string.h} declares @code{memchr} (and thus
-presumably the other @code{mem} functions), whether @file{stdlib.h}
-declare @code{free} (and thus presumably @code{malloc} and other related
-functions), and whether the @file{ctype.h} macros work on characters
-with the high bit set, as the C standard requires.
-
-If you use this macro, your code can refer to @code{STDC_HEADERS} to
-determine whether the system has conforming header files (and probably C
-library functions).
-
-This macro caches its result in the @code{ac_cv_header_stdc} variable.
-
-This macro is obsolescent, as current systems have conforming header
-files. New programs need not use this macro.
-@hdrindex{string.h}
-@hdrindex{strings.h}
-Nowadays @file{string.h} is part of the C standard and declares functions like
-@code{strcpy}, and @file{strings.h} is standardized by Posix and declares
-BSD functions like @code{bcopy}; but
-historically, string functions were a major sticking point in this area.
-If you still want to worry about portability to ancient systems without
-standard headers, there is so much variation
-that it is probably easier to declare the functions you use than to
-figure out exactly what the system header files declare. Some ancient systems
-contained a mix of functions from the C standard and from BSD;
-some were mostly standard but lacked @samp{memmove}; some defined the
-BSD functions as macros in @file{string.h} or
-@file{strings.h}; some had only the BSD functions but
-@file{string.h}; some declared the memory functions in @file{memory.h},
-some in @file{string.h}; etc. It is probably sufficient to check for
-one string function and one memory function; if the library had the
-standard versions of those then it probably had most of the others.
-If you put the following in @file{configure.ac}:
-
-@example
-# This example is obsolescent.
-# Nowadays you can omit these macro calls.
-AC_HEADER_STDC
-AC_CHECK_FUNCS([strchr memcpy])
-@end example
-
-@noindent
-then, in your code, you can use declarations like this:
+This macro is obsolescent. Its sole effect is to make sure that all the
+headers that are included by @code{AC_INCLUDES_DEFAULT} (@pxref{Default
+Includes}), but not part of ISO C90, have been checked for.
-@example
-@group
-/* This example is obsolescent.
- Nowadays you can just #include <string.h>. */
-#ifdef STDC_HEADERS
-# include <string.h>
-#else
-# ifndef HAVE_STRCHR
-# define strchr index
-# define strrchr rindex
-# endif
-char *strchr (), *strrchr ();
-# ifndef HAVE_MEMCPY
-# define memcpy(d, s, n) bcopy ((s), (d), (n))
-# define memmove(d, s, n) bcopy ((s), (d), (n))
-# endif
-#endif
-@end group
-@end example
-
-@noindent
-If you use a function like @code{memchr}, @code{memset}, @code{strtok},
-or @code{strspn}, which have no BSD equivalent, then macros don't
-suffice to port to ancient hosts; you must provide an implementation of
-each function. An easy
-way to incorporate your implementations only when needed (since the ones
-in system C libraries may be hand optimized) is to, taking @code{memchr}
-for example, put it in @file{memchr.c} and use
-@samp{AC_REPLACE_FUNCS([memchr])}.
+All hosted environments that are still of interest for portable code
+provide all of the headers specified in ISO C90 (as amended in 1995).
@end defmac
@defmac AC_HEADER_SYS_WAIT
@@ -6180,46 +6120,6 @@ The way to check whether the system supports Posix is:
@end group
@end example
-@anchor{AC_HEADER_TIME}
-@defmac AC_HEADER_TIME
-@acindex{HEADER_TIME}
-@cvindex TIME_WITH_SYS_TIME
-@hdrindex{time.h}
-@hdrindex{sys/time.h}
-@caindex header_time
-If a program may include both @file{time.h} and @file{sys/time.h},
-define @code{TIME_WITH_SYS_TIME}. On some ancient systems,
-@file{sys/time.h} included @file{time.h}, but @file{time.h} was not
-protected against multiple inclusion, so programs could not explicitly
-include both files. This macro is useful in programs that use, for
-example, @code{struct timeval} as well as
-@code{struct tm}. It is best used in conjunction with
-@code{HAVE_SYS_TIME_H}, which can be checked for using
-@code{AC_CHECK_HEADERS([sys/time.h])}.
-
-@example
-@group
-#ifdef TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-#endif
-@end group
-@end example
-
-@noindent
-This macro caches its result in the @code{ac_cv_header_time} variable.
-
-This macro is obsolescent, as current systems can include both files
-when they exist. New programs need not use this macro.
-@end defmac
-
-
@defmac AC_HEADER_TIOCGWINSZ
@acindex{HEADER_TIOCGWINSZ}
@cvindex GWINSZ_IN_SYS_IOCTL
@@ -23403,6 +23303,24 @@ Replaced by @code{AC_CHECK_HEADER} (@pxref{AC_CHECK_HEADER}).
Replaced by @code{AC_EGREP_HEADER} (@pxref{AC_EGREP_HEADER}).
@end defmac
+@anchor{AC_HEADER_TIME}
+@defmac AC_HEADER_TIME
+@acindex{HEADER_TIME}
+@cvindex TIME_WITH_SYS_TIME
+@hdrindex{time.h}
+@hdrindex{sys/time.h}
+@caindex header_time
+This macro used to check whether it was possible to include
+@file{time.h} and @file{sys/time.h} in the same source file,
+defining @code{TIME_WITH_SYS_TIME} if so.
+
+Nowadays, it is equivalent to @samp{AC_CHECK_HEADERS([sys/time.h])},
+although it does still define @code{TIME_WITH_SYS_TIME} for
+compatibility's sake. @file{time.h} is universally present, and the
+systems on which @file{sys/time.h} conflicted with @file{time.h} are
+obsolete.
+@end defmac
+
@defmac AC_HELP_STRING
@acindex{HELP_STRING}
Replaced by @code{AS_HELP_STRING} (@pxref{AS_HELP_STRING}).
@@ -23559,9 +23477,7 @@ Replaced by @code{AC_HEADER_MAJOR} (@pxref{AC_HEADER_MAJOR}).
Used to define @code{NEED_MEMORY_H} if the @code{mem} functions were
defined in @file{memory.h}. Today it is equivalent to
@samp{AC_CHECK_HEADERS([memory.h])} (@pxref{AC_CHECK_HEADERS}). Adjust
-your code to depend upon
-@code{HAVE_MEMORY_H}, not @code{NEED_MEMORY_H}; see @ref{Standard
-Symbols}.
+your code to get the @code{mem} functions from @file{string.h} instead.
@end defmac
@defmac AC_MINGW32
@@ -23811,7 +23727,9 @@ Replaced by @code{AC_HEADER_STAT} (@pxref{AC_HEADER_STAT}).
@defmac AC_STDC_HEADERS
@acindex{STDC_HEADERS}
-Replaced by @code{AC_HEADER_STDC} (@pxref{AC_HEADER_STDC}).
+Replaced by @code{AC_HEADER_STDC} (@pxref{AC_HEADER_STDC}), which
+is itself obsolete. Nowadays it is safe to assume the facilities of C90
+exist.
@end defmac
@defmac AC_STRCOLL
@@ -23909,7 +23827,9 @@ Replaced by @code{AC_STRUCT_TIMEZONE} (@pxref{AC_STRUCT_TIMEZONE}).
@defmac AC_TIME_WITH_SYS_TIME
@acindex{TIME_WITH_SYS_TIME}
-Replaced by @code{AC_HEADER_TIME} (@pxref{AC_HEADER_TIME}).
+Replaced by @code{AC_HEADER_TIME} (@pxref{AC_HEADER_TIME}), which is
+itself obsolete; nowadays one need only do
+@samp{AC_CHECK_HEADERS([sys/time.h])}.
@end defmac
@defmac AC_TRY_COMPILE (@var{includes}, @var{function-body}, @
@@ -24049,15 +23969,24 @@ Replaced by @code{AC_TYPE_UID_T} (@pxref{AC_TYPE_UID_T}).
@defmac AC_UNISTD_H
@acindex{UNISTD_H}
-Same as @samp{AC_CHECK_HEADERS([unistd.h])} (@pxref{AC_CHECK_HEADERS}).
+Same as @samp{AC_CHECK_HEADERS([unistd.h])} (@pxref{AC_CHECK_HEADERS}),
+which is one of the tests done as a side effect by
+@code{AC_INCLUDES_DEFAULT} (@pxref{Default Includes}), so usually
+unnecessary to write explicitly.
@end defmac
@defmac AC_USG
@acindex{USG}
@cvindex USG
-Define @code{USG} if the BSD string functions are defined in
-@file{strings.h}. You should no longer depend upon @code{USG}, but on
-@code{HAVE_STRING_H}; see @ref{Standard Symbols}.
+Define @code{USG} if the BSD string functions (@code{bcopy},
+@code{bzero}, @code{index}, @code{rindex}, etc) are @emph{not} defined
+in @file{strings.h}. Modern code should assume @file{string.h} exists
+and should use the ISO C string functions (@code{memmove}, @code{memset},
+@code{strchr}, @code{strrchr}, etc) unconditionally.
+
+@file{strings.h} may be the only header that declares @code{strcasecmp},
+@code{strncasecmp}, and @code{ffs}. @code{AC_INCLUDES_DEFAULT} checks
+for it (@pxref{Default Includes}); test @code{HAVE_STRINGS_H}.
@end defmac
@defmac AC_UTIME_NULL
diff --git a/lib/autoconf/functions.m4 b/lib/autoconf/functions.m4
index b544fcd6..1a378f57 100644
--- a/lib/autoconf/functions.m4
+++ b/lib/autoconf/functions.m4
@@ -380,9 +380,7 @@ AC_CACHE_CHECK([for alloca], ac_cv_func_alloca_works,
ac_cv_func_alloca_works=yes
else
AC_LINK_IFELSE([AC_LANG_PROGRAM(
-[[#if defined STDC_HEADERS || defined HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
+[[#include <stdlib.h>
#include <stddef.h>
#ifndef alloca
# ifdef __GNUC__
@@ -566,7 +564,6 @@ AC_REQUIRE([AC_FUNC_ALLOCA])dnl
AC_REQUIRE([AC_TYPE_MBSTATE_T])dnl
AC_CHECK_DECLS([getenv])
AC_CHECK_FUNCS([btowc mbsrtowcs mempcpy wmempcpy])
-AC_CHECK_HEADERS([wchar.h wctype.h])
AC_LIBOBJ([fnmatch])
AC_CONFIG_LINKS([$ac_config_libobj_dir/fnmatch.h:$ac_config_libobj_dir/fnmatch_.h])
AC_DEFINE(fnmatch, rpl_fnmatch,
@@ -683,7 +680,6 @@ AC_CHECK_HEADER(sys/dg_sys_info.h,
AC_DEFINE(DGUX, 1, [Define to 1 for DGUX with <sys/dg_sys_info.h>.])
AC_CHECK_LIB(dgc, dg_sys_info)])
-AC_CHECK_HEADER(locale.h)
AC_CHECK_FUNCS(setlocale)
# We cannot check for <dwarf.h>, because Solaris 2 does not use dwarf (it
@@ -905,17 +901,11 @@ fi
# ------------------------------------
# If `malloc (0)' properly handled, run IF-WORKS, otherwise, IF-NOT.
AC_DEFUN([_AC_FUNC_MALLOC_IF],
-[AC_REQUIRE([AC_HEADER_STDC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
-AC_CHECK_HEADERS(stdlib.h)
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
AC_CACHE_CHECK([for GNU libc compatible malloc], ac_cv_func_malloc_0_nonnull,
[AC_RUN_IFELSE(
[AC_LANG_PROGRAM(
-[[#if defined STDC_HEADERS || defined HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-char *malloc ();
-#endif
+[[#include <stdlib.h>
]],
[return ! malloc (0);])],
[ac_cv_func_malloc_0_nonnull=yes],
@@ -1013,21 +1003,14 @@ test $ac_cv_func_memcmp_working = no && AC_LIBOBJ([memcmp])
# --------------
AN_FUNCTION([mktime], [AC_FUNC_MKTIME])
AC_DEFUN([AC_FUNC_MKTIME],
-[AC_REQUIRE([AC_HEADER_TIME])dnl
-AC_CHECK_HEADERS_ONCE(sys/time.h unistd.h)
-AC_CHECK_FUNCS_ONCE(alarm)
+[AC_CHECK_HEADERS_ONCE([sys/time.h unistd.h])
+AC_CHECK_FUNCS_ONCE([alarm])
AC_CACHE_CHECK([for working mktime], ac_cv_func_working_mktime,
[AC_RUN_IFELSE([AC_LANG_SOURCE(
[[/* Test program from Paul Eggert and Tony Leneis. */
-#ifdef TIME_WITH_SYS_TIME
+#include <time.h>
+#ifdef HAVE_SYS_TIME_H
# include <sys/time.h>
-# include <time.h>
-#else
-# ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
#endif
#include <limits.h>
@@ -1228,7 +1211,7 @@ AU_ALIAS([AM_FUNC_MKTIME], [AC_FUNC_MKTIME])
AN_FUNCTION([mmap], [AC_FUNC_MMAP])
AC_DEFUN([AC_FUNC_MMAP],
[AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
-AC_CHECK_HEADERS_ONCE([stdlib.h unistd.h sys/param.h])
+AC_CHECK_HEADERS_ONCE([unistd.h sys/param.h])
AC_CHECK_FUNCS([getpagesize])
AC_CACHE_CHECK([for working mmap], [ac_cv_func_mmap_fixed_mapped],
[AC_RUN_IFELSE([AC_LANG_SOURCE([AC_INCLUDES_DEFAULT]
@@ -1260,10 +1243,6 @@ AC_CACHE_CHECK([for working mmap], [ac_cv_func_mmap_fixed_mapped],
#include <fcntl.h>
#include <sys/mman.h>
-#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
-char *malloc ();
-#endif
-
/* This mess was copied from the GNU getpagesize.h. */
#ifndef HAVE_GETPAGESIZE
# ifdef _SC_PAGESIZE
@@ -1424,17 +1403,11 @@ AU_ALIAS([AM_FUNC_OBSTACK], [AC_FUNC_OBSTACK])
# -------------------------------------
# If `realloc (0, 0)' is properly handled, run IF-WORKS, otherwise, IF-NOT.
AC_DEFUN([_AC_FUNC_REALLOC_IF],
-[AC_REQUIRE([AC_HEADER_STDC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
-AC_CHECK_HEADERS(stdlib.h)
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles
AC_CACHE_CHECK([for GNU libc compatible realloc], ac_cv_func_realloc_0_nonnull,
[AC_RUN_IFELSE(
[AC_LANG_PROGRAM(
-[[#if defined STDC_HEADERS || defined HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-char *realloc ();
-#endif
+[[#include <stdlib.h>
]],
[return ! realloc (0, 0);])],
[ac_cv_func_realloc_0_nonnull=yes],
diff --git a/lib/autoconf/headers.m4 b/lib/autoconf/headers.m4
index 6afff7d7..634cf45b 100644
--- a/lib/autoconf/headers.m4
+++ b/lib/autoconf/headers.m4
@@ -228,28 +228,21 @@ m4_define([_AC_HEADERS_EXPANSION],
# _AC_INCLUDES_DEFAULT_REQUIREMENTS
# ---------------------------------
# Required when AC_INCLUDES_DEFAULT uses its default branch.
-AC_DEFUN([_AC_INCLUDES_DEFAULT_REQUIREMENTS],
+AC_DEFUN_ONCE([_AC_INCLUDES_DEFAULT_REQUIREMENTS],
+dnl If ever you change this variable, please keep autoconf.texi in sync.
[m4_divert_text([DEFAULTS],
[# Factoring default headers for most tests.
-dnl If ever you change this variable, please keep autoconf.texi in sync.
ac_includes_default="\
+#include <stddef.h>
#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#ifdef HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
-#if defined STDC_HEADERS || defined HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-#include <stddef.h>
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
@@ -262,13 +255,22 @@ ac_includes_default="\
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif"
-])dnl
-AC_REQUIRE([AC_HEADER_STDC])dnl
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-AC_CHECK_HEADERS([sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h],
- [], [], $ac_includes_default)
-])# _AC_INCLUDES_DEFAULT_REQUIREMENTS
+])]dnl
+[AC_CHECK_HEADERS(
+ [sys/types.h sys/stat.h strings.h inttypes.h stdint.h unistd.h],
+ [], [], [$ac_includes_default])]dnl
+dnl For backward compatibility, provide unconditional AC_DEFINEs of
+dnl HAVE_STDLIB_H, HAVE_STRING_H, and STDC_HEADERS.
+[AC_DEFINE([HAVE_STDLIB_H], [1],
+ [Always define to 1, for backward compatibility.
+ You can assume <stdlib.h> exists.])]dnl
+[AC_DEFINE([HAVE_STRING_H], [1],
+ [Always define to 1, for backward compatibility.
+ You can assume <string.h> exists.])]dnl
+[AC_DEFINE([STDC_HEADERS], [1],
+ [Always define to 1, for backward compatibility.
+ You can assume the C90 standard headers exist.])])
+# _AC_INCLUDES_DEFAULT_REQUIREMENTS
# AC_INCLUDES_DEFAULT([INCLUDES])
@@ -294,23 +296,22 @@ $ac_includes_default])])
## 3. Headers to check with AC_CHECK_HEADERS. ##
## ------------------------------------------- ##
-# errno.h is portable.
+# There is no longer any need to check for headers that are part of
+# ISO C90 (as amended): assert.h, ctype.h, errno.h, float.h, iso646.h,
+# limits.h, locale.h, math.h, setjmp.h, signal.h, stdarg.h, stddef.h,
+# stdio.h, stdlib.h, string.h, time.h, wchar.h, wctype.h.
AN_HEADER([OS.h], [AC_CHECK_HEADERS])
AN_HEADER([argz.h], [AC_CHECK_HEADERS])
AN_HEADER([arpa/inet.h], [AC_CHECK_HEADERS])
AN_HEADER([fcntl.h], [AC_CHECK_HEADERS])
AN_HEADER([fenv.h], [AC_CHECK_HEADERS])
-AN_HEADER([float.h], [AC_CHECK_HEADERS])
AN_HEADER([fs_info.h], [AC_CHECK_HEADERS])
AN_HEADER([inttypes.h], [AC_CHECK_HEADERS])
AN_HEADER([langinfo.h], [AC_CHECK_HEADERS])
AN_HEADER([libintl.h], [AC_CHECK_HEADERS])
-AN_HEADER([limits.h], [AC_CHECK_HEADERS])
-AN_HEADER([locale.h], [AC_CHECK_HEADERS])
AN_HEADER([mach/mach.h], [AC_CHECK_HEADERS])
AN_HEADER([malloc.h], [AC_CHECK_HEADERS])
-AN_HEADER([memory.h], [AC_CHECK_HEADERS])
AN_HEADER([mntent.h], [AC_CHECK_HEADERS])
AN_HEADER([mnttab.h], [AC_CHECK_HEADERS])
AN_HEADER([netdb.h], [AC_CHECK_HEADERS])
@@ -320,11 +321,8 @@ AN_HEADER([nlist.h], [AC_CHECK_HEADERS])
AN_HEADER([paths.h], [AC_CHECK_HEADERS])
AN_HEADER([sgtty.h], [AC_CHECK_HEADERS])
AN_HEADER([shadow.h], [AC_CHECK_HEADERS])
-AN_HEADER([stddef.h], [AC_CHECK_HEADERS])
AN_HEADER([stdint.h], [AC_CHECK_HEADERS])
AN_HEADER([stdio_ext.h], [AC_CHECK_HEADERS])
-AN_HEADER([stdlib.h], [AC_CHECK_HEADERS])
-AN_HEADER([string.h], [AC_CHECK_HEADERS])
AN_HEADER([strings.h], [AC_CHECK_HEADERS])
AN_HEADER([sys/acl.h], [AC_CHECK_HEADERS])
AN_HEADER([sys/file.h], [AC_CHECK_HEADERS])
@@ -352,10 +350,6 @@ AN_HEADER([utime.h], [AC_CHECK_HEADERS])
AN_HEADER([utmp.h], [AC_CHECK_HEADERS])
AN_HEADER([utmpx.h], [AC_CHECK_HEADERS])
AN_HEADER([values.h], [AC_CHECK_HEADERS])
-AN_HEADER([wchar.h], [AC_CHECK_HEADERS])
-AN_HEADER([wctype.h], [AC_CHECK_HEADERS])
-
-
## ------------------------------- ##
## 4. Tests for specific headers. ##
@@ -593,7 +587,7 @@ AC_DEFUN([AC_CHECK_HEADER_STDBOOL],
# AC_HEADER_STDBOOL
# -----------------
-# Define HAVE_STDBOOL_H if tdbool.h that conforms to C99.
+# Define HAVE_STDBOOL_H if the system provides stdbool.h that conforms to C99.
AC_DEFUN([AC_HEADER_STDBOOL],
[AC_CHECK_HEADER_STDBOOL
if test $ac_cv_header_stdbool_h = yes; then
@@ -602,62 +596,16 @@ fi
])# AC_HEADER_STDBOOL
-# AC_HEADER_STDC
-# --------------
-AC_DEFUN([AC_HEADER_STDC],
-[AC_CACHE_CHECK(for ANSI C header files, ac_cv_header_stdc,
-[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-]])],
- [ac_cv_header_stdc=yes],
- [ac_cv_header_stdc=no])
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- AC_EGREP_HEADER(memchr, string.h, , ac_cv_header_stdc=no)
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- AC_EGREP_HEADER(free, stdlib.h, , ac_cv_header_stdc=no)
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- AC_RUN_IFELSE([AC_LANG_SOURCE(
-[[#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}]])], , ac_cv_header_stdc=no, :)
-fi])
-if test $ac_cv_header_stdc = yes; then
- AC_DEFINE(STDC_HEADERS, 1,
- [Define to 1 if you have the ANSI C header files.])
-fi
-])# AC_HEADER_STDC
-
+# AU::AC_HEADER_STDC
+# ------------------
+AU_DEFUN([AC_HEADER_STDC],
+[# Autoupdate added the following line to ensure that your configure
+# script's behavior did not change. It is probably safe to remove.
+AS_IF([:], [], [ac_dummy="AC_INCLUDES_DEFAULT"])
+],
+ [The preprocessor macro `STDC_HEADERS' is obsolete.
+ Except in unusual embedded environments, you can safely include all
+ ISO C90 headers unconditionally.])
# AC_HEADER_SYS_WAIT
# ------------------
@@ -686,25 +634,23 @@ fi
])# AC_HEADER_SYS_WAIT
-# AC_HEADER_TIME
-# --------------
-AC_DEFUN([AC_HEADER_TIME],
-[AC_CACHE_CHECK([whether time.h and sys/time.h may both be included],
- ac_cv_header_time,
-[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-],
-[if ((struct tm *) 0)
-return 0;])],
- [ac_cv_header_time=yes],
- [ac_cv_header_time=no])])
-if test $ac_cv_header_time = yes; then
+# AU::AC_HEADER_TIME
+# ------------------
+AU_DEFUN([AC_HEADER_TIME],
+[AC_CHECK_HEADERS([sys/time.h])
+# Obsolete code to be removed.
+if test $ac_cv_header_sys_time_h = yes; then
AC_DEFINE(TIME_WITH_SYS_TIME, 1,
[Define to 1 if you can safely include both <sys/time.h>
- and <time.h>.])
+ and <time.h>. This macro is obsolete.])
fi
-])# AC_HEADER_TIME
+# End of obsolete code.
+], [Update your code to rely only on HAVE_SYS_TIME_H,
+then remove this warning and the obsolete code below it.
+All current systems provide time.h; it need not be checked for.
+Not all systems provide sys/time.h, but those that do, all allow
+you to include it and time.h simultaneously.])
+# AC_HEADER_TIME
# _AC_HEADER_TIOCGWINSZ_IN_TERMIOS_H
@@ -761,14 +707,17 @@ fi
# AU::AC_UNISTD_H
# ---------------
AU_DEFUN([AC_UNISTD_H],
-[AC_CHECK_HEADERS(unistd.h)])
+[# Autoupdate added the following line to ensure that your configure
+# script's behavior did not change. It is probably safe to remove.
+AS_IF([:], [], [ac_dummy="AC_INCLUDES_DEFAULT"])])
# AU::AC_USG
# ----------
-# Define `USG' if string functions are in strings.h.
+# Define `USG' if string functions are *not* in strings.h.
AU_DEFUN([AC_USG],
-[AC_MSG_CHECKING([for BSD string and memory functions])
+[# Obsolete code to be removed.
+AC_MSG_CHECKING([for BSD string and memory functions])
AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@include <strings.h>]],
[[rindex(0, 0); bzero(0, 0);]])],
[AC_MSG_RESULT(yes)],
@@ -777,9 +726,11 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[@%:@include <strings.h>]],
[Define to 1 if you do not have <strings.h>, index,
bzero, etc... This symbol is obsolete, you should
not depend upon it.])])
-AC_CHECK_HEADERS(string.h)],
-[Remove `AC_MSG_CHECKING', `AC_LINK_IFELSE' and this warning
-when you adjust your code to use HAVE_STRING_H.])
+# End of obsolete code.
+],
+[Update your code to use string.h, then remove this
+warning and the code below it. It is not necessary
+to check for string.h.])
# AU::AC_MEMORY_H
@@ -796,13 +747,17 @@ when you adjust your code to use HAVE_STRING_H.])
# But it is better to check for both headers, and alias NEED_MEMORY_H to
# HAVE_MEMORY_H.
AU_DEFUN([AC_MEMORY_H],
-[AC_CHECK_HEADER(memory.h,
- [AC_DEFINE([NEED_MEMORY_H], 1,
- [Same as `HAVE_MEMORY_H', don't depend on me.])])
-AC_CHECK_HEADERS(string.h memory.h)],
-[Remove this warning and
-`AC_CHECK_HEADER(memory.h, AC_DEFINE(...))' when you adjust your code to
-use HAVE_STRING_H and HAVE_MEMORY_H, not NEED_MEMORY_H.])
+[# Obsolete code to be removed.
+AC_CHECK_HEADERS([memory.h])
+if test $ac_cv_header_memory_h = yes; then
+ AC_DEFINE([NEED_MEMORY_H], [1],
+ [Same as `HAVE_MEMORY_H', don't depend on me.])
+fi
+# End of obsolete code.
+],
+[Update your code to use string.h, then remove this
+warning and the code below it. It is not necessary
+to check for string.h.])
# AU::AC_DIR_HEADER
diff --git a/tests/tools.at b/tests/tools.at
index cace11ab..294fb601 100644
--- a/tests/tools.at
+++ b/tests/tools.at
@@ -955,7 +955,7 @@ AC_DEFUN([FOO], [$#])
AU_ALIAS([BAZ],[FOO])
test "FOO:FOO():FOO(x) BAZ:BAZ():BAZ(x)" = "0:1:1 0:1:1" || exit 1
AC_PROG_CC
-AC_STDC_HEADERS
+AC_WORDS_BIGENDIAN
AC_OUTPUT
]])
@@ -963,8 +963,8 @@ AC_OUTPUT
AT_CHECK_AUTOUPDATE
AT_CHECK_AUTOCONF
AT_CHECK_CONFIGURE
-AT_CHECK([grep 'AC_HEADER_STDC[(]' configure.ac], 1, [ignore], [ignore])
-AT_CHECK([grep 'AC_HEADER_STDC' configure.ac], 0, [ignore], [ignore])
+AT_CHECK([grep 'AC_C_BIGENDIAN[(]' configure.ac], 1, [ignore], [ignore])
+AT_CHECK([grep 'AC_C_BIGENDIAN' configure.ac], 0, [ignore], [ignore])
AT_CLEANUP