manpagez: man pages & more
info autoconf
Home | html | info | man

File: autoconf.info,  Node: Particular Headers,  Next: Generic Headers,  Prev: Header Portability,  Up: Header Files

5.6.2 Particular Header Checks
------------------------------

These macros check for particular system header files--whether they
exist, and in some cases whether they declare certain symbols.

 -- Macro: AC_CHECK_HEADER_STDBOOL
     Check whether ‘stdbool.h’ exists and conforms to C99 or later, and
     cache the result in the ‘ac_cv_header_stdbool_h’ variable.  If the
     type ‘_Bool’ is defined, define ‘HAVE__BOOL’ to 1.

     This macro is obsolescent, as all current C compilers have
     ‘stdbool.h’, a header that is itself obsolescent as of C23.

     This macro is intended for use by Gnulib (*note Gnulib::) and other
     packages that supply a substitute ‘stdbool.h’ on platforms lacking
     a conforming one.  The ‘AC_HEADER_STDBOOL’ macro is better for code
     that explicitly checks for ‘stdbool.h’.

 -- Macro: AC_HEADER_ASSERT
     Check whether to enable assertions in the style of ‘assert.h’.
     Assertions are enabled by default, but the user can override this
     by invoking ‘configure’ with the ‘--disable-assert’ option.

 -- Macro: AC_HEADER_DIRENT
     Check for the following header files.  For the first one that is
     found and defines ‘DIR’, define the listed C preprocessor macro:

     ‘dirent.h’     ‘HAVE_DIRENT_H’
     ‘sys/ndir.h’   ‘HAVE_SYS_NDIR_H’
     ‘sys/dir.h’    ‘HAVE_SYS_DIR_H’
     ‘ndir.h’       ‘HAVE_NDIR_H’

     The directory-library declarations in your source code should look
     something like the following:

          #include 
          #ifdef HAVE_DIRENT_H
          # include 
          # define NAMLEN(dirent) strlen ((dirent)->d_name)
          #else
          # define dirent direct
          # define NAMLEN(dirent) ((dirent)->d_namlen)
          # ifdef HAVE_SYS_NDIR_H
          #  include 
          # endif
          # ifdef HAVE_SYS_DIR_H
          #  include 
          # endif
          # ifdef HAVE_NDIR_H
          #  include 
          # endif
          #endif

     Using the above declarations, the program would declare variables
     to be of type ‘struct dirent’, not ‘struct direct’, and would
     access the length of a directory entry name by passing a pointer to
     a ‘struct dirent’ to the ‘NAMLEN’ macro.

     This macro also checks for the SCO Xenix ‘dir’ and ‘x’ libraries.

     This macro is obsolescent, as all current systems with directory
     libraries have ‘’.  New programs need not use this macro.

     Also see ‘AC_STRUCT_DIRENT_D_INO’ and ‘AC_STRUCT_DIRENT_D_TYPE’
     (*note Particular Structures::).

 -- Macro: AC_HEADER_MAJOR
     Detect the headers required to use ‘makedev’, ‘major’, and ‘minor’.
     These functions may be defined by ‘sys/mkdev.h’, ‘sys/sysmacros.h’,
     or ‘sys/types.h’.

     ‘AC_HEADER_MAJOR’ defines ‘MAJOR_IN_MKDEV’ if they are in
     ‘sys/mkdev.h’, or ‘MAJOR_IN_SYSMACROS’ if they are in
     ‘sys/sysmacros.h’.  If neither macro is defined, they are either in
     ‘sys/types.h’ or unavailable.

     To properly use these functions, your code should contain something
     like:

     #include 
     #ifdef MAJOR_IN_MKDEV
     # include 
     #elif defined MAJOR_IN_SYSMACROS
     # include 
     #endif

     Note: Configure scripts built with Autoconf 2.69 or earlier will
     not detect a problem if ‘sys/types.h’ contains definitions of
     ‘major’, ‘minor’, and/or ‘makedev’ that trigger compiler warnings
     upon use.  This is known to occur with GNU libc 2.25, where those
     definitions are being deprecated to reduce namespace pollution.  If
     it is not practical to use Autoconf 2.70 to regenerate the
     configure script of affected software, you can work around the
     problem by setting ‘ac_cv_header_sys_types_h_makedev=no’, as an
     argument to ‘configure’ or as part of a ‘config.site’ site default
     file (*note Site Defaults::).

 -- Macro: AC_HEADER_RESOLV
     Checks for header ‘resolv.h’, checking for prerequisites first.  To
     properly use ‘resolv.h’, your code should contain something like
     the following:

     #ifdef HAVE_SYS_TYPES_H
     #  include 
     #endif
     #ifdef HAVE_NETINET_IN_H
     #  include    /* inet_ functions / structs */
     #endif
     #ifdef HAVE_ARPA_NAMESER_H
     #  include  /* DNS HEADER struct */
     #endif
     #ifdef HAVE_NETDB_H
     #  include 
     #endif
     #include 

 -- Macro: AC_HEADER_STAT
     If the macros ‘S_ISDIR’, ‘S_ISREG’, etc. 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.

     This macro is obsolescent, as no current systems have the bug.  New
     programs need not use this macro.

 -- Macro: AC_HEADER_STDBOOL
     If ‘stdbool.h’ exists and conforms to C99 or later, define
     ‘HAVE_STDBOOL_H’ to 1; if the type ‘_Bool’ is defined, define
     ‘HAVE__BOOL’ to 1.

     This macro is obsolescent, as all current C compilers have
     ‘stdbool.h’, a header that is itself obsolescent as of C23.
     Nowadays programs that need ‘bool’, ‘true’ and ‘false’ can include
     ‘stdbool.h’ unconditionally, without using ‘AC_HEADER_STDBOOL’, and
     if such a program needs to be portable only to C23 or later it need
     not even include ‘stdbool.h’.

     This macro caches its result in the ‘ac_cv_header_stdbool_h’
     variable.

     This macro differs from ‘AC_CHECK_HEADER_STDBOOL’ only in that it
     defines ‘HAVE_STDBOOL_H’ whereas ‘AC_CHECK_HEADER_STDBOOL’ does
     not.

 -- Macro: AC_HEADER_STDC

     This macro is obsolescent.  Its sole effect is to make sure that
     all the headers that are included by ‘AC_INCLUDES_DEFAULT’ (*note
     Default Includes::), but not part of C89, have been checked for.

     All hosted environments that are still of interest for portable
     code provide all of the headers specified in C89 (as amended in
     1995).

 -- Macro: AC_HEADER_SYS_WAIT
     If ‘sys/wait.h’ exists and is compatible with Posix, 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 compatible,
     then instead of including it, define the Posix macros with their
     usual interpretations.  Here is an example:

          #include 
          #ifdef HAVE_SYS_WAIT_H
          # include 
          #endif
          #ifndef WEXITSTATUS
          # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
          #endif
          #ifndef WIFEXITED
          # define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
          #endif

     This macro caches its result in the ‘ac_cv_header_sys_wait_h’
     variable.

     This macro is obsolescent, as current systems are compatible with
     Posix.  New programs need not use this macro.

   ‘_POSIX_VERSION’ is defined when ‘unistd.h’ is included on Posix
systems.  If there is no ‘unistd.h’, it is definitely not a Posix
system.  However, some non-Posix systems do have ‘unistd.h’.

   The way to check whether the system supports Posix is:

     #ifdef HAVE_UNISTD_H
     # include 
     # include 
     #endif

     #ifdef _POSIX_VERSION
     /* Code for Posix systems.  */
     #endif

 -- Macro: AC_HEADER_TIOCGWINSZ
     If the use of ‘TIOCGWINSZ’ requires ‘’, then define
     ‘GWINSZ_IN_SYS_IOCTL’.  Otherwise ‘TIOCGWINSZ’ can be found in
     ‘’.

     Use:

          #ifdef HAVE_TERMIOS_H
          # include 
          #endif

          #ifdef GWINSZ_IN_SYS_IOCTL
          # include 
          #endif

© manpagez.com 2000-2025
Individual documents may contain additional copyright information.