Particular Function Checks
--------------------------
These macros check for particular C functions--whether they exist,
and in some cases how they respond when given certain arguments.
- Macro: AC_FUNC_ALLOCA
Check how to get `alloca'. Tries to get a builtin version by
checking for `alloca.h' or the predefined C preprocessor macros
`__GNUC__' and `_AIX'. If this macro finds `alloca.h', it defines
`HAVE_ALLOCA_H'.
If those attempts fail, it looks for the function in the standard C
library. If any of those methods succeed, it defines
`HAVE_ALLOCA'. Otherwise, it sets the output variable `ALLOCA' to
`alloca.o' and defines `C_ALLOCA' (so programs can periodically
call `alloca(0)' to garbage collect). This variable is separate
from `LIBOBJS' so multiple programs can share the value of
`ALLOCA' without needing to create an actual library, in case only
some of them use the code in `LIBOBJS'.
This macro does not try to get `alloca' from the System V R3
`libPW' or the System V R4 `libucb' because those libraries
contain some incompatible functions that cause trouble. Some
versions do not even contain `alloca' or contain a buggy version.
If you still want to use their `alloca', use `ar' to extract
`alloca.o' from them instead of compiling `alloca.c'.
Source files that use `alloca' should start with a piece of code
like the following, to declare it properly. In some versions of
AIX, the declaration of `alloca' must precede everything else
except for comments and preprocessor directives. The `#pragma'
directive is indented so that pre-ANSI C compilers will ignore it,
rather than choke on it.
/* AIX requires this to be the first thing in the file. */
#ifndef __GNUC__
# if HAVE_ALLOCA_H
# include <alloca.h>
# else
# ifdef _AIX
#pragma alloca
# else
# ifndef alloca /* predefined by HP cc +Olibcalls */
char *alloca ();
# endif
# endif
# endif
#endif
- Macro: AC_FUNC_CHOWN
If the `chown' function is available and works (in particular, it
should accept `-1' for `uid' and `gid'), define `HAVE_CHOWN'.
- Macro: AC_FUNC_CLOSEDIR_VOID
If the `closedir' function does not return a meaningful value,
define `CLOSEDIR_VOID'. Otherwise, callers ought to check its
return value for an error indicator.
- Macro: AC_FUNC_ERROR_AT_LINE
If the `error_at_line' function is not found, require an
`AC_LIBOBJ' replacement of `error'.
- Macro: AC_FUNC_FNMATCH
If the `fnmatch' function is available and works (unlike the one on
Solaris 2.4), define `HAVE_FNMATCH'.
- Macro: AC_FUNC_FORK
This macro checks for the `fork' and `vfork' functions. If a
working `fork' is found, define `HAVE_WORKING_FORK'. This macro
checks whether `fork' is just a stub by trying to run it.
If `vfork.h' is found, define `HAVE_VFORK_H'. If a working `vfork'
is found, define `HAVE_WORKING_VFORK'. Otherwise, define `vfork'
to be `fork' for backward compatibility with previous versions of
`autoconf'. This macro checks for several known errors in
implementations of `vfork' and considers the system to not have a
working `vfork' if it detects any of them. It is not considered to
be an implementation error if a child's invocation of `signal'
modifies the parent's signal handler, since child processes rarely
change their signal handlers.
Since this macro defines `vfork' only for backward compatibility
with previous versions of `autoconf' you're encouraged to define it
yourself in new code:
#if !HAVE_WORKING_VFORK
# define vfork fork
#endif
- Macro: AC_FUNC_FSEEKO
If the `fseeko' function is available, define `HAVE_FSEEKO'.
Define `_LARGEFILE_SOURCE' if necessary.
- Macro: AC_FUNC_GETGROUPS
If the `getgroups' function is available and works (unlike on
Ultrix 4.3, where `getgroups (0, 0)' always fails), define
`HAVE_GETGROUPS'. Set `GETGROUPS_LIBS' to any libraries needed to
get that function. This macro runs `AC_TYPE_GETGROUPS'.
- Macro: AC_FUNC_GETLOADAVG
Check how to get the system load averages. If the system has the
`getloadavg' function, define `HAVE_GETLOADAVG', and set
`GETLOADAVG_LIBS' to any libraries needed to get that function.
Also add `GETLOADAVG_LIBS' to `LIBS'.
Otherwise, require an `AC_LIBOBJ' replacement (`getloadavg.c') of
`getloadavg', and possibly define several other C preprocessor
macros and output variables:
1. Define `C_GETLOADAVG'.
2. Define `SVR4', `DGUX', `UMAX', or `UMAX4_3' if on those
systems.
3. If `nlist.h' is found, define `NLIST_STRUCT'.
4. If `struct nlist' has an `n_un.n_name' member, define
`HAVE_STRUCT_NLIST_N_UN_N_NAME'. The obsolete symbol
`NLIST_NAME_UNION' is still defined, but do not depend upon
it.
5. Programs may need to be installed setgid (or setuid) for
`getloadavg' to work. In this case, define
`GETLOADAVG_PRIVILEGED', set the output variable `NEED_SETGID'
to `true' (and otherwise to `false'), and set `KMEM_GROUP' to
the name of the group that should own the installed program.
- Macro: AC_FUNC_GETMNTENT
Check for `getmntent' in the `sun', `seq', and `gen' libraries,
for Irix 4, PTX, and Unixware, respectively. Then, if `getmntent'
is available, define `HAVE_GETMNTENT'.
- Macro: AC_FUNC_GETPGRP
Define `GETPGRP_VOID' if it is an error to pass 0 to `getpgrp';
this is the POSIX.1 behavior. On older BSD systems, you must pass
0 to `getpgrp', as it takes an argument and behaves like POSIX.1's
`getpgid'.
#if GETPGRP_VOID
pid = getpgrp ();
#else
pid = getpgrp (0);
#endif
This macro does not check whether `getpgrp' exists at all; if you
need to work in that situation, first call `AC_CHECK_FUNC' for
`getpgrp'.
- Macro: AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
If `link' is a symbolic link, then `lstat' should treat `link/'
the same as `link/.'. However, many older `lstat' implementations
incorrectly ignore trailing slashes.
It is safe to assume that if `lstat' incorrectly ignores trailing
slashes, then other symbolic-link-aware functions like `unlink'
and `unlink' also incorrectly ignore trailing slashes.
If `lstat' behaves properly, define
`LSTAT_FOLLOWS_SLASHED_SYMLINK', otherwise require an `AC_LIBOBJ'
replacement of `lstat'.
- Macro: AC_FUNC_MALLOC
If the `malloc' works correctly (`malloc (0)' returns a valid
pointer), define `HAVE_MALLOC'.
- Macro: AC_FUNC_MEMCMP
If the `memcmp' function is not available, or does not work on
8-bit data (like the one on SunOS 4.1.3), or fails when comparing
16 bytes or more and with at least one buffer not starting on a
4-byte boundary (such as the one on NeXT x86 OpenStep), require an
`AC_LIBOBJ' replacement for `memcmp'.
- Macro: AC_FUNC_MKTIME
If the `mktime' function is not available, or does not work
correctly, require an `AC_LIBOBJ' replacement for `mktime'.
- Macro: AC_FUNC_MMAP
If the `mmap' function exists and works correctly, define
`HAVE_MMAP'. Only checks private fixed mapping of already-mapped
memory.
- Macro: AC_FUNC_OBSTACK
If the obstacks are found, define `HAVE_OBSTACK', else require an
`AC_LIBOBJ' replacement for `obstack'.
- Macro: AC_FUNC_SELECT_ARGTYPES
Determines the correct type to be passed for each of the `select'
function's arguments, and defines those types in
`SELECT_TYPE_ARG1', `SELECT_TYPE_ARG234', and `SELECT_TYPE_ARG5'
respectively. `SELECT_TYPE_ARG1' defaults to `int',
`SELECT_TYPE_ARG234' defaults to `int *', and `SELECT_TYPE_ARG5'
defaults to `struct timeval *'.
- Macro: AC_FUNC_SETPGRP
If `setpgrp' takes no argument (the POSIX.1 version), define
`SETPGRP_VOID'. Otherwise, it is the BSD version, which takes two
process IDs as arguments. This macro does not check whether
`setpgrp' exists at all; if you need to work in that situation,
first call `AC_CHECK_FUNC' for `setpgrp'.
- Macro: AC_FUNC_STAT
- Macro: AC_FUNC_LSTAT
Determine whether `stat' or `lstat' have the bug that it succeeds
when given the zero-length file name argument. The `stat' and
`lstat' from SunOS 4.1.4 and the Hurd (as of 1998-11-01) do this.
If it does, then define `HAVE_STAT_EMPTY_STRING_BUG' (or
`HAVE_LSTAT_EMPTY_STRING_BUG') and ask for an `AC_LIBOBJ'
replacement of it.
- Macro: AC_FUNC_SETVBUF_REVERSED
If `setvbuf' takes the buffering type as its second argument and
the buffer pointer as the third, instead of the other way around,
define `SETVBUF_REVERSED'.
- Macro: AC_FUNC_STRCOLL
If the `strcoll' function exists and works correctly, define
`HAVE_STRCOLL'. This does a bit more than
`AC_CHECK_FUNCS(strcoll)', because some systems have incorrect
definitions of `strcoll' that should not be used.
- Macro: AC_FUNC_STRTOD
If the `strtod' function does not exist or doesn't work correctly,
ask for an `AC_LIBOBJ' replacement of `strtod'. In this case,
because `strtod.c' is likely to need `pow', set the output
variable `POW_LIB' to the extra library needed.
- Macro: AC_FUNC_STRERROR_R
If `strerror_r' is available, define `HAVE_STRERROR_R', and if it
is declared, define `HAVE_DECL_STRERROR_R'. If it returns a `char
*' message, define `STRERROR_R_CHAR_P'; otherwise it returns an
`int' error number. The Thread-Safe Functions option of
POSIX-200X requires `strerror_r' to return `int', but many systems
(including, for example, version 2.2.4 of the GNU C Library)
return a `char *' value that is not necessarily equal to the
buffer argument.
- Macro: AC_FUNC_STRFTIME
Check for `strftime' in the `intl' library, for SCO UNIX. Then,
if `strftime' is available, define `HAVE_STRFTIME'.
- Macro: AC_FUNC_STRNLEN
Check for a working `strnlen', and ask for its replacement. Some
architectures are know to provide broken versions of `strnlen',
such as AIX 4.3.
- Macro: AC_FUNC_UTIME_NULL
If `utime(FILE, NULL)' sets FILE's timestamp to the present,
define `HAVE_UTIME_NULL'.
- Macro: AC_FUNC_VPRINTF
If `vprintf' is found, define `HAVE_VPRINTF'. Otherwise, if
`_doprnt' is found, define `HAVE_DOPRNT'. (If `vprintf' is
available, you may assume that `vfprintf' and `vsprintf' are also
available.)