Node:Particular Headers, Next:Generic Headers, Up:Header Files
These macros check for particular system header files--whether they exist, and in some cases whether they declare certain symbols.
AC_HEADER_DIRENT | Macro |
Check for the following header files. For the first one that is
found and defines DIR , define the listed C preprocessor macro:
The directory-library declarations in your source code should look
something like the following:
#if HAVE_DIRENT_H # include <dirent.h> # define NAMLEN(dirent) strlen((dirent)->d_name) #else # define dirent direct # define NAMLEN(dirent) (dirent)->d_namlen # if HAVE_SYS_NDIR_H # include <sys/ndir.h> # endif # if HAVE_SYS_DIR_H # include <sys/dir.h> # endif # if HAVE_NDIR_H # include <ndir.h> # endif #endif Using the above declarations, the program would declare variables to be
of type This macro also checks for the SCO Xenix |
AC_HEADER_MAJOR | Macro |
If sys/types.h does not define major , minor , and
makedev , but sys/mkdev.h does, define
MAJOR_IN_MKDEV ; otherwise, if sys/sysmacros.h does, define
MAJOR_IN_SYSMACROS .
|
AC_HEADER_STAT | Macro |
If the macros S_ISDIR , S_ISREG et al. defined in
sys/stat.h do not work properly (returning false positives),
define STAT_MACROS_BROKEN . This is the case on Tektronix UTekV,
Amdahl UTS and Motorola System V/88.
|
AC_HEADER_STDC | Macro |
Define STDC_HEADERS if the system has ANSI C header files.
Specifically, this macro checks for stdlib.h , stdarg.h ,
string.h , and float.h ; if the system has those, it
probably has the rest of the ANSI C header files. This macro also
checks whether string.h declares memchr (and thus
presumably the other mem functions), whether stdlib.h
declare free (and thus presumably malloc and other related
functions), and whether the ctype.h macros work on characters
with the high bit set, as ANSI C requires.
Use On systems without ANSI C 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 systems contain
a mix of functions ANSI and BSD; some are mostly ANSI but
lack AC_HEADER_STDC AC_CHECK_FUNCS(strchr memcpy) then, in your code, you can put declarations like this:
#if STDC_HEADERS # include <string.h> #else # if !HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *strchr (), *strrchr (); # if !HAVE_MEMCPY # define memcpy(d, s, n) bcopy ((s), (d), (n)) # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif If you use a function like |
AC_HEADER_SYS_WAIT | Macro |
If sys/wait.h exists and is compatible with POSIX.1, define
HAVE_SYS_WAIT_H . Incompatibility can occur if sys/wait.h
does not exist, or if it uses the old BSD union wait instead
of int to store a status value. If sys/wait.h is not
POSIX.1 compatible, then instead of including it, define the
POSIX.1 macros with their usual interpretations. Here is an
example:
#include <sys/types.h> #if HAVE_SYS_WAIT_H # include <sys/wait.h> #endif #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif |
_POSIX_VERSION
is defined when unistd.h
is included on
POSIX.1 systems. If there is no unistd.h
, it is definitely
not a POSIX.1 system. However, some non-POSIX.1 systems do
have unistd.h
.
The way to check if the system supports POSIX.1 is:
#if HAVE_UNISTD_H # include <sys/types.h> # include <unistd.h> #endif #ifdef _POSIX_VERSION /* Code for POSIX.1 systems. */ #endif
AC_HEADER_TIME | Macro |
If a program may include both time.h and sys/time.h ,
define TIME_WITH_SYS_TIME . On some older systems,
sys/time.h includes time.h , but time.h is not
protected against multiple inclusion, so programs should not explicitly
include both files. This macro is useful in programs that use, for
example, struct timeval or struct timezone as well as
struct tm . It is best used in conjunction with
HAVE_SYS_TIME_H , which can be checked for using
AC_CHECK_HEADERS(sys/time.h) .
#if TIME_WITH_SYS_TIME # include <sys/time.h> # include <time.h> #else # if HAVE_SYS_TIME_H # include <sys/time.h> # else # include <time.h> # endif #endif |
AC_HEADER_TIOCGWINSZ | Macro |
If the use of TIOCGWINSZ requires <sys/ioctl.h> , then
define GWINSZ_IN_SYS_IOCTL . Otherwise TIOCGWINSZ can be
found in <termios.h> .
Use:
#if HAVE_TERMIOS_H # include <termios.h> #endif #if GWINSZ_IN_SYS_IOCTL # include <sys/ioctl.h> #endif |