From: Paul Eggert Date: Sat, 8 Apr 2006 21:46:03 +0000 (+0000) Subject: Import macros from gnulib (often changing their name). X-Git-Tag: AUTOCONF-2.59c~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=309a01c200e4013f235d092827fc03d7c232bb23;p=thirdparty%2Fautoconf.git Import macros from gnulib (often changing their name). * NEWS: AC_C_TYPE_LONG_DOUBLE is now obsolete. New macros AC_CHECK_DECLS_ONCE, AC_CHECK_FUNCS_ONCE, AC_CHECK_HEADERS_ONCE, AC_FUNC_STRTOLD, AC_HEADER_ASSERT, AC_STRUCT_DIRENT_D_INO, AC_STRUCT_DIRENT_D_TYPE, AC_TYPE_LONG_DOUBLE, AC_TYPE_LONG_DOUBLE_WIDER, AC_TYPE_INT8_T, AC_TYPE_INT16_T, AC_TYPE_INT32_T, AC_TYPE_INT64_T, AC_TYPE_INTMAX_T, AC_TYPE_INTPTR_T, AC_TYPE_LONG_LONG_INT, AC_TYPE_UINT8_T, AC_TYPE_UINT16_T, AC_TYPE_UINT32_T, AC_TYPE_UINT64_T, AC_TYPE_UINTMAX_T, AC_TYPE_UINTPTR_T, AC_TYPE_UNSIGNED_LONG_LONG_INT, AC_USE_SYSTEM_EXTENSIONS. The manual mentions Gnulib more prominently. * doc/autoconf.texi (Gnulib): New node. (Pointers): Add Gnulib URL. (Particular Functions): Alphabetize. Add AC_FUNC_STRTOLD. (Generic Functions): Add AC_CHECK_FUNCS_ONCE. Refer to new Gnulib section. (Particular Headers): Add AC_HEADER_ASSERT. For stdbool.h, suggest a #define rather than a typedef for _Bool, and mention Gnulib rather than trying to substitute stdbool code. (Generic Headers): Add AC_CHECK_HEADERS_ONCE. (Generic Declarations): Add AC_CHECK_DECLS_ONCE. (Particular Structures): Add AC_STRUCT_DIRENT_D_INO, AC_STRUCT_DIRENT_D_TYPE. (Particular Types): Mention stdint.h and inttypes.h as standard headers too. Add AC_TYPE_INT8_T, AC_TYPE_INT16_T, AC_TYPE_INT32_T, AC_TYPE_INT64_T, AC_TYPE_INTMAX_T, AC_TYPE_INTPTR_T, AC_TYPE_LONG_DOUBLE, AC_TYPE_LONG_DOUBLE_WIDER, AC_TYPE_LONG_LONG_INT, AC_TYPE_UINT8_T, AC_TYPE_UINT16_T, AC_TYPE_UINT32_T, AC_TYPE_UINT64_T, AC_TYPE_UINTMAX_T, AC_TYPE_UINTPTR_T, AC_TYPE_UNSIGNED_LONG_LONG_INT. (C Compiler): Move AC_C_LONG_DOUBLE to ... (Obsolete Macros): here. Under AC_LONG_DOUBLE, mention AC_TYPE_LONG_DOUBLE or AC_TYPE_LONG_DOUBLE_WIDER instead. (Posix Variants): Add AC_USE_SYSTEM_EXTENSIONS. (Coding Style). Don't mention m4_expand_once. * lib/autoconf/c.m4 (AC_C_LONG_DOUBLE): Implement via AC_TYPE_LONG_DOUBLE_WIDER. Now obsolete. * lib/autoconf/functions.m4 (_AH_CHECK_FUNCS): New macro. (AC_CHECK_FUNCS): Use it. (AC_CHECK_FUNCS_ONCE, AC_FUNC_STRTOLD): New macros. (AC_FUNC_WAIT3): "the Open Group standards" -> "POSIX". * lib/autoconf/general.m4 (AC_CHECK_DECLS_ONCE): New macro. * lib/autoconf/headers.m4 (AC_CHECK_HEADERS_ONCE): New macro. (AC_HEADER_ASSERT): New macro. (AC_HEADER_STDBOOL): Don't assume "#error" works. Catch a bug in IBM AIX xlc compiler version 6.0.0.0. Catch a bug in an HP-UX C compiler. * lib/autoconf/specific.m4 (AC_USE_SYSTEM_EXTENSIONS): New macro. * lib/autoconf/types.m4 (AC_TYPE_INTMAX_T. AC_TYPE_UINTMAX_T): (AC_TYPE_INTPTR_T, AC_TYPE_UINTPTR_T. AC_TYPE_LONG_DOUBLE): (AC_TYPE_LONG_DOUBLE_WIDER, AC_C_LONG_DOUBLE, AC_TYPE_LONG_LONG_INT): (AC_TYPE_UNSIGNED_LONG_LONG_INT, _AC_TYPE_INT, _AC_TYPE_UNSIGNED_INT): (_AC_STRUCT_DIRENT, AC_STRUCT_DIRENT_D_INO, AC_STRUCT_DIRENT_D_TYPE): New macros. --- diff --git a/ChangeLog b/ChangeLog index 45f0d3a4a..1ed7f045d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,65 @@ +2006-04-08 Paul Eggert + + Import macros from gnulib (often changing their name). + + * NEWS: AC_C_TYPE_LONG_DOUBLE is now obsolete. + New macros AC_CHECK_DECLS_ONCE, AC_CHECK_FUNCS_ONCE, + AC_CHECK_HEADERS_ONCE, AC_FUNC_STRTOLD, AC_HEADER_ASSERT, + AC_STRUCT_DIRENT_D_INO, AC_STRUCT_DIRENT_D_TYPE, + AC_TYPE_LONG_DOUBLE, AC_TYPE_LONG_DOUBLE_WIDER, AC_TYPE_INT8_T, + AC_TYPE_INT16_T, AC_TYPE_INT32_T, AC_TYPE_INT64_T, + AC_TYPE_INTMAX_T, AC_TYPE_INTPTR_T, AC_TYPE_LONG_LONG_INT, + AC_TYPE_UINT8_T, AC_TYPE_UINT16_T, AC_TYPE_UINT32_T, + AC_TYPE_UINT64_T, AC_TYPE_UINTMAX_T, AC_TYPE_UINTPTR_T, + AC_TYPE_UNSIGNED_LONG_LONG_INT, AC_USE_SYSTEM_EXTENSIONS. + The manual mentions Gnulib more prominently. + * doc/autoconf.texi (Gnulib): New node. + (Pointers): Add Gnulib URL. + (Particular Functions): Alphabetize. Add AC_FUNC_STRTOLD. + (Generic Functions): Add AC_CHECK_FUNCS_ONCE. Refer to new + Gnulib section. + (Particular Headers): Add AC_HEADER_ASSERT. For stdbool.h, + suggest a #define rather than a typedef for _Bool, and mention + Gnulib rather than trying to substitute stdbool code. + (Generic Headers): Add AC_CHECK_HEADERS_ONCE. + (Generic Declarations): Add AC_CHECK_DECLS_ONCE. + (Particular Structures): Add AC_STRUCT_DIRENT_D_INO, + AC_STRUCT_DIRENT_D_TYPE. + (Particular Types): Mention stdint.h and inttypes.h as standard + headers too. + Add AC_TYPE_INT8_T, AC_TYPE_INT16_T, AC_TYPE_INT32_T, AC_TYPE_INT64_T, + AC_TYPE_INTMAX_T, AC_TYPE_INTPTR_T, AC_TYPE_LONG_DOUBLE, + AC_TYPE_LONG_DOUBLE_WIDER, AC_TYPE_LONG_LONG_INT, AC_TYPE_UINT8_T, + AC_TYPE_UINT16_T, AC_TYPE_UINT32_T, AC_TYPE_UINT64_T, AC_TYPE_UINTMAX_T, + AC_TYPE_UINTPTR_T, AC_TYPE_UNSIGNED_LONG_LONG_INT. + (C Compiler): Move AC_C_LONG_DOUBLE to ... + (Obsolete Macros): here. Under AC_LONG_DOUBLE, mention + AC_TYPE_LONG_DOUBLE or AC_TYPE_LONG_DOUBLE_WIDER instead. + (Posix Variants): Add AC_USE_SYSTEM_EXTENSIONS. + (Coding Style). Don't mention m4_expand_once. + * lib/autoconf/c.m4 (AC_C_LONG_DOUBLE): Implement via + AC_TYPE_LONG_DOUBLE_WIDER. Now obsolete. + * lib/autoconf/functions.m4 (_AH_CHECK_FUNCS): New macro. + (AC_CHECK_FUNCS): Use it. + (AC_CHECK_FUNCS_ONCE, AC_FUNC_STRTOLD): New macros. + (AC_FUNC_WAIT3): "the Open Group standards" -> "POSIX". + * lib/autoconf/general.m4 (AC_CHECK_DECLS_ONCE): New macro. + * lib/autoconf/headers.m4 (AC_CHECK_HEADERS_ONCE): New macro. + (AC_HEADER_ASSERT): New macro. + (AC_HEADER_STDBOOL): Don't assume "#error" works. + Catch a bug in IBM AIX xlc compiler version 6.0.0.0. + Catch a bug in an HP-UX C compiler. + * lib/autoconf/specific.m4 (AC_USE_SYSTEM_EXTENSIONS): New macro. + * lib/autoconf/types.m4 (AC_TYPE_INTMAX_T. AC_TYPE_UINTMAX_T): + (AC_TYPE_INTPTR_T, AC_TYPE_UINTPTR_T. AC_TYPE_LONG_DOUBLE): + (AC_TYPE_LONG_DOUBLE_WIDER, AC_C_LONG_DOUBLE, AC_TYPE_LONG_LONG_INT): + (AC_TYPE_UNSIGNED_LONG_LONG_INT, _AC_TYPE_INT, _AC_TYPE_UNSIGNED_INT): + (_AC_STRUCT_DIRENT, AC_STRUCT_DIRENT_D_INO, AC_STRUCT_DIRENT_D_TYPE): + New macros. + + * tests/mktests.sh (ac_exclude_list): Fix some typos in + recent changes: awk wants /^(a|b)$/, not /^a|b$/. + 2006-04-08 Stepan Kasal * lib/autoconf/general.m4 (_AC_INIT_PREPARE): Fix the wording diff --git a/NEWS b/NEWS index d6b12c049..29267649f 100644 --- a/NEWS +++ b/NEWS @@ -35,6 +35,16 @@ ** AC_C_TYPEOF New macro to check for support of 'typeof' syntax a la GNU C. +** AC_CHECK_DECLS_ONCE, AC_CHECK_FUNCS_ONCE, AC_CHECK_HEADERS_ONCE + New "once-only" variants of commonly-used macros, to make 'configure' + smaller and faster in common cases. + +** AC_FUNC_STRTOLD + New macro to check for strtold with C99 semantics. + +** AC_HEADER_ASSERT + New macro that lets builder disable assertions at 'configure'-time. + ** AC_PATH_X Now checks for X11/Xlib.h and XrmInitialize (X proper) rather than X11/Intrinsic.h and XtMalloc (Xt). @@ -62,6 +72,9 @@ ac_cv_prog_cc_c99 or ac_cv_prog_cc_c89 (whichever is valid, in that order). +** AC_STRUCT_DIRENT_D_INO, AC_STRUCT_DIRENT_D_TYPE + New macro for checking commonly-used members of struct dirent. + ** AC_SUBST The subtituted value can now contain newlines. @@ -69,6 +82,20 @@ The substitution now occurs only when @variable@ is on a line by itself, optionally surrounded by spaces and tabs. The whole line is replaced. +** AC_TYPE_LONG_DOUBLE, AC_TYPE_LONG_DOUBLE_WIDER + New macros to check for long double, and whether it is wider than double. + The old macro AC_C_TYPE_LONG_DOUBLE has been marked as obsolete; + applications should switch to the new macro. + +** AC_TYPE_INT8_T, AC_TYPE_INT16_T, AC_TYPE_INT32_T, AC_TYPE_INT64_T, + AC_TYPE_INTMAX_T, AC_TYPE_INTPTR_T, AC_TYPE_LONG_LONG_INT, AC_TYPE_SSIZE_T, + AC_TYPE_UINT8_T, AC_TYPE_UINT16_T, AC_TYPE_UINT32_T, AC_TYPE_UINT64_T, + AC_TYPE_UINTMAX_T, AC_TYPE_UINTPTR_T, AC_TYPE_UNSIGNED_LONG_LONG_INT + New macros to check for C99 and POSIX types. + +** AC_USE_SYSTEM_EXTENSIONS + New macro to enable extensions to Posix. + ** AH_HEADER New macro which is defined to the name of the first declared config header or undefined if no config headers have been declared yet. @@ -99,6 +126,8 @@ New macros for configuring installation of Erlang libraries: AC_ERLANG_SUBST_INSTALL_LIB_DIR, AC_ERLANG_SUBST_INSTALL_LIB_SUBDIR. +** The manual now mentions Gnulib more prominently. + ** New macros to support Objective C. AC_PROG_OBJC, AC_PROG_OBJCPP. diff --git a/doc/autoconf.texi b/doc/autoconf.texi index 0eac5e36f..775c67b7d 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -279,6 +279,7 @@ published by the Free Software Foundation raise funds for The @acronym{GNU} Build System * Automake:: Escaping Makefile hell +* Gnulib:: The @acronym{GNU} portability library * Libtool:: Building libraries portably * Pointers:: More info on the @acronym{GNU} build system @@ -709,6 +710,7 @@ entire @acronym{GNU} build system for your software. @menu * Automake:: Escaping Makefile hell +* Gnulib:: The @acronym{GNU} portability library * Libtool:: Building libraries portably * Pointers:: More info on the @acronym{GNU} build system @end menu @@ -755,6 +757,32 @@ The benefits of Automake increase for larger packages (especially ones with subdirectories), but even for small programs the added convenience and portability can be substantial. And that's not all@enddots{} +@node Gnulib +@section Gnulib + +@acronym{GNU} software has a well-deserved reputation for running on +many different types of systems. While our primary goal is to write +software for the @acronym{GNU} system, many users and developers have +been introduced to us through the systems that they were already using. + +@cindex Gnulib +Gnulib is a central location for common @acronym{GNU} code, intended to +be shared among free software packages. Its components are typically +shared at the source level, rather than being a library that gets built, +installed, and linked against. The idea is to copy files from Gnulib +into your own source tree. There is no distribution tarball; developers +should just grab source modules from the repository. The source files +are available online, under various licenses, mostly @acronym{GNU} +@acronym{GPL} or @acronym{GNU} @acronym{LGPL}. + +Gnulib modules typically contain C source code along with Autoconf +macros used to configure the source code. For example, the Gnulib +@code{stdbool} module implements a @file{stdbool.h} header that nearly +conforms to C99, even on old-fashioned hosts that lack @file{stdbool.h}. +This module contains a source file for the replacement header, along +with an Autoconf macro that arranges to use the replacement header on +old-fashioned systems. + @node Libtool @section Libtool @@ -802,7 +830,8 @@ the @acronym{GNU} build tools. The home pages for @uref{http://www.gnu.org/software/autoconf/, Autoconf}, -@uref{http://www.gnu.org/software/automake/, Automake}, and +@uref{http://www.gnu.org/software/automake/, Automake}, +@uref{http://www.gnu.org/software/gnulib/, Gnulib}, and @uref{http://www.gnu.org/software/libtool/, Libtool}. @item Automake Manual @@ -4539,17 +4568,6 @@ If the @code{strcoll} function exists and works correctly, define definitions of @code{strcoll} that should not be used. @end defmac -@defmac AC_FUNC_STRTOD -@acindex{FUNC_STRTOD} -@ovindex POW_LIB -@c @fuindex strtod -@prindex @code{strtod} -If the @code{strtod} function does not exist or doesn't work correctly, -ask for an @code{AC_LIBOBJ} replacement of @samp{strtod}. In this case, -because @file{strtod.c} is likely to need @samp{pow}, set the output -variable @code{POW_LIB} to the extra library needed. -@end defmac - @defmac AC_FUNC_STRERROR_R @acindex{FUNC_STRERROR_R} @cvindex HAVE_STRERROR_R @@ -4576,6 +4594,24 @@ Check for @code{strftime} in the @file{intl} library, for SCO Unix. Then, if @code{strftime} is available, define @code{HAVE_STRFTIME}. @end defmac +@defmac AC_FUNC_STRTOD +@acindex{FUNC_STRTOD} +@ovindex POW_LIB +@c @fuindex strtod +@prindex @code{strtod} +If the @code{strtod} function does not exist or doesn't work correctly, +ask for an @code{AC_LIBOBJ} replacement of @samp{strtod}. In this case, +because @file{strtod.c} is likely to need @samp{pow}, set the output +variable @code{POW_LIB} to the extra library needed. +@end defmac + +@defmac AC_FUNC_STRTOLD +@acindex{FUNC_STRTOLD} +@prindex @code{strtold} +If the @code{strtold} function exists and conforms to C99, define +@code{HAVE_STRTOLD}. +@end defmac + @defmac AC_FUNC_STRNLEN @acindex{FUNC_STRNLEN} @cvindex HAVE_STRNLEN @@ -4657,6 +4693,17 @@ execute when one of the functions is found. You can give it a value of functions is not found. @end defmac +@defmac AC_CHECK_FUNCS_ONCE (@var{function}@dots{}) +@acindex{CHECK_FUNCS_ONCE} +@cvindex HAVE_@var{function} +For each @var{function} enumerated in the blank-or-newline-separated argument +list, define @code{HAVE_@var{function}} (in all capitals) if it is available. +This is a once-only variant of @code{AC_CHECK_FUNCS}. It generates the +checking code at most once, so that @command{configure} is smaller and +faster; but the checks cannot be conditionalized and are always done once, +early during the @command{configure} run. +@end defmac + @sp 1 Autoconf follows a philosophy that was formed over the years by those @@ -4666,10 +4713,7 @@ environment. Some functions may be missing or unfixable, and your package must be ready to replace them. Suitable replacements for many such problem functions are available from -@uref{http://www.gnu.org/software/gnulib/, Gnulib}, which aims to -provide a centralized repository of such portability functions (among -other things). The source files are available online, under various -licenses, mostly @acronym{GNU} @acronym{GPL} or @acronym{GNU} @acronym{LGPL}. +Gnulib (@pxref{Gnulib}). @defmac AC_LIBOBJ (@var{function}) @acindex{LIBOBJ} @@ -4782,6 +4826,12 @@ problems they cause. By definition, this list will always require additions. Please help us keeping it as complete as possible. @table @asis + +@item @file{limits.h} +C99 says that @file{limits.h} defines @code{LLONG_MIN}, +@code{LLONG_MAX}, and @code{ULLONG_MAX}, but many almost-C99 +environments (e.g., default GCC 4.0.2 + glibc 2.4) do not define them. + @item @file{inttypes.h} vs.@: @file{stdint.h} @hdrindex{inttypes.h} @hdrindex{stdint.h} @@ -4889,6 +4939,15 @@ AC_CHECK_HEADERS([X11/extensions/scrnsaver.h], [], [], These macros check for particular system header files---whether they exist, and in some cases whether they declare certain symbols. +@defmac AC_HEADER_ASSERT +@acindex{HEADER_ASSERT} +@cvindex NDEBUG +@hdrindex{assert.h} +Check whether to enable assertions in the style of @file{assert.h}. +Assertions are enabled by default, but the user can override this by +invoking @command{configure} with the @option{--disable-assert} option. +@end defmac + @defmac AC_HEADER_DIRENT @acindex{HEADER_DIRENT} @cvindex HAVE_DIRENT_H @@ -4940,6 +4999,9 @@ the length of a directory entry name by passing a pointer to a @code{struct dirent} to the @code{NAMLEN} macro. This macro also checks for the SCO Xenix @file{dir} and @file{x} libraries. + +Also see @code{AC_STRUCT_DIRENT_D_INO} and +@code{AC_STRUCT_DIRENT_D_TYPE} (@pxref{Particular Structures}). @end defmac @defmac AC_HEADER_MAJOR @@ -4995,7 +5057,7 @@ Amdahl UTS and Motorola System V/88. @cvindex HAVE__BOOL @hdrindex{stdbool.h} @hdrindex{system.h} -If @file{stdbool.h} exists and is conformant to C99, define +If @file{stdbool.h} exists and conforms to C99, define @code{HAVE_STDBOOL_H} to 1; if the type @code{_Bool} is defined, define @code{HAVE__BOOL} to 1. To fulfill the C99 requirements, your @file{system.h} could contain the following code: @@ -5008,7 +5070,7 @@ If @file{stdbool.h} exists and is conformant to C99, define # ifdef __cplusplus typedef bool _Bool; # else -typedef unsigned char _Bool; +# define _Bool signed char # endif # endif # define bool _Bool @@ -5018,37 +5080,10 @@ typedef unsigned char _Bool; #endif @end verbatim -Alternatively you can construct an output variable that includes only -those headers and definitions needed. For example: +Alternatively you can use the @samp{stdbool} package of Gnulib +(@pxref{Gnulib}); it packages the above code into a replacement header +and contains a few other bells and whistles. -@verbatim -AC_HEADER_STDBOOL -AC_SUBST([stdbool]) -if test "x$ac_cv_header_stdbool_h" = xyes; then - stdbool=' -#include -' -else - if test "x$ac_cv_type__Bool" != xyes; then - stdbool=' -#ifdef __cplusplus -typedef bool _Bool; -#else -typedef unsigned char _Bool; -#endif -' - else - stdbool=' -' - fi - stdbool=$stdbool' -#define bool _Bool -#define false 0 -#define true 1 -#define __bool_true_false_are_defined 1 -' -fi -@end verbatim @end defmac @@ -5299,6 +5334,21 @@ AC_CHECK_HEADERS([bar.h], [], [], ]) @end verbatim +The following variant generates smaller, faster @command{configure} +files if you do not need the full power of @code{AC_CHECK_HEADERS}. + +@defmac AC_CHECK_HEADERS_ONCE (@var{header-file}@dots{}) +@acindex{CHECK_HEADERS_ONCE} +@cvindex HAVE_@var{header} +For each given system header file @var{header-file} in the +blank-separated argument list that exists, define +@code{HAVE_@var{header-file}} (in all capitals). +This is a once-only variant of @code{AC_CHECK_HEADERS}. It generates the +checking code at most once, so that @command{configure} is smaller and +faster; but the checks cannot be conditionalized and are always done once, +early during the @command{configure} run. +@end defmac + @node Declarations @section Declarations @cindex Declaration, checking @@ -5384,6 +5434,18 @@ your files may be used without being configured, or they are used during the configuration. In most cases the traditional approach is enough. @end defmac +@defmac AC_CHECK_DECLS_ONCE (@var{symbols}) +@acindex{CHECK_DECLS_ONCE} +@cvindex HAVE_DECL_@var{symbol} +For each of the @var{symbols} (@emph{comma}-separated list), define +@code{HAVE_DECL_@var{symbol}} (in all capitals) to @samp{1} if +@var{symbol} is declared in the default include files, otherwise to +@samp{0}. This is a once-only variant of @code{AC_CHECK_DECLS}. It +generates the checking code at most once, so that @command{configure} is +smaller and faster; but the checks cannot be conditionalized and are +always done once, early during the @command{configure} run. +@end defmac + @node Structures @section Structures @@ -5405,6 +5467,28 @@ member you need, then you can use the general structure-member macros The following macros check for certain structures or structure members. +@defmac AC_STRUCT_DIRENT_D_INO +@acindex{STRUCT_DIRENT_D_INO} +@cvindex HAVE_STRUCT_DIRENT_D_INO +Perform all the actions of @code{AC_HEADER_DIRENT} (@pxref{Particular +Headers}). Then, if @code{struct dirent} contains a @code{d_ino} +member, define @code{HAVE_STRUCT_DIRENT_D_INO}. + +@code{HAVE_STRUCT_DIRENT_D_INO} indicates only the presence of +@code{d_ino}, not whether its contents are always reliable. +Traditionally, a zero @code{d_ino} indicated a deleted directory entry, +though modern systems hide this detail from the user and never return +zero @code{d_ino} values. +@end defmac + +@defmac AC_STRUCT_DIRENT_D_TYPE +@acindex{STRUCT_DIRENT_D_TYPE} +@cvindex HAVE_STRUCT_DIRENT_D_TYPE +Perform all the actions of @code{AC_HEADER_DIRENT} (@pxref{Particular +Headers}). Then, if @code{struct dirent} contains a @code{d_type} +member, define @code{HAVE_STRUCT_DIRENT_D_TYPE}. +@end defmac + @defmac AC_STRUCT_ST_BLKSIZE @acindex{STRUCT_ST_BLKSIZE} @cvindex HAVE_STRUCT_STAT_ST_BLKSIZE @@ -5528,8 +5612,15 @@ use a general type-check macro. @hdrindex{sys/types.h} @hdrindex{stdlib.h} +@hdrindex{stdint.h} +@hdrindex{inttypes.h} These macros check for particular C types in @file{sys/types.h}, -@file{stdlib.h} and others, if they exist. +@file{stdlib.h}, @file{stdint.h}, @file{inttypes.h} and others, if they +exist. + +The Gnulib @code{stdint} module is an alternate way to define many of +these symbols; it is useful if you prefer your code to assume a +C99-or-better environment. @xref{Gnulib}. @defmac AC_TYPE_GETGROUPS @acindex{TYPE_GETGROUPS} @@ -5538,6 +5629,79 @@ Define @code{GETGROUPS_T} to be whichever of @code{gid_t} or @code{int} is the base type of the array argument to @code{getgroups}. @end defmac +@defmac AC_TYPE_INT8_T +@acindex{TYPE_INT8_T} +@cvindex HAVE_INT8_T +@cvindex int8_t +If @file{stdint.h} or @file{inttypes.h} defines the type @code{int8_t}, +define @code{HAVE_INT8_T}. Otherwise, define @code{int8_t} to a signed +integer type that is exactly 8 bits wide and that uses two's complement +representation, if such a type exists. +@end defmac + +@defmac AC_TYPE_INT16_T +@acindex{TYPE_INT16_T} +@cvindex HAVE_INT16_T +@cvindex int16_t +This is like @code{AC_TYPE_INT8_T}, except for 16-bit integers. +@end defmac + +@defmac AC_TYPE_INT32_T +@acindex{TYPE_INT32_T} +@cvindex HAVE_INT32_T +@cvindex int32_t +This is like @code{AC_TYPE_INT8_T}, except for 32-bit integers. +@end defmac + +@defmac AC_TYPE_INT64_T +@acindex{TYPE_INT64_T} +@cvindex HAVE_INT64_T +@cvindex int64_t +This is like @code{AC_TYPE_INT8_T}, except for 64-bit integers. +@end defmac + +@defmac AC_TYPE_INTMAX_T +@acindex{TYPE_INTMAX_T} +@cvindex HAVE_INTMAX_T +@cvindex intmax_t +If @file{stdint.h} or @file{inttypes.h} defines the type @code{intmax_t}, +define @code{HAVE_INTMAX_T}. Otherwise, define @code{intmax_t} to the +widest signed integer type. +@end defmac + +@defmac AC_TYPE_INTPTR_T +@acindex{TYPE_INTPTR_T} +@cvindex HAVE_INTPTR_T +@cvindex intptr_t +If @file{stdint.h} or @file{inttypes.h} defines the type @code{intptr_t}, +define @code{HAVE_INTPTR_T}. Otherwise, define @code{intptr_t} to a +signed integer type wide enough to hold a pointer, if such a type +exists. +@end defmac + +@defmac AC_TYPE_LONG_DOUBLE +@acindex{TYPE_LONG_DOUBLE} +@cvindex HAVE_LONG_DOUBLE +If the C compiler supports a working @code{long double} type, define +@code{HAVE_LONG_DOUBLE}. The @code{long double} type might have the +same range and precision as @code{double}. +@end defmac + +@defmac AC_TYPE_LONG_DOUBLE_WIDER +@acindex{TYPE_LONG_DOUBLE_WIDER} +@cvindex HAVE_LONG_DOUBLE_WIDER +If the C compiler supports a working @code{long double} type with more +range or precision than the @code{double} type, define +@code{HAVE_LONG_DOUBLE_WIDER}. +@end defmac + +@defmac AC_TYPE_LONG_LONG_INT +@acindex{TYPE_LONG_LONG_INT} +@cvindex HAVE_LONG_LONG_INT +If the C compiler supports a working @code{long long int} type, define +@code{HAVE_LONG_LONG_INT}. +@end defmac + @defmac AC_TYPE_MBSTATE_T @acindex{TYPE_MBSTATE_T} @cvindex mbstate_t @@ -5592,6 +5756,12 @@ hup_handler () Equivalent to @samp{AC_CHECK_TYPE([size_t], [unsigned int])}. @end defmac +@defmac AC_TYPE_SSIZE_T +@acindex{TYPE_SSIZE_T} +@cvindex ssize_t +Equivalent to @samp{AC_CHECK_TYPE([ssize_t], [int])}. +@end defmac + @defmac AC_TYPE_UID_T @acindex{TYPE_UID_T} @cvindex uid_t @@ -5600,6 +5770,63 @@ If @code{uid_t} is not defined, define @code{uid_t} to be @code{int} and @code{gid_t} to be @code{int}. @end defmac +@defmac AC_TYPE_UINT8_T +@acindex{TYPE_UINT8_T} +@cvindex HAVE_UINT8_T +@cvindex uint8_t +If @file{stdint.h} or @file{inttypes.h} defines the type @code{uint8_t}, +define @code{HAVE_UINT8_T}. Otherwise, define @code{uint8_t} to an +unsigned integer type that is exactly 8 bits wide, if such a type +exists. +@end defmac + +@defmac AC_TYPE_UINT16_T +@acindex{TYPE_UINT16_T} +@cvindex HAVE_UINT16_T +@cvindex uint16_t +This is like @code{AC_TYPE_UINT8_T}, except for 16-bit unsigned integers. +@end defmac + +@defmac AC_TYPE_UINT32_T +@acindex{TYPE_UINT32_T} +@cvindex HAVE_UINT32_T +@cvindex uint32_t +This is like @code{AC_TYPE_UINT8_T}, except for 32-bit unsigned integers. +@end defmac + +@defmac AC_TYPE_UINT64_T +@acindex{TYPE_UINT64_T} +@cvindex HAVE_UINT64_T +@cvindex uint64_t +This is like @code{AC_TYPE_UINT8_T}, except for 64-bit unsigned integers. +@end defmac + +@defmac AC_TYPE_UINTMAX_T +@acindex{TYPE_UINTMAX_T} +@cvindex HAVE_UINTMAX_T +@cvindex uintmax_t +If @file{stdint.h} or @file{inttypes.h} defines the type @code{uintmax_t}, +define @code{HAVE_UINTMAX_T}. Otherwise, define @code{uintmax_t} to the +widest unsigned integer type. +@end defmac + +@defmac AC_TYPE_UINTPTR_T +@acindex{TYPE_UINTPTR_T} +@cvindex HAVE_UINTPTR_T +@cvindex uintptr_t +If @file{stdint.h} or @file{inttypes.h} defines the type @code{uintptr_t}, +define @code{HAVE_UINTPTR_T}. Otherwise, define @code{uintptr_t} to an +unsigned integer type wide enough to hold a pointer, if such a type +exists. +@end defmac + +@defmac AC_TYPE_UNSIGNED_LONG_LONG_INT +@acindex{TYPE_UNSIGNED_LONG_LONG_INT} +@cvindex HAVE_UNSIGNED_LONG_LONG_INT +If the C compiler supports a working @code{unsigned long long int} type, +define @code{HAVE_UNSIGNED_LONG_LONG_INT}. +@end defmac + @node Generic Types @subsection Generic Type Checks @@ -6045,14 +6272,6 @@ If the C type @code{char} is unsigned, define @code{__CHAR_UNSIGNED__}, unless the C compiler predefines it. @end defmac -@defmac AC_C_LONG_DOUBLE -@acindex{C_LONG_DOUBLE} -@cvindex HAVE_LONG_DOUBLE -If the C compiler supports a working @code{long double} type with more -range or precision than the @code{double} type, define -@code{HAVE_LONG_DOUBLE}. -@end defmac - @defmac AC_C_STRINGIZE @acindex{C_STRINGIZE} @cvindex HAVE_STRINGIZE @@ -6749,6 +6968,23 @@ If on Minix, define @code{_MINIX} and @code{_POSIX_SOURCE} and define facilities. Should be called before any macros that run the C compiler. @end defmac +@defmac AC_USE_SYSTEM_EXTENSIONS +@acindex{USE_SYSTEM_EXTENSIONS} +@cvindex _ALL_SOURCE +@cvindex _GNU_SOURCE +@cvindex _MINIX +@cvindex _POSIX_1_SOURCE +@cvindex _POSIX_PTHREAD_SEMANTICS +@cvindex _POSIX_SOURCE +@cvindex __EXTENSIONS__ +If possible, enable extensions to Posix on hosts that normally disable +the extensions, typically due to standards-conformance namespace issues. +This may involve defining @code{__EXTENSIONS__} and +@code{_POSIX_PTHREAD_SEMANTICS}, which are macros used by Solaris. This +macro also has the combined effects of @code{AC_GNU_SOURCE}, +@code{AC_AIX}, and @code{AC_MINIX}. +@end defmac + @node Erlang Libraries @section Erlang Libraries @@ -10004,8 +10240,8 @@ by setting @code{AC_SUBST_@var{symbol}}, which is a regular macro name. But since there is a macro named @code{AC_SUBST_FILE}, it was just impossible to @samp{AC_SUBST(FILE)}! In this case, @code{AC_SUBST(@var{symbol})} or @code{_AC_SUBST(@var{symbol})} should -have been used (yes, with the parentheses)@dots{}or better yet, high-level -macros such as @code{AC_EXPAND_ONCE}. +have been used (yes, with the parentheses). +@c or better yet, high-level macros such as @code{m4_expand_once} No Autoconf macro should ever enter the user-variable name space; i.e., except for the variables that are the actual result of running the @@ -15045,6 +15281,17 @@ removed because of limited usefulness This macro is obsolete; it does nothing. @end defmac +@defmac AC_C_LONG_DOUBLE +@acindex{C_LONG_DOUBLE} +@cvindex HAVE_LONG_DOUBLE +If the C compiler supports a working @code{long double} type with more +range or precision than the @code{double} type, define +@code{HAVE_LONG_DOUBLE}. + +You should use @code{AC_TYPE_LONG_DOUBLE} or +@code{AC_TYPE_LONG_DOUBLE_WIDER} instead. @xref{Particular Types}. +@end defmac + @defmac AC_CANONICAL_SYSTEM @acindex{CANONICAL_SYSTEM} Determine the system type and set output variables to the names of the @@ -15429,7 +15676,12 @@ Use the generic macro @samp{AC_CHECK_SIZEOF([long int])} instead. @defmac AC_LONG_DOUBLE @acindex{LONG_DOUBLE} -@code{AC_C_LONG_DOUBLE} +If the C compiler supports a working @code{long double} type with more +range or precision than the @code{double} type, define +@code{HAVE_LONG_DOUBLE}. + +You should use @code{AC_TYPE_LONG_DOUBLE} or +@code{AC_TYPE_LONG_DOUBLE_WIDER} instead. @xref{Particular Types}. @end defmac @defmac AC_LONG_FILE_NAMES diff --git a/lib/autoconf/c.m4 b/lib/autoconf/c.m4 index 526d28eb3..64d6b1079 100644 --- a/lib/autoconf/c.m4 +++ b/lib/autoconf/c.m4 @@ -1,4 +1,4 @@ -# This file is part of Autoconf. -*- Autoconf -*- +# This file is part of Autoconf. -*- Autoconf -*- # Programming languages support. # Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software # Foundation, Inc. @@ -574,8 +574,8 @@ AC_CACHE_CHECK(whether $CC accepts -g, ac_cv_prog_cc_g, [ac_cv_prog_cc_g=yes], [CFLAGS="" _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - [], - [ac_c_werror_flag=$ac_save_c_werror_flag + [], + [ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [ac_cv_prog_cc_g=yes])])]) @@ -800,8 +800,8 @@ AC_CACHE_CHECK(whether $CXX accepts -g, ac_cv_prog_cxx_g, [ac_cv_prog_cxx_g=yes], [CXXFLAGS="" _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - [], - [ac_cxx_werror_flag=$ac_save_cxx_werror_flag + [], + [ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [ac_cv_prog_cxx_g=yes])])]) @@ -931,8 +931,8 @@ AC_CACHE_CHECK(whether $OBJC accepts -g, ac_cv_prog_objc_g, [ac_cv_prog_objc_g=yes], [OBJCFLAGS="" _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], - [], - [ac_objc_werror_flag=$ac_save_objc_werror_flag + [], + [ac_objc_werror_flag=$ac_save_objc_werror_flag OBJCFLAGS="-g" _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [ac_cv_prog_objc_g=yes])])]) @@ -1219,9 +1219,9 @@ AC_DEFUN([AC_PROG_CC_STDC], ;; *) if test "x$ac_cv_prog_cc_stdc" = x; then - AC_MSG_RESULT([none needed]) + AC_MSG_RESULT([none needed]) else - AC_MSG_RESULT([$ac_cv_prog_cc_stdc]) + AC_MSG_RESULT([$ac_cv_prog_cc_stdc]) fi ;; esac @@ -1275,42 +1275,6 @@ fi ])# AC_C_CHAR_UNSIGNED -# AC_C_LONG_DOUBLE -# ---------------- -AC_DEFUN([AC_C_LONG_DOUBLE], -[AC_CACHE_CHECK( - [for working long double with more range or precision than double], - [ac_cv_c_long_double], - [AC_COMPILE_IFELSE( - [AC_LANG_BOOL_COMPILE_TRY( - [[#include - long double const a[] = - { - 0.0L, DBL_MIN, DBL_MAX, DBL_EPSILON, - LDBL_MIN, LDBL_MAX, LDBL_EPSILON - }; - long double - f (long double x) - { - return ((x + (unsigned long int) 10) * (-1 / x) + a[0] - + (x ? f (x) : 'c')); - } - ]], - [[(0 < ((DBL_MAX_EXP < LDBL_MAX_EXP) - + (DBL_MANT_DIG < LDBL_MANT_DIG) - - (LDBL_MAX_EXP < DBL_MAX_EXP) - - (LDBL_MANT_DIG < DBL_MANT_DIG))) - && (int) LDBL_EPSILON == 0 - ]])], - ac_cv_c_long_double=yes, - ac_cv_c_long_double=no)]) -if test $ac_cv_c_long_double = yes; then - AC_DEFINE(HAVE_LONG_DOUBLE, 1, - [Define to 1 if long double works and has more range or precision than double.]) -fi -])# AC_C_LONG_DOUBLE - - # AC_C_BIGENDIAN ([ACTION-IF-TRUE], [ACTION-IF-FALSE], [ACTION-IF-UNKNOWN]) # ------------------------------------------------------------------------- AC_DEFUN([AC_C_BIGENDIAN], diff --git a/lib/autoconf/functions.m4 b/lib/autoconf/functions.m4 index a8fab59c4..0eabb5be9 100644 --- a/lib/autoconf/functions.m4 +++ b/lib/autoconf/functions.m4 @@ -1,4 +1,4 @@ -# This file is part of Autoconf. -*- Autoconf -*- +# This file is part of Autoconf. -*- Autoconf -*- # Checking for functions. # Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software # Foundation, Inc. @@ -75,12 +75,18 @@ AS_VAR_POPDEF([ac_var])dnl ])# AC_CHECK_FUNC +# _AH_CHECK_FUNCS(FUNCTION...) +# ---------------------------- +m4_define([_AH_CHECK_FUNCS], +[m4_foreach_w([AC_Func], [$1], + [AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([AC_Func])), + [Define to 1 if you have the `]m4_defn([AC_Func])[' function.])])]) + + # AC_CHECK_FUNCS(FUNCTION..., [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # --------------------------------------------------------------------- AC_DEFUN([AC_CHECK_FUNCS], -[m4_foreach_w([AC_Func], [$1], - [AH_TEMPLATE(AS_TR_CPP(HAVE_[]AC_Func), - [Define to 1 if you have the `]AC_Func[' function.])])dnl +[_AH_CHECK_FUNCS([$1])dnl for ac_func in $1 do AC_CHECK_FUNC($ac_func, @@ -90,6 +96,26 @@ done ]) +# AC_CHECK_FUNCS_ONCE(FUNCTION...) +# -------------------------------- +AC_DEFUN([AC_CHECK_FUNCS_ONCE], +[ + _AH_CHECK_FUNCS([$1]) + m4_foreach_w([AC_Func], [$1], + [AC_DEFUN([_AC_Func_]m4_defn([AC_Func]), + [m4_divert_text([INIT_PREPARE], + [ac_func_list="$ac_func_list AC_Func"]) + _AC_FUNCS_EXPANSION]) + AC_REQUIRE([_AC_Func_]m4_defn([AC_Func]))]) +]) +m4_define([_AC_FUNCS_EXPANSION], +[ + m4_divert_text([DEFAULTS], [ac_func_list=]) + AC_CHECK_FUNCS([$ac_func_list]) + m4_define([_AC_FUNCS_EXPANSION], []) +]) + + # AC_REPLACE_FUNCS(FUNCTION...) # ----------------------------- AC_DEFUN([AC_REPLACE_FUNCS], @@ -1499,6 +1525,36 @@ fi ]) +# AC_FUNC_STRTOLD +# --------------- +AC_DEFUN([AC_FUNC_STRTOLD], +[ + AC_CACHE_CHECK([whether strtold conforms to C99], + [ac_cv_func_strtold], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[/* On HP-UX before 11.23, strtold returns a struct instead of + long double. Reject implementations like that, by requiring + compatibility with the C99 prototype. */ +# include + static long double (*p) (char const *, char **) = strtold; + static long double + test (char const *nptr, char **endptr) + { + long double r; + r = strtold (nptr, endptr); + return r; + }]], + [[return test ("1.0", NULL) != 1 || p ("1.0", NULL) != 1;]])], + [ac_cv_func_strtold=yes], + [ac_cv_func_strtold=no])]) + if test $ac_cv_func_strtold = yes; then + AC_DEFINE([HAVE_STRTOLD], 1, + [Define to 1 if strtold exists and conforms to C99.]) + fi +])# AC_FUNC_STRTOLD + + # AU::AM_FUNC_STRTOD # ------------------ AU_ALIAS([AM_FUNC_STRTOD], [AC_FUNC_STRTOD]) @@ -1894,7 +1950,7 @@ AU_ALIAS([AC_VPRINTF], [AC_FUNC_VPRINTF]) AN_FUNCTION([wait3], [AC_FUNC_WAIT3]) AC_DEFUN([AC_FUNC_WAIT3], [AC_DIAGNOSE([obsolete], -[$0: `wait3' is being removed from the Open Group standards. +[$0: `wait3' has been removed from POSIX. Remove this `AC_FUNC_WAIT3' and adjust your code to use `waitpid' instead.])dnl AC_CACHE_CHECK([for wait3 that fills in rusage], [ac_cv_func_wait3_rusage], diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4 index d2426a142..158cad508 100644 --- a/lib/autoconf/general.m4 +++ b/lib/autoconf/general.m4 @@ -561,8 +561,8 @@ AC_SUBST([localstatedir], ['${prefix}/var'])dnl AC_SUBST([includedir], ['${prefix}/include'])dnl AC_SUBST([oldincludedir], ['/usr/include'])dnl AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], - ['${datarootdir}/doc/${PACKAGE_TARNAME}'], - ['${datarootdir}/doc/${PACKAGE}'])])dnl + ['${datarootdir}/doc/${PACKAGE_TARNAME}'], + ['${datarootdir}/doc/${PACKAGE}'])])dnl AC_SUBST([infodir], ['${datarootdir}/info'])dnl AC_SUBST([htmldir], ['${docdir}'])dnl AC_SUBST([dvidir], ['${docdir}'])dnl @@ -1644,7 +1644,7 @@ test -d "$ac_macro_dir" || # It announces FILE is required in the auxdir. m4_define([AC_REQUIRE_AUX_FILE], [AS_LITERAL_IF([$1], [], - [AC_FATAL([$0: requires a literal argument])])]) + [AC_FATAL([$0: requires a literal argument])])]) @@ -2490,6 +2490,18 @@ $3], ])# AC_CHECK_DECLS +# AC_CHECK_DECLS_ONCE(SYMBOLS) +# ---------------------------- +# Like AC_CHECK_DECLS(SYMBOLS), but do it at most once. +AC_DEFUN([AC_CHECK_DECLS_ONCE], +[ + m4_foreach([AC_Symbol], [$1], + [AC_DEFUN([_AC_Check_Decl_]m4_defn([AC_Symbol]), + [AC_CHECK_DECLS(m4_defn([AC_Symbol]))]) + AC_REQUIRE([_AC_Check_Decl_]m4_defn([AC_Symbol]))]) +]) + + ## ---------------------------------- ## ## Replacement of library functions. ## @@ -2568,8 +2580,8 @@ AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) ## ----------------------------------- ## -# _AC_COMPUTE_INT_COMPILE(EXPRESSION, VARIABLE, [INCLUDES], [IF-FAILS]) -# --------------------------------------------------------------------- +# _AC_COMPUTE_INT_COMPILE(EXPRESSION, VARIABLE, PROLOGUE, [IF-FAILS]) +# ------------------------------------------------------------------- # Compute the integer EXPRESSION and store the result in the VARIABLE. # Works OK if cross compiling, but assumes twos-complement arithmetic. m4_define([_AC_COMPUTE_INT_COMPILE], @@ -2612,15 +2624,15 @@ esac[]dnl ])# _AC_COMPUTE_INT_COMPILE -# _AC_COMPUTE_INT_RUN(EXPRESSION, VARIABLE, [INCLUDES], [IF-FAILS]) -# ----------------------------------------------------------------- +# _AC_COMPUTE_INT_RUN(EXPRESSION, VARIABLE, PROLOGUE, [IF-FAILS]) +# --------------------------------------------------------------- # Store the evaluation of the integer EXPRESSION in VARIABLE. m4_define([_AC_COMPUTE_INT_RUN], [_AC_RUN_IFELSE([AC_LANG_INT_SAVE([$3], [$1])], [$2=`cat conftest.val`], [$4])]) -# _AC_COMPUTE_INT(EXPRESSION, VARIABLE, INCLUDES, IF-FAILS) +# _AC_COMPUTE_INT(EXPRESSION, VARIABLE, PROLOGUE, IF-FAILS) # --------------------------------------------------------- m4_define([_AC_COMPUTE_INT], [AC_LANG_COMPILER_REQUIRE()dnl diff --git a/lib/autoconf/headers.m4 b/lib/autoconf/headers.m4 index 70ef955c2..d93ef47ef 100644 --- a/lib/autoconf/headers.m4 +++ b/lib/autoconf/headers.m4 @@ -1,7 +1,7 @@ -# This file is part of Autoconf. -*- Autoconf -*- +# This file is part of Autoconf. -*- Autoconf -*- # Checking for headers. # -# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2006 Free Software +# Copyright (C) 1988, 1999, 2000, 2001, 2002, 2003, 2004, 2006 Free Software # Foundation, Inc. # # This program is free software; you can redistribute it and/or modify @@ -65,8 +65,8 @@ # AC_CHECK_HEADER(HEADER-FILE, -# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], -# [INCLUDES]) +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], +# [INCLUDES]) # --------------------------------------------------------- # We are slowly moving to checking headers with the compiler instead # of the preproc, so that we actually learn about the usability of a @@ -93,9 +93,9 @@ AC_DEFUN([AC_CHECK_HEADER], # _AC_CHECK_HEADER_MONGREL(HEADER-FILE, -# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], -# [INCLUDES]) -# -------------------------------------------------------------- +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], +# [INCLUDES = DEFAULT-INCLUDES]) +# ------------------------------------------------------------------ # Check using both the compiler and the preprocessor. If they disagree, # warn, and the preproc wins. # @@ -149,8 +149,8 @@ AS_VAR_POPDEF([ac_Header])dnl # _AC_CHECK_HEADER_NEW(HEADER-FILE, -# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], -# [INCLUDES]) +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], +# [INCLUDES = DEFAULT-INCLUDES]) # -------------------------------------------------------------- # Check the compiler accepts HEADER-FILE. The INCLUDES are defaulted. m4_define([_AC_CHECK_HEADER_NEW], @@ -166,7 +166,7 @@ AS_VAR_POPDEF([ac_Header])dnl # _AC_CHECK_HEADER_OLD(HEADER-FILE, -# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # -------------------------------------------------------------- # Check the preprocessor accepts HEADER-FILE. m4_define([_AC_CHECK_HEADER_OLD], @@ -184,13 +184,13 @@ AS_VAR_POPDEF([ac_Header])dnl # -------------------------------- m4_define([AH_CHECK_HEADERS], [m4_foreach_w([AC_Header], [$1], - [AH_TEMPLATE(AS_TR_CPP(HAVE_[]AC_Header), - [Define to 1 if you have the <]AC_Header[> header file.])])]) + [AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([AC_Header])), + [Define to 1 if you have the <]m4_defn([AC_Header])[> header file.])])]) -# AC_CHECK_HEADERS(HEADER-FILE... -# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], -# [INCLUDES]) +# AC_CHECK_HEADERS(HEADER-FILE..., +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], +# [INCLUDES]) # ---------------------------------------------------------- AC_DEFUN([AC_CHECK_HEADERS], [AH_CHECK_HEADERS([$1])dnl @@ -204,6 +204,26 @@ done ])# AC_CHECK_HEADERS +# AC_CHECK_HEADERS_ONCE(HEADER-FILE...) +# ------------------------------------- +AC_DEFUN([AC_CHECK_HEADERS_ONCE], +[ + AH_CHECK_HEADERS([$1]) + m4_foreach_w([AC_Header], [$1], + [AC_DEFUN([_AC_Header_]m4_quote(m4_translit(AC_Header, [./-], [___])), + [m4_divert_text([INIT_PREPARE], + [ac_header_list="$ac_header_list AC_Header"]) + _AC_HEADERS_EXPANSION]) + AC_REQUIRE([_AC_Header_]m4_quote(m4_translit(AC_Header, [./-], [___])))]) +]) +m4_define([_AC_HEADERS_EXPANSION], +[ + m4_divert_text([DEFAULTS], [ac_header_list=]) + AC_CHECK_HEADERS([$ac_header_list]) + m4_define([_AC_HEADERS_EXPANSION], []) +]) + + ## --------------------- ## @@ -354,9 +374,22 @@ AN_HEADER([wctype.h], [AC_CHECK_HEADERS]) ## 4. Tests for specific headers. ## ## ------------------------------- ## +# AC_HEADER_ASSERT +# ---------------- +# Check whether to enable assertions. +AC_DEFUN([AC_HEADER_ASSERT], +[ + AC_MSG_CHECKING([whether to enable assertions]) + AC_ARG_ENABLE([assert], + [ --disable-assert turn off assertions], + [AC_MSG_RESULT([no]) + AC_DEFINE(NDEBUG, 1, [Define to 1 if assertions should be disabled.])], + [AC_MSG_RESULT(yes)]) +]) + # _AC_CHECK_HEADER_DIRENT(HEADER-FILE, -# [ACTION-IF-FOUND], [ACTION-IF-NOT_FOUND]) +# [ACTION-IF-FOUND], [ACTION-IF-NOT_FOUND]) # ----------------------------------------------------------------- # Like AC_CHECK_HEADER, except also make sure that HEADER-FILE # defines the type `DIR'. dirent.h on NextStep 3.2 doesn't. @@ -526,22 +559,22 @@ AC_DEFUN([AC_HEADER_STDBOOL], [[ #include #ifndef bool -# error bool is not defined + "error: bool is not defined" #endif #ifndef false -# error false is not defined + "error: false is not defined" #endif #if false -# error false is not 0 + "error: false is not 0" #endif #ifndef true -# error true is not defined + "error: true is not defined" #endif #if true != 1 -# error true is not 1 + "error: true is not 1" #endif #ifndef __bool_true_false_are_defined -# error __bool_true_false_are_defined is not defined + "error: __bool_true_false_are_defined is not defined" #endif struct s { _Bool s: 1; _Bool t; } s; @@ -558,10 +591,39 @@ AC_DEFUN([AC_HEADER_STDBOOL], enum { j = false, k = true, l = false * true, m = true * 256 }; _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; + char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; +# if defined __xlc__ || defined __GNUC__ + /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0 + reported by James Lemley on 2005-10-05; see + http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html + This test is not quite right, since xlc is allowed to + reject this program, as the initializer for xlcbug is + not one of the forms that C requires support for. + However, doing the test right would require a run-time + test, and that would make cross-compilation harder. + Let us hope that IBM fixes the xlc bug, and also adds + support for this kind of constant expression. In the + meantime, this test will reject xlc, which is OK, since + our stdbool.h substitute should suffice. We also test + this with GCC, where it should work, to detect more + quickly whether someone messes up the test in the + future. */ + char digs[] = "0123456789"; + int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1); +# endif + /* Catch a bug in an HP-UX C compiler. See + http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html + http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html + */ + _Bool q = true; + _Bool *pq = &q; ]], [[ - return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !j + !k + !l - + !m + !n + !o); + *pq |= q; + *pq |= ! q; + /* Refer to every declared value, to avoid compiler optimizations. */ + return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + + !m + !n + !o + !p + !q + !pq); ]])], [ac_cv_header_stdbool_h=yes], [ac_cv_header_stdbool_h=no])]) diff --git a/lib/autoconf/specific.m4 b/lib/autoconf/specific.m4 index 650c0d603..ed971c3ab 100644 --- a/lib/autoconf/specific.m4 +++ b/lib/autoconf/specific.m4 @@ -1,4 +1,4 @@ -# This file is part of Autoconf. -*- Autoconf -*- +# This file is part of Autoconf. -*- Autoconf -*- # Macros that test for specific, unclassified, features. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -123,9 +123,9 @@ m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES], # _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, -# CACHE-VAR, -# DESCRIPTION, -# [INCLUDES], [FUNCTION-BODY]) +# CACHE-VAR, +# DESCRIPTION, +# PROLOGUE, [FUNCTION-BODY]) # ---------------------------------------------------------- m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE], [AC_CACHE_CHECK([for $1 value needed for large files], [$3], @@ -379,6 +379,41 @@ esac matches *mingw32*])# AC_MINGW32 +# AC_USE_SYSTEM_EXTENSIONS +# ------------------------ +# Enable extensions on systems that normally disable them, +# typically due to standards-conformance issues. +AC_DEFUN([AC_USE_SYSTEM_EXTENSIONS], +[ + AC_BEFORE([$0], [AC_COMPILE_IFELSE]) + AC_BEFORE([$0], [AC_RUN_IFELSE]) + + AC_REQUIRE([AC_GNU_SOURCE]) + AC_REQUIRE([AC_AIX]) + AC_REQUIRE([AC_MINIX]) + + AH_VERBATIM([__EXTENSIONS__], +[/* Enable extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif]) + AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], + [ac_cv_safe_to_define___extensions__], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([ +# define __EXTENSIONS__ 1 + AC_INCLUDES_DEFAULT])], + [ac_cv_safe_to_define___extensions__=yes], + [ac_cv_safe_to_define___extensions__=no])]) + test $ac_cv_safe_to_define___extensions__ = yes && + AC_DEFINE([__EXTENSIONS__]) + AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) +]) + + ## -------------------------- ## diff --git a/lib/autoconf/types.m4 b/lib/autoconf/types.m4 index 9080a887b..6257040da 100644 --- a/lib/autoconf/types.m4 +++ b/lib/autoconf/types.m4 @@ -1,6 +1,8 @@ -# This file is part of Autoconf. -*- Autoconf -*- +# This file is part of Autoconf. -*- Autoconf -*- # Type related macros: existence, sizeof, and structure members. -# Copyright (C) 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc. +# +# Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006 Free Software +# Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -65,8 +67,8 @@ # AC_CHECK_ families: # # AC_CHECK_TYPE(TYPE, -# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], -# [INCLUDES]) +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], +# [INCLUDES = DEFAULT-INCLUDES]) # # In order to provide backward compatibility, the new scheme is # implemented as _AC_CHECK_TYPE_NEW, the old scheme as _AC_CHECK_TYPE_OLD, @@ -162,8 +164,8 @@ AS_VAR_POPDEF([ac_Type])dnl # AC_CHECK_TYPES(TYPES, -# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], -# [INCLUDES = DEFAULT-INCLUDES]) +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], +# [INCLUDES = DEFAULT-INCLUDES]) # -------------------------------------------------------- # TYPES is an m4 list. There are no ambiguities here, we mean the newer # AC_CHECK_TYPE. @@ -217,16 +219,16 @@ m4_define([_AC_CHECK_TYPE_MAYBE_TYPE_P], # AC_CHECK_TYPE(TYPE, DEFAULT) # or # AC_CHECK_TYPE(TYPE, -# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], -# [INCLUDES = DEFAULT-INCLUDES]) +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], +# [INCLUDES = DEFAULT-INCLUDES]) # ------------------------------------------------------- # # Dispatch respectively to _AC_CHECK_TYPE_OLD or _AC_CHECK_TYPE_NEW. -# 1. More than two arguments => NEW +# 1. More than two arguments => NEW # 2. $2 seems to be replacement type => OLD # See _AC_CHECK_TYPE_REPLACEMENT_TYPE_P for `replacement type'. -# 3. $2 seems to be a type => NEW plus a warning -# 4. default => NEW +# 3. $2 seems to be a type => NEW plus a warning +# 4. default => NEW AC_DEFUN([AC_CHECK_TYPE], [m4_if($#, 3, [_AC_CHECK_TYPE_NEW($@)], @@ -304,6 +306,204 @@ AU_DEFUN([AM_TYPE_PTRDIFF_T], [AC_CHECK_TYPES(ptrdiff_t)]) +# AC_TYPE_INTMAX_T +# ----------------- +AC_DEFUN([AC_TYPE_INTMAX_T], +[ + AC_REQUIRE([AC_TYPE_LONG_LONG_INT]) + AC_CHECK_TYPE([intmax_t], + [AC_DEFINE([HAVE_INTMAX_T], 1, + [Define to 1 if the system has the type `intmax_t'.])], + [test $ac_cv_type_long_long_int = yes \ + && ac_type='long long int' \ + || ac_type='long int' + AC_DEFINE_UNQUOTED([intmax_t], [$ac_type], + [Define to the widest signed integer type + if and do not define.])]) +]) + + +# AC_TYPE_UINTMAX_T +# ----------------- +AC_DEFUN([AC_TYPE_UINTMAX_T], +[ + AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) + AC_CHECK_TYPE([uintmax_t], + [AC_DEFINE([HAVE_UINTMAX_T], 1, + [Define to 1 if the system has the type `uintmax_t'.])], + [test $ac_cv_type_unsigned_long_long_int = yes \ + && ac_type='unsigned long long int' \ + || ac_type='unsigned long int' + AC_DEFINE_UNQUOTED([uintmax_t], [$ac_type], + [Define to the widest unsigned integer type + if and do not define.])]) +]) + + +# AC_TYPE_INTPTR_T +# ----------------- +AC_DEFUN([AC_TYPE_INTPTR_T], +[ + AC_CHECK_TYPE([intptr_t], + [AC_DEFINE([HAVE_INTPTR_T], 1, + [Define to 1 if the system has the type `intptr_t'.])], + [for ac_type in 'int' 'long int' 'long long int'; do + AC_COMPILE_IFELSE( + [AC_LANG_BOOL_COMPILE_TRY( + [AC_INCLUDES_DEFAULT], + [[sizeof (void *) <= sizeof ($ac_type)]])], + [AC_DEFINE_UNQUOTED([intptr_t], [$ac_type], + [Define to the type of a signed integer type wide enough to + hold a pointer, if such a type exists, and if the system + does not define it.]) + ac_type=]) + test -z "$ac_type" && break + done]) +]) + + +# AC_TYPE_UINTPTR_T +# ----------------- +AC_DEFUN([AC_TYPE_UINTPTR_T], +[ + AC_CHECK_TYPE([uintptr_t], + [AC_DEFINE([HAVE_UINTPTR_T], 1, + [Define to 1 if the system has the type `uintptr_t'.])], + [for ac_type in 'unsigned int' 'unsigned long int' \ + 'unsigned long long int'; do + AC_COMPILE_IFELSE( + [AC_LANG_BOOL_COMPILE_TRY( + [AC_INCLUDES_DEFAULT], + [[sizeof (void *) <= sizeof ($ac_type)]])], + [AC_DEFINE_UNQUOTED([uintptr_t], [$ac_type], + [Define to the type of an unsigned integer type wide enough to + hold a pointer, if such a type exists, and if the system + does not define it.]) + ac_type=]) + test -z "$ac_type" && break + done]) +]) + + +# AC_TYPE_LONG_DOUBLE +# ------------------- +AC_DEFUN([AC_TYPE_LONG_DOUBLE], +[ + AC_CACHE_CHECK([for long double], [ac_cv_type_long_double], + [if test "$GCC" = yes; then + ac_cv_type_long_double=yes + else + AC_COMPILE_IFELSE( + [AC_LANG_BOOL_COMPILE_TRY( + [[/* The Stardent Vistra knows sizeof (long double), but does + not support it. */ + long double foo = 0.0L;]], + [[/* On Ultrix 4.3 cc, long double is 4 and double is 8. */ + sizeof (double) <= sizeof (long double)]])], + [ac_cv_type_long_double=yes], + [ac_cv_type_long_double=no]) + fi]) + if test $ac_cv_type_long_double = yes; then + AC_DEFINE([HAVE_LONG_DOUBLE], 1, + [Define to 1 if the system has the type `long double'.]) + fi +]) + + +# AC_TYPE_LONG_DOUBLE_WIDER +# ------------------------- +AC_DEFUN([AC_TYPE_LONG_DOUBLE_WIDER], +[ + AC_CACHE_CHECK( + [for long double with more range or precision than double], + [ac_cv_type_long_double_wider], + [AC_COMPILE_IFELSE( + [AC_LANG_BOOL_COMPILE_TRY( + [[#include + long double const a[] = + { + 0.0L, DBL_MIN, DBL_MAX, DBL_EPSILON, + LDBL_MIN, LDBL_MAX, LDBL_EPSILON + }; + long double + f (long double x) + { + return ((x + (unsigned long int) 10) * (-1 / x) + a[0] + + (x ? f (x) : 'c')); + } + ]], + [[(0 < ((DBL_MAX_EXP < LDBL_MAX_EXP) + + (DBL_MANT_DIG < LDBL_MANT_DIG) + - (LDBL_MAX_EXP < DBL_MAX_EXP) + - (LDBL_MANT_DIG < DBL_MANT_DIG))) + && (int) LDBL_EPSILON == 0 + ]])], + ac_cv_type_long_double_wider=yes, + ac_cv_type_long_double_wider=no)]) + if test $ac_cv_type_long_double_wider = yes; then + AC_DEFINE([HAVE_LONG_DOUBLE_WIDER], 1, + [Define to 1 if the type `long double' works and has more range or + precision than `double'.]) + fi +])# AC_TYPE_LONG_DOUBLE_WIDER + + +# AC_C_LONG_DOUBLE +# ---------------- +AU_DEFUN([AC_C_LONG_DOUBLE], + [ + AC_TYPE_LONG_DOUBLE_WIDER + ac_cv_c_long_double=$ac_cv_type_long_double_wider + if test $ac_cv_c_long_double = yes; then + AC_DEFINE([HAVE_LONG_DOUBLE], 1, + [Define to 1 if the type `long double' works and has more range or + precision than `double'.]) + fi + ], + [The macro `AC_C_LONG_DOUBLE' is obsolete. +You should use `AC_TYPE_LONG_DOUBLE' or `AC_TYPE_LONG_DOUBLE_WIDER' instead.] +) + + +# AC_TYPE_LONG_LONG_INT +# --------------------- +AC_DEFUN([AC_TYPE_LONG_LONG_INT], +[ + AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [long long int ll = 1LL; int i = 63;], + [long long int llmax = (long long int) -1; + return ll << i | ll >> i | llmax / ll | llmax % ll;])], + [ac_cv_type_long_long_int=yes], + [ac_cv_type_long_long_int=no])]) + if test $ac_cv_type_long_long_int = yes; then + AC_DEFINE([HAVE_LONG_LONG_INT], 1, + [Define to 1 if the system has the type `long long int'.]) + fi +]) + + +# AC_TYPE_UNSIGNED_LONG_LONG_INT +# ------------------------------ +AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], +[ + AC_CACHE_CHECK([for unsigned long long int], + [ac_cv_type_unsigned_long_long_int], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [unsigned long long int ull = 1ULL; int i = 63;], + [unsigned long long int ullmax = (unsigned long long int) -1; + return ull << i | ull >> i | ullmax / ull | ullmax % ull;])], + [ac_cv_type_unsigned_long_long_int=yes], + [ac_cv_type_unsigned_long_long_int=no])]) + if test $ac_cv_type_unsigned_long_long_int = yes; then + AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], 1, + [Define to 1 if the system has the type `unsigned long long int'.]) + fi +]) + + # AC_TYPE_MBSTATE_T # ----------------- AC_DEFUN([AC_TYPE_MBSTATE_T], @@ -343,6 +543,9 @@ fi AN_IDENTIFIER([size_t], [AC_TYPE_SIZE_T]) AC_DEFUN([AC_TYPE_SIZE_T], [AC_CHECK_TYPE(size_t, unsigned int)]) +AN_IDENTIFIER([ssize_t], [AC_TYPE_SSIZE_T]) +AC_DEFUN([AC_TYPE_SSIZE_T], [AC_CHECK_TYPE(ssize_t, int)]) + AN_IDENTIFIER([pid_t], [AC_TYPE_PID_T]) AC_DEFUN([AC_TYPE_PID_T], [AC_CHECK_TYPE(pid_t, int)]) @@ -352,6 +555,82 @@ AC_DEFUN([AC_TYPE_OFF_T], [AC_CHECK_TYPE(off_t, long int)]) AN_IDENTIFIER([mode_t], [AC_TYPE_MODE_T]) AC_DEFUN([AC_TYPE_MODE_T], [AC_CHECK_TYPE(mode_t, int)]) +AN_IDENTIFIER([int8_t], [AC_TYPE_INT8_T]) +AN_IDENTIFIER([int16_t], [AC_TYPE_INT16_T]) +AN_IDENTIFIER([int32_t], [AC_TYPE_INT32_T]) +AN_IDENTIFIER([int64_t], [AC_TYPE_INT64_T]) +AN_IDENTIFIER([uint8_t], [AC_TYPE_UINT8_T]) +AN_IDENTIFIER([uint16_t], [AC_TYPE_UINT16_T]) +AN_IDENTIFIER([uint32_t], [AC_TYPE_UINT32_T]) +AN_IDENTIFIER([uint64_t], [AC_TYPE_UINT64_T]) +AC_DEFUN([AC_TYPE_INT8_T], [_AC_TYPE_INT(8)]) +AC_DEFUN([AC_TYPE_INT16_T], [_AC_TYPE_INT(16)]) +AC_DEFUN([AC_TYPE_INT32_T], [_AC_TYPE_INT(32)]) +AC_DEFUN([AC_TYPE_INT64_T], [_AC_TYPE_INT(64)]) +AC_DEFUN([AC_TYPE_UINT8_T], [_AC_TYPE_UNSIGNED_INT(8)]) +AC_DEFUN([AC_TYPE_UINT16_T], [_AC_TYPE_UNSIGNED_INT(16)]) +AC_DEFUN([AC_TYPE_UINT32_T], [_AC_TYPE_UNSIGNED_INT(32)]) +AC_DEFUN([AC_TYPE_UINT64_T], [_AC_TYPE_UNSIGNED_INT(64)]) + +# _AC_TYPE_INT(NBITS) +# ------------------- +AC_DEFUN([_AC_TYPE_INT], +[ + AC_CACHE_CHECK([for int$1_t], [ac_cv_c_int$1_t], + [ac_cv_c_int$1_t=no + for ac_type in 'int$1_t' 'int' 'long int' \ + 'long long int' 'short int' 'signed char'; do + AC_COMPILE_IFELSE( + [AC_LANG_BOOL_COMPILE_TRY( + [AC_INCLUDES_DEFAULT], + [[0 < ($ac_type) (((($ac_type) 1 << ($1 - 2)) - 1) * 2 + 1)]])], + [AC_COMPILE_IFELSE( + [AC_LANG_BOOL_COMPILE_TRY( + [AC_INCLUDES_DEFAULT], + [[($ac_type) (((($ac_type) 1 << ($1 - 2)) - 1) * 2 + 1) + < ($ac_type) (((($ac_type) 1 << ($1 - 2)) - 1) * 2 + 2)]])], + [], + [ac_cv_c_int$1_t=$ac_type])]) + test "$ac_cv_c_int$1_t" != no && break + done]) + case $ac_cv_c_int$1_t in #( + no|int$1_t) ;; #( + *) + AC_DEFINE_UNQUOTED([int$1_t], [$ac_cv_c_int$1_t], + [Define to the type of a signed integer type of width exactly $1 bits + if such a type exists and the standard includes do not define it.]);; + esac +])# _AC_TYPE_INT + +# _AC_TYPE_UNSIGNED_INT(NBITS) +# ---------------------------- +AC_DEFUN([_AC_TYPE_UNSIGNED_INT], +[ + AC_CACHE_CHECK([for uint$1_t], [ac_cv_c_uint$1_t], + [ac_cv_c_uint$1_t=no + for ac_type in 'uint$1_t' 'unsigned int' 'unsigned long int' \ + 'unsigned long long int' 'unsigned short int' 'unsigned char'; do + AC_COMPILE_IFELSE( + [AC_LANG_BOOL_COMPILE_TRY( + [AC_INCLUDES_DEFAULT], + [[($ac_type) -1 >> ($1 - 1) == 1]])], + [ac_cv_c_uint$1_t=$ac_type]) + test "$ac_cv_c_uint$1_t" != no && break + done]) + case $ac_cv_c_uint$1_t in #( + no|uint$1_t) ;; #( + *) + m4_if([$1], 32, + [AC_DEFINE([_UINT$1_T], 1, + [Define for Solaris 2.5.1 so the uint$1_t typedef from + , , or is not used. + If the typedef was allowed, the #define below would cause a + syntax error.])]) + AC_DEFINE_UNQUOTED([uint$1_t], [$ac_cv_c_uint$1_t], + [Define to the type of an unsigned integer type of width exactly $1 bits + if such a type exists and the standard includes do not define it.]);; + esac +])# _AC_TYPE_UNSIGNED_INT # AC_TYPE_SIGNAL # -------------- @@ -469,8 +748,8 @@ you adjust the code.]) # ---------------- # # AC_CHECK_MEMBER(AGGREGATE.MEMBER, -# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], -# [INCLUDES]) +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND], +# [INCLUDES = DEFAULT-INCLUDES]) # --------------------------------------------------------- # AGGREGATE.MEMBER is for instance `struct passwd.pw_gecos', shell # variables are not a valid argument. @@ -503,8 +782,8 @@ AS_VAR_POPDEF([ac_Member])dnl # AC_CHECK_MEMBERS([AGGREGATE.MEMBER, ...], -# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND] -# [INCLUDES]) +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND] +# [INCLUDES = DEFAULT-INCLUDES]) # --------------------------------------------------------- # The first argument is an m4 list. AC_DEFUN([AC_CHECK_MEMBERS], @@ -530,6 +809,40 @@ AN_IDENTIFIER([st_rdev], [AC_CHECK_MEMBERS([struct stat.st_rdev])]) # Alphabetic order, please. +# _AC_STRUCT_DIRENT(MEMBER) +# ------------------------- +AC_DEFUN([_AC_STRUCT_DIRENT], +[ + AC_REQUIRE([AC_HEADER_DIRENT]) + AC_CHECK_MEMBERS([struct dirent.$1], [], [], + [[ +#include +#ifdef HAVE_DIRENT_H +# include +#else +# define dirent direct +# ifdef HAVE_SYS_NDIR_H +# include +# endif +# ifdef HAVE_SYS_DIR_H +# include +# endif +# ifdef HAVE_NDIR_H +# include +# endif +#endif + ]]) +]) + +# AC_STRUCT_DIRENT_D_INO +# ----------------------------------- +AC_DEFUN([AC_STRUCT_DIRENT_D_INO], [_AC_STRUCT_DIRENT([d_ino])]) + +# AC_STRUCT_DIRENT_D_TYPE +# ------------------------------------ +AC_DEFUN([AC_STRUCT_DIRENT_D_TYPE], [_AC_STRUCT_DIRENT([d_type])]) + + # AC_STRUCT_ST_BLKSIZE # -------------------- AU_DEFUN([AC_STRUCT_ST_BLKSIZE], @@ -553,7 +866,7 @@ the `AC_DEFINE' when you adjust the code.])# AC_STRUCT_ST_BLKSIZE # # AC_OBSOLETE([$0], [; replace it with # AC_CHECK_MEMBERS([struct stat.st_blocks], -# [AC_LIBOBJ([fileblocks])]) +# [AC_LIBOBJ([fileblocks])]) # Please note that it will define `HAVE_STRUCT_STAT_ST_BLOCKS', # and not `HAVE_ST_BLOCKS'.])dnl #