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

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

5.6.1 Portability of Headers
----------------------------

This section documents some collected knowledge about common headers,
and the problems they cause.  By definition, this list always requires
additions.  A much more complete list is maintained by the Gnulib
project (*note Gnulib::), covering *note Posix Headers: (gnulib)Header
File Substitutes. and *note Glibc Headers: (gnulib)Glibc Header File
Substitutes.  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 INCLUDES argument to
‘AC_CHECK_HEADER’ or ‘AC_CHECK_HEADERS’, or the check will fail
spuriously.  ‘AC_INCLUDES_DEFAULT’ (*note Default Includes::) arranges
to include a number of common requirements and should normally come
first in your INCLUDES.  For example, ‘net/if.h’ may require
‘sys/types.h’, ‘sys/socket.h’, or both, and ‘AC_INCLUDES_DEFAULT’
handles ‘sys/types.h’ but not ‘sys/socket.h’, so you should check for it
like this:

     AC_CHECK_HEADERS([sys/socket.h])
     AC_CHECK_HEADERS([net/if.h], [], [],
     [AC_INCLUDES_DEFAULT[
     #ifdef HAVE_SYS_SOCKET_H
     # include 
     #endif
     ]])

   Note that the example mixes single quoting (for‘AC_INCLUDES_DEFAULT’,
so that it gets expanded) and double quoting (to ensure that each
preprocessor ‘#’ gets treated as a literal string rather than a
comment).

‘limits.h’
     In C99 and later, ‘limits.h’ defines ‘LLONG_MIN’, ‘LLONG_MAX’, and
     ‘ULLONG_MAX’, but many almost-C99 environments (e.g., default GCC
     4.0.2 + glibc 2.4) do not define them.

‘memory.h’
     This header file is obsolete; use ‘string.h’ instead.

‘strings.h’
     On some systems, this is the only header that declares
     ‘strcasecmp’, ‘strncasecmp’, and ‘ffs’.

     This header may or may not include ‘string.h’ for you.  However, on
     all recent systems it is safe to include both ‘string.h’ and
     ‘strings.h’, in either order, in the same source file.

‘inttypes.h’ vs. ‘stdint.h’
     C99 specifies that ‘inttypes.h’ includes ‘stdint.h’, so there's no
     need to include ‘stdint.h’ separately in a standard environment.
     However, some implementations have ‘stdint.h’ but not ‘inttypes.h’
     (e.g.  MSVC 2012).  Therefore, it is necessary to check for each
     and include each only if available.

‘linux/irda.h’
     This header may require ‘linux/types.h’ and/or ‘sys/socket.h’.

‘linux/random.h’
     This header may require ‘linux/types.h’.

‘net/if.h’
     This header may require ‘sys/types.h’ and/or ‘sys/socket.h’.

‘netinet/if_ether.h’
     This header may require some combination of ‘sys/types.h’,
     ‘sys/socket.h’, ‘netinet/in.h’, and ‘net/if.h’.

‘sys/mount.h’
     This header may require ‘sys/params.h’.

‘sys/ptem.h’
     This header may require ‘sys/stream.h’.

‘sys/socket.h’
     This header may require ‘sys/types.h’.

‘sys/ucred.h’
     This header may require ‘sys/types.h’.

‘X11/extensions/scrnsaver.h’
     Using XFree86, this header requires ‘X11/Xlib.h’, which is probably
     so required that you might not even consider looking for it.

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