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

File: autoconf.info,  Node: Present But Cannot Be Compiled,  Next: Expanded Before Required,  Prev: Autom4te Cache,  Up: FAQ

20.7 Header Present But Cannot Be Compiled
==========================================

The most important guideline to bear in mind when checking for features
is to mimic as much as possible the intended use.  Unfortunately, old
versions of ‘AC_CHECK_HEADER’ and ‘AC_CHECK_HEADERS’ failed to follow
this idea, and called the preprocessor, instead of the compiler, to
check for headers.  As a result, incompatibilities between headers went
unnoticed during configuration, and maintainers finally had to deal with
this issue elsewhere.

   The transition began with Autoconf 2.56.  As of Autoconf 2.64 both
checks are performed, and ‘configure’ complains loudly if the compiler
and the preprocessor do not agree.  However, only the compiler result is
considered.  As of Autoconf 2.70, only the compiler check is performed.

   Consider the following example:

     $ cat number.h
     typedef int number;
     $ cat pi.h
     const number pi = 3;
     $ cat configure.ac
     AC_INIT([Example], [1.0], [bug-example@example.org])
     AC_CHECK_HEADERS([pi.h])
     $ autoconf -Wall
     $ ./configure CPPFLAGS='-I.'
     checking for gcc... gcc
     checking whether the C compiler works... yes
     checking for C compiler default output file name... a.out
     checking for suffix of executables...
     checking whether we are cross compiling... no
     checking for suffix of object files... o
     checking whether the compiler supports GNU C... yes
     checking whether gcc accepts -g... yes
     checking for gcc option to enable C11 features... -std=gnu11
     checking for sys/types.h... yes
     checking for sys/stat.h... yes
     checking for strings.h... yes
     checking for inttypes.h... yes
     checking for stdint.h... yes
     checking for unistd.h... yes
     checking for pi.h... no

The proper way to handle this case is using the fourth argument (*note
Generic Headers::):

     $ cat configure.ac
     AC_INIT([Example], [1.0], [bug-example@example.org])
     AC_CHECK_HEADERS([number.h pi.h], [], [],
     [[#ifdef HAVE_NUMBER_H
     # include 
     #endif
     ]])
     $ autoconf -Wall
     $ ./configure CPPFLAGS='-I.'
     checking for gcc... gcc
     checking whether the C compiler works... yes
     checking for C compiler default output file name... a.out
     checking for suffix of executables...
     checking whether we are cross compiling... no
     checking for suffix of object files... o
     checking whether the compiler supports GNU C... yes
     checking whether gcc accepts -g... yes
     checking for gcc option to enable C11 features... -std=gnu11
     checking for number.h... yes
     checking for pi.h... yes

   See *note Particular Headers::, for a list of headers with their
prerequisites.

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