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.